systemc-2.3.4/0000755000175000017500000000000014342422106013065 5ustar carstencarstensystemc-2.3.4/CONTRIBUTING.md0000644000175000017500000001301014342422106015311 0ustar carstencarstenHow to Contribute ================= This repository is owned by the [Accellera Systems Initiative][1] and is maintained by the [SystemC Language Working Group][2] (LWG) according to the [Accellera Policies and Procedures][3]. **Contributions to this reference implementation can only be accepted from Accellera members.** ### Join the Accellera SystemC Language Working Group If you would like to contribute to the development of SystemC and/or this reference implementation, have your company, organization, or university join Accellera and its working groups. Find out more information at http://www.accellera.org/about/join. If your company, organization or university is already an Accellera member, you can request to [join the SystemC Language Working Group here][4]. ### Join the SystemC community If you are not an Accellera member, please join the **[SystemC community forum][5]** to provide feedback, report bugs and join the general discussion around the evolution of SystemC. [1]: https://www.accellera.org [2]: https://accellera.org/activities/working-groups/systemc-language [3]: https://accellera.org/about/policies-and-procedures [4]: https://workspace.accellera.org/apps/org/workgroup/lwg/ [5]: https://forums.accellera.org/forum/9-systemc/ --------------------------------------------------------------------- Issue reporting --------------------------------------------------------------------- You can post the bugs and suggestions of general interest to the [SystemC Community Forum][5]. When reporting bugs, please specify the following information (if applicable): 1. SystemC version 2. platform, compiler, flags 3. description of the problem 4. steps to reproduce the problem 5. compile/runtime warnings and errors 6. code sample, not more than 100 lines to demonstrate the problem > **Note** > All bugs will only be tested against the latest publicly available > version of the product. > **Note** > All C++ compilers that SystemC supports have bugs of different > degree of severity. We cannot fix those bugs. > Please report them to the compiler vendor. Accellera WG members have access to the WG-internal issue tracking at GitHub, as described [here][6]. [6]: docs/DEVELOPMENT.md#issue-tracking --------------------------------------------------------------------- Patch submission --------------------------------------------------------------------- The following **sign-off procedure** is established to ensure that patches submitted for inclusion into this Accellera reference implementation are properly licensed under the [Apache License Version 2.0](LICENSE). The sign-off is a simple line at the end of the explanation for the patch (or commit message), which certifies that you wrote it yourself or otherwise have the right to pass it on as an open-source patch: ### Accellera Developer's Certificate of Origin By making a signed-off contribution to this Accellera project, I certify that: 1. The contribution was created in whole or in part by me and I have the right to submit it under the Apache License Version 2.0 (see LICENSE). 2. The contribution was provided directly to me by some other person who certified (1) above, and I am forwarding it without modification. 3. I understand and agree that this Accellera project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed in accordance with this project or the Apache License Version 2.0. If you can certify the above *Accellera Developer's Certificate of Origin*, please use `git commit --signoff` to add a line of the form: ``` Signed-off-by: Ima Contributor ``` using your real name (no pseudonyms or anonymous contributions). > **Note** > For Accellera members, contributions are already bound by the > [Accellera policies and procedures][3] and the sign-off is optional, > but recommended. For **non-Accellera** members, the sign-off is > **mandatory** for consideration by the Accellera WGs. When submitting a pull-request against the public repository, the contribution may be considered by the Accellera WGs for inclusion. An Accellera member may submit it to the private repository with their own `Signed-off-by` line appended. It stays under the sole governance of the corresponding WGs to decide whether the proposal will be included in the reference implementation (or future Accellera standards). --------------------------------------------------------------------- Repository organization --------------------------------------------------------------------- The central source code repository of the Accellera SystemC implementation is hosted in two repositories at [GitHub](http://github.com). The main repositories are **private** to the [`OSCI-WG` GitHub organization][7] and can be found at: * https://github.com/OSCI-WG/systemc (core SystemC library) * https://github.com/OSCI-WG/systemc-regressions (regression test suite) A read-only, **public** copy of these repositories can be found at * https://github.com/accellera-official/systemc (core SystemC library) * https://github.com/accellera-official/systemc-regressions (regression test suite) To obtain access to the repositories and the GitHub organization in general, LWG members can contact the LWG chairs at including their GitHub account name. [7]: https://github.com/osci-wg "Accellera WG GitHub organization" systemc-2.3.4/AUTHORS.md0000644000175000017500000000366314342422106014544 0ustar carstencarsten# Authors * Daniel Aarno (@DAarno) * James Aldis * Bas Arts (@basarts) * Guillaume Audeon (@gjaudeon) * John Aynsley (aynsley) * Mohamed Bamakhrama (@mohamed) * Martin Barnasconi (@barnasc) * Bishnupriya Bhattacharya (@bpriya) * David Black (@dcblack) * Bill Bunton (@bbunton) * Gene Bushuyev * Mark Burton (@markfoodyburton) * Jerome Cornet (@jeromecornetst) * Guillaume Delbergue (@guyguy333) * Jack Donovan * Ali Dasdan * Paul Ehrlich (@eactor) * Karsten Einwich (@Einwich) * Alan Fitch (@apfitch) * Haozhuo Gao (@HZ-HZ) * Ralph Görgen (@ralphg) * Abhijit Ghosh * Andy Goodrich (@AndrewGoodrich) * Robert Günzel * Damien Hedde (@dhedde) * Andreas Hedström (@andreashedstrom-intel) * Philipp A. Hartmann (@pah) * Gino van Hauwermeiren * Ulrich Holtmann * Martin Janssen (@martin-janssen) * Lukas Jünger (@aut0) * Vijay Kumar * Joshua Landau (@JoshuaLandau-ARM) * Stan Y. Liao * David Long (@david-long-doulos) * Torsten Mähne (@maehne) * Laurent Maillet-Contoz (@lmailletcontoz) * Marcelo Montoreano * Eric Paire (@epaire) * Sonal Podder (@sonalpoddar) * Roman I Popov (@ripopov) * Cesar Quiroz * Amit Rao * Harish Sarin * Stuart Swan * Andres Takach (@andres-takach) * Thomas Uhle (@uhle) * Bart Vanthournout (@bartvt) * Dirk Vermeersch * veeYceeY (@veeYceeY) * Thilo Vörtler (@voertler) * Trevor Wieman (@twieman) * Charles Wilson * Richard Xia (@richardxia) * Felix Yan (@felixonmars) # Companies * ARM Ltd. * Bern University of Applied Sciences * Cadence Design Systems, Inc. * Circuitsutra Technologies Pvt Ltd. * COSEDA Technologies GmbH * CoWare, Inc. * Doulos, Inc. * Ericsson AB * Fraunhofer-Gesellschaft * GreenSocs * Intel Corporation * Mentor Graphics Corporation * NXP Semiconductors * OFFIS eV * Siemens * STMicroelectronics * Synopsys, Inc. * Texas Instruments * Université Pierre et Marie Curie * XtremeEDA Corp. systemc-2.3.4/configure.ac0000644000175000017500000005453114342422106015363 0ustar carstencarstendnl *************************************************************************** dnl dnl Licensed to Accellera Systems Initiative Inc. (Accellera) under one or dnl more contributor license agreements. See the NOTICE file distributed dnl with this work for additional information regarding copyright ownership. dnl Accellera licenses this file to you under the Apache License, Version 2.0 dnl (the "License"); you may not use this file except in compliance with the dnl License. You may obtain a copy of the License at dnl dnl http://www.apache.org/licenses/LICENSE-2.0 dnl dnl Unless required by applicable law or agreed to in writing, software dnl distributed under the License is distributed on an "AS IS" BASIS, dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or dnl implied. See the License for the specific language governing dnl permissions and limitations under the License. dnl dnl *************************************************************************** dnl dnl configure.ac -- dnl Process this file with autoconf to produce a configure script. dnl dnl Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 dnl dnl *************************************************************************** dnl dnl MODIFICATION LOG - modifiers, enter your name, affiliation, date and dnl changes you are making here. dnl dnl Name, Affiliation, Date: Alan Fitch, Doulos, 2012-03-10 dnl Description of Modification: TLM2 files added dnl dnl Name, Affiliation, Date: Philipp A. Hartmann, OFFIS, 2013-08-20 dnl Description of Modification: Installation/configuration reimplemented dnl dnl *************************************************************************** dnl dnl Initialization. dnl AC_INIT([SystemC], [2.3.4], [http://forums.accellera.org/forum/9-systemc/], [systemc], [http://accellera.org/], ) dnl version of the included TLM library TLM_PACKAGE_VERSION=2.0.6 AC_SUBST(TLM_PACKAGE_VERSION) AC_CONFIG_SRCDIR([README.md]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_MACRO_DIR([config]) dnl dnl Some simple checks. dnl AC_CANONICAL_SYSTEM AM_INIT_AUTOMAKE([1.10 tar-pax -Werror -Wno-portability no-define subdir-objects foreign]) dnl 1.10 needed for .s file support of LIBTOOLFLAGS dnl enable silent rules, if present m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) dnl define AS_VAR_APPEND, if not present (on older Autoconf versions) m4_ifndef([AS_VAR_APPEND],[as_fn_append () { eval $[1]=\$$[1]\$[2]; } AC_DEFUN([AS_VAR_APPEND],[as_fn_append $1 $2])])dnl dnl dnl reset default compiler flags dnl : ${CFLAGS=""} : ${CXXFLAGS=""} dnl check for C++ compiler AC_PROG_CXX dnl extract C++ compiler name (used for matching CC and aCC below) CXX_COMP=`set $CXX; basename $1` dnl check for clang++ AC_CACHE_CHECK([whether we are using a Clang/LLVM C++ compiler], [sc_cv_clangxx], [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[ #ifndef __clang__ not clang #endif ]])],dnl [sc_cv_clangxx=yes],[sc_cv_clangxx=no]) AC_LANG_POP([C++])]) dnl check for C compiler (default to C++ compiler) : ${CC="${CXX}"} AC_PROG_CC dnl check for clang AC_CACHE_CHECK([whether we are using a Clang/LLVM C compiler], [sc_cv_clang], [AC_LANG_PUSH([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[ #ifndef __clang__ not clang #endif ]])],dnl [sc_cv_clang=yes],[sc_cv_clang=no]) AC_LANG_POP([C])]) dnl AM_PROG_AR available since Automake 1.11.2, generic check otherwise m4_ifdef([AM_PROG_AR],[AM_PROG_AR],[AC_CHECK_TOOL([AR],[ar],[ar])]) dnl Update default archiver flags to avoid warnings on some platforms, dnl see https://www.mail-archive.com/bug-automake@gnu.org/msg04226.html : ${ARFLAGS=cr} : ${AR_FLAGS=${ARFLAGS}}dnl used by many libtool versions AM_PROG_AS AC_PROG_INSTALL AC_PROG_LN_S dnl dnl Set the compiler flags and target architecture. dnl EXTRA_CXXFLAGS="-Wall" EXTRA_CFLAGS="-xc" EXTRA_ASFLAGS="" EXTRA_LDFLAGS="" DEBUG_CXXFLAGS="-g" OPT_CXXFLAGS="-O3" EXPLICIT_LPTHREAD="-lpthread" LDFLAG_RPATH="-Wl,-rpath=" dnl Run assembler with pre-processor on GCC-compatible compilers AS_VAR_IF([GXX],[yes],[EXTRA_ASFLAGS="-xassembler-with-cpp"]) dnl dnl Prepare architecture alias (to be refined later) dnl AS_CASE([$target], [*-apple-*], [TARGET_ARCH=macosx], [*linux*], [TARGET_ARCH=linux], [*bsd*|*dragonfly*],[TARGET_ARCH=bsd], [*mingw*], [TARGET_ARCH=mingw], [*cygwin*], [TARGET_ARCH=cygwin], [sparc-*-solaris*], [TARGET_ARCH=sparcOS5], [*hpux11*], [TARGET_ARCH=hpux11], dnl default [AC_MSG_ERROR("sorry...architecture not supported")]) dnl Adjust for GCC on Solaris and HP-UX AS_CASE([${TARGET_ARCH}], [hpux11|sparcOS5], [AS_VAR_IF([GXX],[yes],[TARGET_ARCH="gcc${TARGET_ARCH}"])]) dnl dnl Refine architecture settings dnl AS_CASE([${TARGET_ARCH}], [linux|bsd|mingw|cygwin],dnl [# check CPU architecture AS_CASE([${target_cpu}], dnl [x86_64|amd64], dnl [TARGET_ARCH="${TARGET_ARCH}64" QT_ARCH="x86_64" CPU_ARCH="-m64"], [x*86|i*86], dnl [QT_ARCH="iX86" CPU_ARCH="-m32"], [aarch64], dnl [TARGET_ARCH="linuxaarch64" QT_ARCH="aarch64" CPU_ARCH=""], [AC_MSG_ERROR("sorry...architecture not supported")]) # check compiler AS_VAR_IF([GXX],[yes],dnl [EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${CPU_ARCH}" EXTRA_ASFLAGS="${EXTRA_ASFLAGS} ${CPU_ARCH}"], [AC_MSG_ERROR("sorry...compiler not supported")]) # use WinFiber on MinGW platforms AS_CASE([${TARGET_ARCH}], [mingw*],[QT_ARCH="none"]) ], [macosx],dnl [LDFLAG_RPATH="-Wl,-rpath -Wl," # check CPU architecture AS_CASE([${target_cpu}], dnl [x86_64|amd64], dnl [TARGET_ARCH="${TARGET_ARCH}64" CPU_ARCH="x86_64" QT_ARCH="x86_64"], [x*86|i*86], dnl [CPU_ARCH="i386" QT_ARCH="iX86"], [powerpc64], dnl [TARGET_ARCH="${TARGET_ARCH}ppc64" CPU_ARCH="ppc64" QT_ARCH="pthreads"], [powerpc], dnl [TARGET_ARCH="${TARGET_ARCH}ppc" CPU_ARCH="ppc" QT_ARCH="powerpc-apple-macosx"], [AC_MSG_ERROR("sorry...architecture not supported")]) # check compiler AS_VAR_IF([GXX],[yes],dnl [EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -arch ${CPU_ARCH}" EXTRA_ASFLAGS="${EXTRA_ASFLAGS} -arch ${CPU_ARCH} -x assembler"], [AC_MSG_ERROR("sorry...compiler not supported")]) ], [gcchpux11],dnl [QT_ARCH="hppa"], [hpux11],dnl [QT_ARCH="hppa" AS_VAR_IF([CXX_COMP],[aCC], dnl [EXTRA_CXXFLAGS="-AA -ext +DA2.0 +DS2.0" EXTRA_CFLAGS="-Wa,-w36" OPT_CXXFLAGS="+O1" : ${CCAS=/usr/ccs/bin/as}], [AC_MSG_ERROR("sorry...compiler not supported")])], [gccsparcOS5],dnl [QT_ARCH="sparc-os2" LDFLAG_RPATH="-Wl,-R"], [sparcOS5],dnl [QT_ARCH="sparc-os2" LDFLAG_RPATH="-Wl,-R" AS_VAR_IF([CXX_COMP],[CC], dnl [EXTRA_CXXFLAGS="" EXTRA_CFLAGS=""], [AC_MSG_ERROR("sorry...compiler not supported")])] ) dnl AS_CASE([$TARGET_ARCH]) dnl include EXTRA_CXXFLAGS in EXTRA_(C|AS)FLAGS by default EXTRA_CFLAGS="${EXTRA_CXXFLAGS} ${EXTRA_CFLAGS}" dnl suppress clang's warnings about unused command-line arguments dnl (currently enforced for assembler and linker only) AS_IF([test "$sc_cv_clangxx" = yes],dnl CXX is used for linking [EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -Wc,-Qunused-arguments"]) AS_IF([test "$sc_cv_clang" = yes -a "$CCAS" = "$CC"], dnl CC used as assembler [EXTRA_ASFLAGS="${EXTRA_ASFLAGS} -Qunused-arguments"]) dnl dnl check for pthreads compiler flags. dnl AX_PTHREAD dnl dnl check for presence of posix_memalign function dnl AC_CHECK_FUNC([posix_memalign],[AC_DEFINE([SC_HAVE_POSIX_MEMALIGN],[1])]) dnl dnl Libtool setup dnl dnl - libtools should be put *after* all CC options have been set dnl - explicitly use C++ for libtool initialization AC_LANG([C++]) dnl - need to pass EXTRA_CXXFLAGS to Libtool via CXXFLAGS to correctly dnl detect C++ library dependencies, esp. for cross-compilation CXXFLAGS_USER="${CXXFLAGS}" CXXFLAGS="${EXTRA_CXXFLAGS} ${CXXFLAGS}" dnl AC_PROG_LIBTOOL dnl - restore user-given CXXFLAGS CXXFLAGS="${CXXFLAGS_USER}" dnl dnl Setup installation directories dnl AC_MSG_CHECKING([for SystemC install layout]) AC_ARG_WITH([unix-layout], [AS_HELP_STRING([--with-unix-layout], [use Unix directory layout for installation @<:@default=no@:>@])], [AS_CASE(["x$withval"], [xyes], [sysc_install_layout=Unix], [xno|x],[sysc_install_layout=classic], [AC_MSG_ERROR([Unknown install layout requested.])])], [sysc_install_layout=classic] ) # AC_ARG_WITH gnu-layout abs_srcdir=`cd "$srcdir" && pwd` abs_builddir=`pwd` if test "x$prefix" = "xNONE" ; then dnl Set the default prefix and make sure the prefix is absolute. prefix="$abs_srcdir" dnl Ignore install layout, when installing to $srcdir sysc_install_layout=ignored fi AC_MSG_RESULT($sysc_install_layout) dnl dnl Setup "classic" installation layout, if not overridden dnl rootdocdir='${docdir}' if test $sysc_install_layout = Unix ; then dnl Automake/GNU/Unix defaults are kept, dnl but default library architecture suffix cleared LIB_ARCH_SUFFIX='' else dnl classic/ignored (if not explicitly given) sysc_install_layout=classic if test x$datarootdir = x'${prefix}/share' ; then datarootdir='${prefix}' fi if test x$datadir = x'${datarootdir}' ; then datadir='${prefix}' fi if test x$docdir = x'${datarootdir}/doc/${PACKAGE_TARNAME}' ; then dnl main documentation docdir='${prefix}/docs' dnl "core" documentation (from root directory) rootdocdir='${prefix}' fi dnl default library arch suffix is target arch LIB_ARCH_SUFFIX='-${TARGET_ARCH}' fi AC_SUBST([rootdocdir]) AC_SUBST([examplesdir], ['${rootdocdir}/examples'] ) AC_SUBST([libarchdir], ['${libdir}${LIB_ARCH_SUFFIX}'] ) AM_CONDITIONAL([SEPARATE_INSTALL_TREE],dnl [ test "x${prefix}" != "x${abs_srcdir}" ]) dnl Check for out-of-tree build AM_CONDITIONAL([SEPARATE_BUILD_TREE],dnl [ test "x${abs_srcdir}" != "x${abs_builddir}" ]) #AM_COND_IF([SEPARATE_BUILD_TREE],[ if test -z "${SEPARATE_BUILD_TREE_TRUE}" ; then if test "x${prefix}" = "x${abs_builddir}" ; then AC_MSG_ERROR([Installation to build directory not supported.]) fi fi #]) dnl dnl handle library arch suffix dnl AC_MSG_CHECKING([for SystemC library arch suffix]) AC_ARG_WITH([arch-suffix], [AS_HELP_STRING([--with-arch-suffix], [add suffix to library installation directory @<:@default=-@:>@])], [AS_CASE(["x$withval"],dnl [xyes],[with_arch_suffix=yes LIB_ARCH_SUFFIX='-${TARGET_ARCH}'], [xno|x],[with_arch_suffix=no LIB_ARCH_SUFFIX=""], [LIB_ARCH_SUFFIX="${withval}"])], [with_arch_suffix=default] ) # AC_ARG_WITH arch-suffix AC_MSG_RESULT($with_arch_suffix (TARGET_ARCH=${TARGET_ARCH})) dnl dnl add debugging symbols to library dnl AC_MSG_CHECKING([whether to add debug symbols to the SystemC library]) AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug],[include debugging symbols]), [AS_CASE(["${enableval}"],dnl [yes|no],[], [AC_MSG_ERROR([bad value ${enableval} for --enable-debug])])], [enable_debug=no]) AM_CONDITIONAL([WANT_DEBUG], [test x$enable_debug = xyes]) AC_MSG_RESULT($enable_debug) dnl dnl switch off compiler optimization dnl AC_MSG_CHECKING([whether to enable compiler optimization]) AC_ARG_ENABLE([optimize], AS_HELP_STRING([--disable-optimize],[disable compiler optimization]), [AS_CASE(["${enableval}"],dnl [yes|no],[], [AC_MSG_ERROR([bad value ${enableval} for --enable-optimize])])], [enable_optimize=yes]) AM_CONDITIONAL([WANT_OPTIMIZE], [test x$enable_optimize = xyes]) AC_MSG_RESULT($enable_optimize) dnl dnl async_request_update support dnl AC_MSG_CHECKING([whether to add support for asynchronous update requests]) support_async_updates=no AS_IF([test x$ax_pthread_ok = xyes],[support_async_updates=pthread], [test x$ax_pthread_ok = xno], [AS_CASE(["${TARGET_ARCH}"], dnl dnl no pthreads needed on MSVC/MinGW [mingw*|msvc*],[support_async_updates=native])]) AC_ARG_ENABLE([async-updates], AS_HELP_STRING([--disable-async-updates], [disable request_async_update support]), [AS_CASE(["${enableval}"],dnl [yes],[AS_IF([test $support_async_updates = no],dnl [AC_MSG_WARN([no native/pthread support found, disabled]) enable_async_updates=no support_async_updates=disabled])], [no], [support_async_updates=disabled], [AC_MSG_ERROR([bad value ${enableval} for --enable-async-updates])])], [AS_IF([test ${support_async_updates} != no], [enable_async_updates=yes], [enable_async_updates=no])]dnl ) AM_CONDITIONAL([DISABLE_ASYNC_UPDATES], [test x"$enable_async_updates" = xno]) AC_MSG_RESULT($enable_async_updates) dnl dnl use pthreads for SystemC processes dnl AC_MSG_CHECKING([whether to use POSIX threads for SystemC processes]) AC_ARG_ENABLE([pthreads], AS_HELP_STRING([--enable-pthreads], [use POSIX threads for SystemC processes]), [AS_CASE(["${enableval}"],dnl [yes],dnl [AS_IF([test x"$ax_pthread_ok" = xyes],[QT_ARCH=pthreads], [enable_pthreads=no AC_MSG_WARN([no pthread support found, ignore --enable-pthreads])] )], [no],[], [AC_MSG_ERROR([bad value ${enableval} for --enable-pthreads])])], [enable_pthreads=no]) AS_IF([test x"$enable_pthreads" = xyes],[dnl AS_CASE(["${TARGET_ARCH}"],dnl dnl pthread not supported in win32/win64 [mingw*|msvc*],dnl [AC_MSG_ERROR([pthread processes not supported on target architecture ${target}])dnl ])dnl ]) AS_IF([test x"$QT_ARCH" = xpthreads -a x"$enable_pthreads" = xno],[dnl AS_IF([test x"$ax_pthread_ok" = xyes],dnl [enable_pthreads=yes], [AC_MSG_ERROR([pthread processes required on target architecture ${target}])])dnl ]) AM_CONDITIONAL([WANT_PTHREADS_THREADS],dnl [test x"$enable_pthreads" = xyes]) AM_CONDITIONAL([WANT_QT_THREADS],dnl [test x"$enable_pthreads" = xno -a x"$QT_ARCH" != xnone ]) AM_CONDITIONAL([USES_PTHREADS_LIB],dnl [test x"$enable_pthreads" = xyes -o x"$support_async_updates" = xpthread ]) AC_MSG_RESULT($enable_pthreads) dnl dnl enable simulation phase callbacks (experimental) dnl AC_MSG_CHECKING([whether to enable simulation phase callbacks (experimental)]) AC_ARG_ENABLE([phase-callbacks], [AS_HELP_STRING([--enable-phase-callbacks], [enable simulation phase callbacks (experimental) @<:@yes|tracing|no(=default)@:>@])], [AS_CASE(["${enableval}"],dnl [yes], [enable_phase_callbacks=yes], [tracing], [enable_phase_callbacks=tracing], [no|default],[enable_phase_callbacks=no], [AC_MSG_ERROR([bad value ${enableval} for --enable-phase-callbacks])])], [enable_phase_callbacks=no]) AM_CONDITIONAL([ENABLE_CALLBACKS],dnl [test x"$enable_phase_callbacks" = xyes]) AM_CONDITIONAL([ENABLE_CALLBACKS_TRACING],dnl [test x"$enable_phase_callbacks" = xtracing]) AC_MSG_RESULT($enable_phase_callbacks) dnl dnl enable VCD scopes dnl AC_MSG_CHECKING([whether to enable VCD scopes by default]) AC_ARG_ENABLE([vcd-scopes], [AS_HELP_STRING([--enable-vcd-scopes], [enable vcd scopes @<:@yes(=default)|no@:>@])], [AS_CASE(["${enableval}"],dnl [yes|default], [enable_vcd_scopes=yes], [no],[enable_vcd_scopes=no], [AC_MSG_ERROR([bad value ${enableval} for --enable-vcd-scopes])])], [enable_vcd_scopes=yes]) AM_CONDITIONAL([DISABLE_VCD_SCOPES],dnl [test x"$enable_vcd_scopes" = xno]) AC_MSG_RESULT($enable_vcd_scopes) dnl dnl enable legacy memory management for allocating coroutine stack dnl AC_MSG_CHECKING([whether to enable legacy memory managment for allocating coroutine stack]) AC_ARG_ENABLE([legacy_mem_mgmt], [AS_HELP_STRING([--enable-legacy-mem-mgmt], [enable legacy memory management for coroutine stack @<:@yes|no(=default)@:>@])], [AS_CASE(["${enableval}"],dnl [yes], [enable_legacy_mem_mgmt=yes], [no|default],[enable_legacy_mem_mgmt=no], [AC_MSG_ERROR([bad value ${enableval} for --enable-legacy-mem-mgmt])])], [enable_legacy_mem_mgmt=no]) AM_CONDITIONAL([ENABLE_LEGACY_MEM_MGMT],dnl [test x"$enable_legacy_mem_mgmt" = xyes]) AC_MSG_RESULT($enable_legacy_mem_mgmt) dnl dnl Set conditionals for various quick thread architectures: dnl AM_CONDITIONAL([QT_ARCH_X86], [ test "${QT_ARCH}" = "iX86" ]) AM_CONDITIONAL([QT_ARCH_AARCH64], [ test "${QT_ARCH}" = "aarch64" ]) AM_CONDITIONAL([QT_ARCH_X86_64], [ test "${QT_ARCH}" = "x86_64" ]) AM_CONDITIONAL([QT_ARCH_POWERPC_MACOSX], [ test "${QT_ARCH}" = "powerpc-apple-macosx" ]) AM_CONDITIONAL([QT_ARCH_SPARC], [ test "${QT_ARCH}" = "sparc-os2" ]) AM_CONDITIONAL([QT_ARCH_HPPA], [ test "${QT_ARCH}" = "hppa" ]) dnl dnl pkg-config setup dnl LIBCONFIG_DEFINES= PKGCONFIG_DEFINES= PKGCONFIG_CFLAGS= PKGCONFIG_LDPRIV= dnl add pthread (private) dependency #AM_COND_IF([USES_PTHREADS_LIB],[ if test -z "${USES_PTHREADS_LIB_TRUE}" ; then PKGCONFIG_CFLAGS="${PTHREAD_CFLAGS}" PKGCONFIG_LDPRIV="${PTHREAD_LIBS} ${EXPLICIT_LPTHREAD}" fi #]) dnl dnl check for additional (header+lib) compiler flags dnl # AC_CHECK_DEFINE([DEBUG_SYSTEMC], # [PKGCONFIG_DEFINES="${PKGCONFIG_DEFINES} -DDEBUG_SYSTEMC"]) AC_CHECK_DEFINE([SC_DISABLE_VIRTUAL_BIND],dnl [PKGCONFIG_DEFINES="${PKGCONFIG_DEFINES} -DSC_DISABLE_VIRTUAL_BIND" sysc_non_1666=yes]) dnl dnl check for additional library compiler flags (documentation only) dnl AC_CHECK_DEFINE([SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION],dnl [LIBCONFIG_DEFINES="${LIBCONFIG_DEFINES} -DSC_ENABLE_IMMEDIATE_SELF_NOTIFICATION" sysc_non_1666=yes]) AC_CHECK_DEFINE([SC_ENABLE_EARLY_MAXTIME_CREATION],dnl [LIBCONFIG_DEFINES="${LIBCONFIG_DEFINES} -DSC_ENABLE_EARLY_MAXTIME_CREATION" sysc_non_1666=yes]) dnl dnl Substitution variables. dnl AC_SUBST(LIBCONFIG_DEFINES) AC_SUBST(PKGCONFIG_DEFINES) AC_SUBST(PKGCONFIG_CFLAGS) AC_SUBST(PKGCONFIG_LDPRIV) AC_SUBST(EXTRA_CXXFLAGS) AC_SUBST(EXTRA_CFLAGS) AC_SUBST(EXTRA_ASFLAGS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(EXPLICIT_LPTHREAD) AC_SUBST(LDFLAG_RPATH) AC_SUBST(DEBUG_CXXFLAGS) AC_SUBST(OPT_CXXFLAGS) AC_SUBST(TARGET_ARCH) AC_SUBST(LIB_ARCH_SUFFIX) AC_SUBST(QT_ARCH) dnl dnl Create the Makefiles. dnl AC_OUTPUT( Makefile src/Makefile src/systemc.pc src/tlm.pc src/sysc/Makefile src/sysc/packages/boost/Makefile src/sysc/packages/qt/Makefile src/tlm_core/Makefile src/tlm_utils/Makefile examples/Makefile examples/sysc/Makefile examples/tlm/Makefile examples/tlm/common/Makefile docs/Makefile docs/sysc/doxygen/Doxyfile docs/tlm/doxygen/Doxyfile ) dnl dnl print configuration summary dnl dnl invert "async_updates" setting for output AS_VAR_IF([enable_async_updates],[yes],dnl [disable_async_updates=no],dnl [disable_async_updates=yes sysc_non_1666=yes]) AS_IF([test -z "${WANT_QT_THREADS_TRUE}"],[sysc_coroutine="QuickThreads"], [test -z "${WANT_PTHREADS_THREADS_TRUE}"],[sysc_coroutine="Pthreads"], [sysc_coroutine="WinFiber"]) sysc_compiler="${CXX}" AS_VAR_IF([CC],["${CXX}"],dnl [AS_VAR_APPEND([sysc_compiler],[" (C/C++)"])],dnl [AS_VAR_APPEND([sysc_compiler],[" (C++) / ${CC} (C)"])]) AS_VAR_IF([CCAS],["${CC}"],[],dnl [AS_VAR_APPEND([sysc_compiler],[" / ${CCAS} (Assembler)"])]) dnl prepare printing of command-line flags sysc_flags="" AS_IF([test -n "${CFLAGS}"],dnl [AS_VAR_APPEND([sysc_flags],dnl [" C compiler flags (CFLAGS) : ${CFLAGS}${as_nl}"])]) AS_IF([test -n "${CXXFLAGS}"],dnl [AS_VAR_APPEND([sysc_flags],dnl [" C++ compiler flags (CXXFLAGS) : ${CXXFLAGS}${as_nl}"])]) AS_IF([test -n "${CCASFLAGS}"],dnl [AS_VAR_APPEND([sysc_flags],dnl [" Assembler flags (CCASFLAGS) : ${CCASFLAGS}${as_nl}"])]) AS_IF([test -n "${LDFLAGS}"],dnl [AS_VAR_APPEND([sysc_flags],dnl [" Linker flags (LDFLAGS) : ${LDFLAGS}${as_nl}"])]) AS_IF([test -n "${sysc_flags}"],dnl [sysc_flags="${as_nl} User-provided command-line flags :${as_nl}${sysc_flags}"]) dnl prepare printing of additional settings AS_IF([test -n "${PKGCONFIG_DEFINES}" -o -n "${LIBCONFIG_DEFINES}"],[dnl sysc_additional="${as_nl} Detected additional settings:" AS_IF([test -n "${PKGCONFIG_DEFINES}"],dnl [AS_VAR_APPEND([sysc_additional],dnl ["${as_nl} ${PKGCONFIG_DEFINES}"])]) AS_IF([test -n "${LIBCONFIG_DEFINES}"],dnl [AS_VAR_APPEND([sysc_additional],dnl ["${as_nl} ${LIBCONFIG_DEFINES}"])]) AS_VAR_APPEND([sysc_additional],["${as_nl}"])dnl ]) dnl additional settings SYSTEMC_HOME=$prefix prefix='' dnl replace for printing dnl ... resolve aliases eval "sysc_includedir=\"${includedir}\"" eval "sysc_includedir=\"${sysc_includedir}\"" eval "sysc_libdir=\"${libdir}${LIB_ARCH_SUFFIX}\"" eval "sysc_libdir=\"${sysc_libdir}\"" eval "sysc_docdir=\"${docdir}\"" eval "sysc_docdir=\"${sysc_docdir}\"" eval "sysc_examplesdir=\"${examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_prefix=\"${SYSTEMC_HOME}\"" dnl ... restore prefix prefix=$SYSTEMC_HOME cat < port_i; sc_out SC_NAMED(port_o); // in-class member init., requires C++11 sc_signal sig; }; - [2.3.3] Add sc_process_handle::basename() function - [2.3.2] Extend hierarchical name registry In addition to `sc_hierarchical_name_exists`, four new functions have been added to register a name with the SystemC name hierarchy: bool sc_register_hierarchical_name(const char* hierarchical_name); bool sc_register_hierarchical_name(const sc_object* parent, const char* name); bool sc_unregister_hierarchical_name(const char* hierarchical_name); bool sc_unregister_hierarchical_name(const sc_object* parent, const char* name); These functions enable (un)registering an external hierarchical name with the SystemC name hierarchy, e.g. used by the CCI configuration standard. Additionally, two new functions enable obtaining the persistent name pointers stored in the name registry, if they exist: const char* sc_get_hierarchical_name(const char* hierarchical_name); const char* sc_get_hierarchical_name(const sc_object* parent, const char* name); - [2.3.2] Add new RTTI queries and helper class A new class `sc_type_index` (with C++11 just a typedef to `std::type_index`) is introduced, which helps writing RTTI-related code. This new type is used by two new inspection functions added to sc_port_base, and sc_export_base, respectively (implemented in their corresponding template classes) to query the RTTI information of the interface types: virtual sc_type_index sc_port_base::get_interface_type() const = 0; virtual sc_type_index sc_export_base::get_interface_type() const = 0; - [2.3.2] Add never-notified event: const sc_event sc_event::none wait( sc_event::none ); // never triggered - [2.3.2] Add new `sc_time::from_string` functions, `sc_time_tuple` class With sc_time::from_string, it is now possible to conveniently create time objects from string repesentations (e.g. configuration files): sc_time( double v, const char* unit ); static sc_time from_string(const char* v); To simplify the reverse direction, a new class `sc_time_tuple` is introduced, providing separate access to the value and the unit of the time object: class sc_time_tuple { // ... value_type value() const; // normalized value (wrt. unit) sc_time_unit unit() const; // normalized unit const char * unit_symbol() const; }; sc_time tuple tt = sc_time(10000, SC_NS); tt.value() == 10 tt.unit() == SC_US - [2.3.1] Improved conversion between the underlying integral time representation and sc_time objects: - Add a nested typedef "value_type" to sc_time to enable an implementation-independent use of the underlying integral time representation (see IEEE 1666-2011, 5.11.1). - Adding an inverse to the 'sc_time::value()' function to convert a plain value back to an sc_time object: static sc_time sc_time::from_value( value_type t ); - Adding modulus operators (%, %=) to compute time offsets from clock or quantum boundaries: sc_time operator%(const sc_time& lhs, const sc_time& rhs); sc_time& sc_time::operator%=(); Note: These operators are missing from IEEE 1666-2011, which make e.g. the tlm_global_quantum implementation nearly impossible within the limits of the SystemC standard. - [2.3.1] Add function to determine the current object hierarchy: sc_object* sc_core::sc_get_current_object() Returns a pointer to the sc_object instance (or NULL) that would currently become the parent object of a newly created sc_object instance (i.e. the current module during elaboration, and the currently active process during simulation). - [2.3.1] Add an sc_signal initialization which does not create an event via newly provided constructors to the signal classes: sc_signal::sc_signal( const char* name , const T& initial_value ); (similarly for sc_buffer and sc_signal_resolved) Compared to calling the "write()" function on a signal during the elaboration, these constructors will set the initial value of the signal without triggering an event at the beginning of the simulation (and therefore may avoid triggering sensitive processes). - [2.3.2] Add common signal base class `sc_signal_channel` The new base class for all signal channels reduces the code duplication in the template-based signal implementations. - [2.3.2] Add support for SC_SIGNAL_WRITE_CHECK=CONFLICT Instead of disabling all runtime signal write checks via the environment setting SC_SIGNAL_WRITE_CHECK=DISABLE, setting the variable to SC_SIGNAL_WRITE_CHECK=CONFLICT allows detecting conflicting writes to a signal within a single evaluation phase (see INSTALL). - [2.3.2] Promote SC_DEFAULT_*_ACTIONS to enum constants Previously, the SC_DEFAULT_(INFO,WARNING,ERROR,FATAL)_ACTIONS were defined as macros. In this release, they are moved into the actions enumeration as constants. - [2.3.2] Call report handler for exceptions caught outside of sc_main: With two new functions added to the sc_report_handler: static sc_actions get_catch_actions(); static sc_actions set_catch_actions(sc_actions); and the new SC_DEFAULT_CATCH_ACTIONS = SC_DISPLAY it is now possible to externally influence the handling of exceptions caught outside of sc_main. - [2.3.1] Add a static function to sc_report_handler to query the current report handler function: static sc_report_handler_proc sc_report_handler::get_handler(); Additionally, sc_report_handler::set_handler() now returns the previously set handler (c.f. sc_report_handler::set_actions). - [2.3.2] Improved conversion from bitvector element references to bool Elements of a sc_bv can now be used in an boolean context (requires C++11, see section 5). This enables the following coding style: sc_bv<8> mybits; // ... if( mybits[0] ) // no longer a compiler error here! /* do something */ ; Note: For logic vectors, the bit-references still need to be converted to bool explicitly (e.g. via the "to_bool()" function. - [2.3.2] Support for scoped names in VCD trace files In VCD trace files, traced variables are now automatically grouped in hierarchical scopes (according to the '.' separators in the trace names). This feature can be disabled at compile-time or runtime. See INSTALL. - [2.3.2] Add VCD tracing support for sc_time and sc_event The VCD format supports tracing of "time" and "event" variables by default. Added new overloads to sc_trace and a corresponding implementation for VCD: void sc_trace( sc_trace_file* tf, const sc_time&, const std::string& ); void sc_trace( sc_trace_file* tf, const sc_event&, const std::string& ); - [2.3.1] Enhanced Autoconf/Automake build system - better control of the installation directories - improved libtool library dependency detection, especially in cross-compilation scenarios (--host=...) - support for pkg-config for SystemC and TLM (see http://www.freedesktop.org/wiki/Software/pkg-config/) - accept arbitrary GCC-compatible compilers (e.g. Clang, Intel compiler, compiler-wrappers like scan-build) - avoid deprecation warnings, cleanup implementation - less recursive build, silent rules by default - improved "make check" test handling - [2.3.2] Add support for AArch64 architecture (on Linux) - [2.3.2] Updated MS Visual C++ project and solution files to include support for Visual Studio 2010 and later - support for 32-bit and 64-bit builds - support for building SystemC dynamic link library (DLL) (see INSTALL) - switch to DLL-based runtime by default (/MD[d]) - [2.3.2] New CMake-based build system (experimental) - unified configuration of the SystemC on different platforms - see cmake/INSTALL_USING_CMAKE 5) Incompatibilities with previous releases =========================================== Here is a list of known incompatibilities between this release and 2.3.1 (and earlier): - MSVC project files have been upgraded to MSVC 2010. Building SystemC for earlier versions of MSVC might still be possible with the new CMake build system (see cmake/INSTALL_USING_CMAKE). - Switch to MSVC DLL-based Runtime Library (/MD[d]) instead of using the no longer recommended static variants. - The non-standard functions `interface_count` and `if_typename` in sc_port_base have been marked as private. - The non-standard, 32-bit implementation of sc_(u)int has been removed. - The non-standard macros WAIT, WAITN and WAIT_UNTIL have been renamed to SC_WAIT, SC_WAITN, SC_WAIT_UNTIL. - The non-standard macros SCAST, CCAST, RCAST have been removed. - The implicit inclusions of the system-headers "cstring" and "sstream" have been removed. See INSTALL. Here is a list of known incompatibilities between this release and 2.3.0 (and earlier): - The non-standard sc_time constructors - sc_time( uint64, bool scale ) - sc_time( double, bool scale ) have been deprecated and issue a warning when being used. Use the new 'sc_time::from_value' function instead (see section 3). - The non-standard function 'sc_object::get_parent()' has been deprecated, use 'sc_object::get_parent_object()' instead. - The non-standard function 'sc_signal::get_new_value()' has been deprecated (as required by IEEE 1666-2011). - The 'sc_string_old' class is no longer available by default. Define 'SC_USE_SC_STRING_OLD' before including "systemc.h", see INSTALL. - The implicit inclusions of the system-headers "windows.h" (on Windows), "cstring", "sstream" and (deprecated) "strstream" have been removed. See INSTALL. Here is a list of known incompatibilities between this release and 2.2.0: - The order that processes (SC_METHODs and SC_THREADs) are dispatched for execution may be different than the order with SystemC 2.2.0 for some SystemC programs. This is related to the new starvation policy support for the sc_start() function introduced with IEEE 1666_2011. 6) Initial support for C++11/14 =============================== This package includes an initial implementation of the C++11/14 proposal, presented at DVCon Europe 2016 ("Moving SystemC to a new C++ Standard"). This includes the addition of two new preprocessor symbols: - IEEE_1666_CPLUSPLUS (read-only) This symbol indicates the availability of certain SystemC features which depend on a particular version of the ISO C++ standard (see below). - SC_CPLUSPLUS (overridable) By default, the most recent supported version of the C++ standard for the current platform/compiler is automatically detected and reflected by the SC_CPLUSPLUS macro. Users can override (i.e. usually downgrade) the assumed C++ standard to an earlier version for compatiblity. The value of this macro has to be set consistently across the SystemC library build and all linked models (see INSTALL). The values of these macros follow the values defined by the C++ standards. Currently supported versions are: - 199711L (C++03, ISO/IEC 14882:1998, 14882:2003) - 201103L (C++11, ISO/IEC 14882:2011) - 201402L (C++14, ISO/IEC 14882:2014) - 201703L (C++17, ISO/IEC 14882:2017) The following features currently require a dedicated C++ standard version beyond ISO/IEC 14882:2003 (aka C++03): - C++11 (IEEE_1666_CPLUSPLUS==201103L) o explicit sc_bitref_r<>::operator bool() const Restricts direct boolean conversion of bitvector element references to explicit boolean contexts (e.g. `if` expressions). Use the `to_bool()` function on earlier setups. o On C++11-enabled platforms, the embedded Boost implementation is superseded by using standard C++11 features. o Convert sc_bind/sc_(c)ref macros to functions With the support of perfect forwarding since C++11, the dynamic process support macros sc_bind/sc(c)ref have been propagated to real functions in the namespace sc_core. For backwards compatibility, these functions are still made visible in the global namespace, unless the macro SC_BIND_IN_GLOBAL_NAMESPACE is explicitly defined to 0. o On C++11-enabled platforms, SC_NAMED uses uniform initialization syntax (regular () form on C++03) In the future, further language features depending on modern C++ language constructs may be added. 7) Experimental features ======================== In this section the experimental features of this release are listed. Note: Some of these features are not enabled in the default library configuration and need to be explicitly activated during at library build time. See INSTALL file. - Extended Simulation Phase Callbacks This release adds an optional mechanism to register callbacks to several simulation phases. This can be used to integrate custom introspection techniques in a non-invasive manner. New phases are added to the sc_status enumeration: SC_END_OF_INITIALIZATION, SC_END_OF_UPDATE, SC_BEFORE_TIMESTEP to enable a more fine-grained view to the SystemC simulation phases. When the phase callback mechanism is activated (see the INSTALL file), any sc_object can subscribe to a (set of) elaboration/simulation phases for dynamic callbacks explicitly: // trigger current object before updating the simulation time this->register_simulation_phase_callback( SC_BEFORE_TIMESTEP ); // trigger current object before returning to "sc_start" this->register_simulation_phase_callback( SC_PAUSED | SC_STOPPED ); Unsubscribing from any simulation phase is possible via the corresponding unregister_simulation_phase_callback( phase_cb_mask ) function. Both functions return the effective mask after the requested callback mask update. Therefore, querying the currently active mask can be achieved by calling the (un)registration functions with an empty mask: sc_object::phase_cb_mask current_cb_mask = this->register_simulation_phase_callback( 0u ); To enable the external (un)registration of callbacks for a user-defined sc_object class, the (un)registration functions can be made public by adding the following using directives to a 'public:' section of the class definition: using sc_core::sc_object::register_simulation_phase_callback; using sc_core::sc_object::unregister_simulation_phase_callback; When the simulation passes a phase where dynamic callbacks are registered, the subscribed objects are triggered via the function: virtual void sc_object::simulation_phase_callback(); which should then be implemented by the subscribing object's class. Within a simulation callback, the triggering phase can be determined via the IEEE 1666-2011 'sc_get_status()' function: void simulation_phase_callback() { std::cout << sc_core::sc_get_status() << std::endl; } A related feature is the triggering of sc_trace updates via these simulation phase callbacks instead of the hard-coded calls in various places of the simulation loop. This feature has to be enabled separately, see INSTALL file. - Allow creation of sc_max_time() objects before fixing the sc_time resolution Currently. IEEE 1666-2011 requires that any call to sc_core::sc_set_time_resolution( double, sc_time_unit ) happens before the construction of the first non-SC_ZERO_TIME sc_time object. This can be inconvenient in cases, where an "uninitialized sc_time value" is needed, which needs to be separate from SC_ZERO_TIME in some cases. A relaxation of the strict sc_time construction rules wrt. to the simulation time resolution can be optionally enabled via the preprocessor switch SC_ENABLE_EARLY_MAXTIME_CREATION (see INSTALL). When this option is enabled, the creation of time objects with the values SC_ZERO_TIME and 'sc_max_time()' are allowed before fixing the time resolution. The resolution is still fixed once the actual relationship between the internal time representation and the physical time units (SC_FS, SC_PS, ...) is used or observed by the application. - Allow suspending simulation to receive asynchronous updates When using asynchronous channels (updated from outside the simulation via async_request_update), the simulation can run into event starvation prematurely. Two new functions are added to the sc_prim_channel base class bool async_attach_suspending(); bool async_detach_suspending(); If any channel has attached itself to request suspension, instead of ending the simulation when running out of internal events, the simulation loop suspends until any external async_request_update() call is received. An example demonstrating the usage of this feature is provided in examples/sysc/2.3/simple_async (requires C++11). 8) Known Problems ================= - When building SystemC on Cygwin for the x86_64 platform with QuickThreads support, thread processes are not starting properly. Build with pthreads on this platform instead: ../configure --enable-pthreads ... - IEEE 1666-2011 does not explicitly define the behaviour in the corner cases of attempting to create sc_time objects smaller than the time resolution or bigger than sc_max_time(). This implementation currently truncates "small" sc_time objects to SC_ZERO_TIME, while "too big" objects wrap-around sc_max_time() and lead to a value modulo the maximum time. In both cases, no warning is generated. - The sign-extension of mixed-signedness logic expressions (&,|) involving one sc_bigint<> operand and C++ builtin integral types (int, short, etc.) is inconsistent between 32-bit and 64-bit platforms in some cases. Convert both operands to sc_bigint<> first. - The definition of sc_dt::(u)int64 differs from std::(u)int64_t types on some platforms. This may lead to problems with function overloads and/or format-string placeholders. As a workaround, convert these values explicitly to the correct type before passing them to functions expecting one of these types. For sc_time, use the new nested type sc_time::value_type to hold values of the underlying representation. - Bit/logic-vector reductions (or_reduce, and_reduce, etc.) return an 'sc_logic_value_t' enum value, instead of a bool or sc_logic (as required by IEEE 1666-2011). Using the return value of these functions in a boolean context, e.g. if( lv.or_reduce() ) { /* ... */ } might lead to wrong results in case of 'X' or 'Z' bits in the vector. Avoid this by converting the result to an 'sc_logic' first and perform a safe conversion to bool: if( sc_logic( lv.or_reduce() ).to_bool() ) { /* ... */ } - The current implementation of bit-wise operations on sc_bv and other bit types implicitly uses the left-hand argument as the size of the result rather than the size of the larger operand, as required by the IEEE 1666 standard. - The fixed-point implementation is not working correctly on MSVC 2015 (64-bit) or later, when built with optimization enabled (Release mode). On this compiler/platform, optimization needs to be disabled when using the fixed-point library (for all SystemC versions before and including 2.3.2). - Some paths in this release are longer than the historical 99 character limit of tar archives, and several Windows archivers (e.g. WinZip) have been reported to trip over this. The open source archiver 7-zip (http://7-zip.org) is known to work. 9) Fixed-point library ====================== SystemC contains a fixed-point datatypes package. Changes compared to SystemC 2.0.1 - support for explicit construction from "float" values - removing a conversion ambiguity by marking some constructors of sc_fxval[_fast] classes as 'explicit' - sc_fxnum::to_{integer} fully defined and accurate - read-only fixed-point bitrefs/subrefs returned from const values Compile-time macro SC_INCLUDE_FX must be defined in order to build applications that use fixed point types. You can specify a compiler flag, e.g., g++ -DSC_INCLUDE_FX ... or use a define statement before you include systemc.h, e.g.: #define SC_INCLUDE_FX #include "systemc.h" Due to the large size of the fixed-point datatypes header files, compilation can take considerably more time. If you want to use the fixed-point data types only (i.e., not data- types sc_int, sc_uint, sc_bigint, sc_biguint), compilation time can be reduced by defining compile-time macro SC_FX_EXCLUDE_OTHER (in addition to SC_INCLUDE_FX). 10) TLM Release Notes ==================== CONTENTS ======== 1) Supported SystemC versions 2) What's changed in this kit? 3) Known issues 10.1) Supported SystemC versions =============================== Starting with the current release, only the bundled SystemC version is supported. Parts of the TLM implementation are now linked into the kernel library. 10.2) What's changed in this kit? ================================ Compared to the TLM 2.0.3 kit (part of SystemC 2.3.1), the following has changed: - [2.0.6] tlm_fifo_get_if: resolve nb_peek ambiguity - [2.0.6] tlm_base_*_socket: implement get_protocol_types() - [2.0.6] tlm_base_socket_if: match existing functions in tlm_base_*_socket_b - [2.0.5] Fixed a regression introduced in 2.0.4, now allowing hierarchical binding of multi_passthrough_target_sockets again. - [2.0.5] tlm_req_rsp_channel: remove erroneous private inheritance - [2.0.4] A new base interface `tlm_socket_base_if` has been added to the TLM socket classes, providing a non-templated access to some socket information: o querying of protocol types (returning an `sc_type_index`, see above) o querying of socket category (TLM_INITIATOR_SOCKET, TLM_TARGET_SOCKET, TLM_MULTI_*_SOCKET) o querying port/export base (`get_base_port`/`get_base_export`) o querying bus width - [2.0.4] Move parts of TLM-2.0 library into prebuilt SystemC (shared) library By moving the TLM extension and phase registries and the global quantum handling into the prebuilt SystemC library, the global variables in these parts of TLM are more deterministically handled in case of dynamically linked models. Note: With this change, the TLM-2.0 headers from this package can only be used in conjunction with the matching SystemC kernel sources. - [2.0.4] Improved error handling in convenience sockets All error checking on the convenience sockets now consistently report the affected socket name (and kind) to help tracking down their origin. - [2.0.4] tlm_utils::simple_target_socket: only spawn b2nb_thread, if needed The blocking-to-nonblocking conversion thread is only spawned in case there is no b_transport callback but only an nb_transport callback registered. Note: With this change, classes inheriting from simple_target_socket need to call the base class' start_of_simulation() callback in case it is overridden in the derived class. - [2.0.4] Fix regression introduced in 2.0.3 to allow using the optional sc_port_policy SC_ZERO_OR_MORE_BOUND for tlm_utils::multi_passthrough_target_socket again. - [2.0.4] Fix memory corruption in tlm::circular_buffer::clear. - [2.0.4] Prefer using `sc_assert' over plain `assert'. - [2.0.4] Hide warnings on some compilers about hidden overloads of virtual bind functions in TLM target socket. - [2.0.4] Minor cleanups and improved compiler support. 10.3) Known issues ================= a. The tlm_simple_target_socket in tlm_utils does not obey the END_REQ rule when only an nb_ call is registered, an b_ call is being handled in the socket and there is an nb_ call coming in at the same time. In this case the incoming nb_ call will be forwarded to the registered nb_ call without checking whether the earlier b_ call has passed the END_REQ timing point. b. The implementation of the PEQ 'peq_with_get' in tlm_utils does not properly distinguish between immediate notifications and delta notifications. In the case that a immediate and delta notification happen at the same simulation time both types of notifications emerge from the PEQ in the same evaluation phase. This is wrong immediate notifications should overtake delta notifications. systemc-2.3.4/Makefile.am0000644000175000017500000000503514342422106015124 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** # support local addition of automake macros ACLOCAL_AMFLAGS= -I config SUBDIRS = \ src \ examples DOC_FILES = \ AUTHORS.md \ NOTICE \ CONTRIBUTING.md \ INSTALL.md \ LICENSE \ README.md \ RELEASENOTES \ cmake/INSTALL_USING_CMAKE EXTRA_DIST = \ $(DOC_FILES) \ \ config/bootstrap \ config/test.sh.in \ \ CMakeLists.txt \ cmake/SystemCLanguageConfig.cmake.in \ cmake/SystemCTLMConfig.cmake.in \ cmake/run_test.cmake \ \ msvc10/SystemC/SystemC.sln \ msvc10/SystemC/SystemC.props \ msvc10/SystemC/SystemC.vcxproj \ msvc10/SystemC/SystemC.vcxproj.filters \ msvc10/SystemC/SystemC-core.vcxproj \ msvc10/SystemC/SystemC-core.vcxproj.filters ## **************************************************************************** ## install documentation? if SEPARATE_INSTALL_TREE rootdoc_DATA = \ $(DOC_FILES) uninstall-hook: test ! -d "$(docdir)" || rmdir --ignore-fail-on-non-empty "$(docdir)" test ! -d "$(prefix)" || rmdir --ignore-fail-on-non-empty "$(prefix)" endif # SEPARATE_INSTALL_TREE ## **************************************************************************** ## Taf! systemc-2.3.4/configure0000755000175000017500000222453114342422106015005 0ustar carstencarsten#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for SystemC 2.3.4. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://forums.accellera.org/forum/9-systemc/ about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='SystemC' PACKAGE_TARNAME='systemc' PACKAGE_VERSION='2.3.4' PACKAGE_STRING='SystemC 2.3.4' PACKAGE_BUGREPORT='http://forums.accellera.org/forum/9-systemc/' PACKAGE_URL='http://accellera.org/' ac_unique_file="README.md" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS QT_ARCH LIB_ARCH_SUFFIX TARGET_ARCH OPT_CXXFLAGS DEBUG_CXXFLAGS LDFLAG_RPATH EXPLICIT_LPTHREAD EXTRA_LDFLAGS EXTRA_ASFLAGS EXTRA_CFLAGS EXTRA_CXXFLAGS PKGCONFIG_LDPRIV PKGCONFIG_CFLAGS PKGCONFIG_DEFINES LIBCONFIG_DEFINES QT_ARCH_HPPA_FALSE QT_ARCH_HPPA_TRUE QT_ARCH_SPARC_FALSE QT_ARCH_SPARC_TRUE QT_ARCH_POWERPC_MACOSX_FALSE QT_ARCH_POWERPC_MACOSX_TRUE QT_ARCH_X86_64_FALSE QT_ARCH_X86_64_TRUE QT_ARCH_AARCH64_FALSE QT_ARCH_AARCH64_TRUE QT_ARCH_X86_FALSE QT_ARCH_X86_TRUE ENABLE_LEGACY_MEM_MGMT_FALSE ENABLE_LEGACY_MEM_MGMT_TRUE DISABLE_VCD_SCOPES_FALSE DISABLE_VCD_SCOPES_TRUE ENABLE_CALLBACKS_TRACING_FALSE ENABLE_CALLBACKS_TRACING_TRUE ENABLE_CALLBACKS_FALSE ENABLE_CALLBACKS_TRUE USES_PTHREADS_LIB_FALSE USES_PTHREADS_LIB_TRUE WANT_QT_THREADS_FALSE WANT_QT_THREADS_TRUE WANT_PTHREADS_THREADS_FALSE WANT_PTHREADS_THREADS_TRUE DISABLE_ASYNC_UPDATES_FALSE DISABLE_ASYNC_UPDATES_TRUE WANT_OPTIMIZE_FALSE WANT_OPTIMIZE_TRUE WANT_DEBUG_FALSE WANT_DEBUG_TRUE SEPARATE_BUILD_TREE_FALSE SEPARATE_BUILD_TREE_TRUE SEPARATE_INSTALL_TREE_FALSE SEPARATE_INSTALL_TREE_TRUE libarchdir examplesdir rootdocdir CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config LN_S am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE CCASFLAGS CCAS ac_ct_AR AR am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build TLM_PACKAGE_VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_unix_layout with_arch_suffix enable_debug enable_optimize enable_async_updates enable_pthreads enable_phase_callbacks enable_vcd_scopes enable_legacy_mem_mgmt ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CCAS CCASFLAGS CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures SystemC 2.3.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/systemc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of SystemC 2.3.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-debug include debugging symbols --disable-optimize disable compiler optimization --disable-async-updates disable request_async_update support --enable-pthreads use POSIX threads for SystemC processes --enable-phase-callbacks enable simulation phase callbacks (experimental) [yes|tracing|no(=default)] --enable-vcd-scopes enable vcd scopes [yes(=default)|no] --enable-legacy-mem-mgmt enable legacy memory management for coroutine stack [yes|no(=default)] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-unix-layout use Unix directory layout for installation [default=no] --with-arch-suffix add suffix to library installation directory [default=-] Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . SystemC home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF SystemC configure 2.3.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by SystemC $as_me 2.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu TLM_PACKAGE_VERSION=2.0.6 ac_aux_dir= for ac_dir in config "$srcdir"/config; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.13' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='systemc' VERSION='2.3.4' # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5 $as_echo_n "checking how to create a pax tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_pax-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x pax -w "$$tardir"' am__tar_='pax -L -x pax -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H pax -L' am__tar_='find "$tardir" -print | cpio -o -H pax -L' am__untar='cpio -i -H pax -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_pax}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_pax+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_pax=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5 $as_echo "$am_cv_prog_tar_pax" >&6; } # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' : ${CFLAGS=""} : ${CXXFLAGS=""} ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi CXX_COMP=`set $CXX; basename $1` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using a Clang/LLVM C++ compiler" >&5 $as_echo_n "checking whether we are using a Clang/LLVM C++ compiler... " >&6; } if ${sc_cv_clangxx+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __clang__ not clang #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : sc_cv_clangxx=yes else sc_cv_clangxx=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sc_cv_clangxx" >&5 $as_echo "$sc_cv_clangxx" >&6; } : ${CC="${CXX}"} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using a Clang/LLVM C compiler" >&5 $as_echo_n "checking whether we are using a Clang/LLVM C compiler... " >&6; } if ${sc_cv_clang+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __clang__ not clang #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : sc_cv_clang=yes else sc_cv_clang=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sc_cv_clang" >&5 $as_echo "$sc_cv_clang" >&6; } if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac : ${ARFLAGS=cr} : ${AR_FLAGS=${ARFLAGS}} # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CCAS_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CCAS_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CCAS_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 $as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then am__fastdepCCAS_TRUE= am__fastdepCCAS_FALSE='#' else am__fastdepCCAS_TRUE='#' am__fastdepCCAS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi EXTRA_CXXFLAGS="-Wall" EXTRA_CFLAGS="-xc" EXTRA_ASFLAGS="" EXTRA_LDFLAGS="" DEBUG_CXXFLAGS="-g" OPT_CXXFLAGS="-O3" EXPLICIT_LPTHREAD="-lpthread" LDFLAG_RPATH="-Wl,-rpath=" if test "x$GXX" = xyes; then : EXTRA_ASFLAGS="-xassembler-with-cpp" fi case $target in #( *-apple-*) : TARGET_ARCH=macosx ;; #( *linux*) : TARGET_ARCH=linux ;; #( *bsd*|*dragonfly*) : TARGET_ARCH=bsd ;; #( *mingw*) : TARGET_ARCH=mingw ;; #( *cygwin*) : TARGET_ARCH=cygwin ;; #( sparc-*-solaris*) : TARGET_ARCH=sparcOS5 ;; #( *hpux11*) : TARGET_ARCH=hpux11 ;; #( *) : as_fn_error $? "\"sorry...architecture not supported\"" "$LINENO" 5 ;; esac case ${TARGET_ARCH} in #( hpux11|sparcOS5) : if test "x$GXX" = xyes; then : TARGET_ARCH="gcc${TARGET_ARCH}" fi ;; #( *) : ;; esac case ${TARGET_ARCH} in #( linux|bsd|mingw|cygwin) : # check CPU architecture case ${target_cpu} in #( x86_64|amd64) : TARGET_ARCH="${TARGET_ARCH}64" QT_ARCH="x86_64" CPU_ARCH="-m64" ;; #( x*86|i*86) : QT_ARCH="iX86" CPU_ARCH="-m32" ;; #( aarch64) : TARGET_ARCH="linuxaarch64" QT_ARCH="aarch64" CPU_ARCH="" ;; #( *) : as_fn_error $? "\"sorry...architecture not supported\"" "$LINENO" 5 ;; esac # check compiler if test "x$GXX" = xyes; then : EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${CPU_ARCH}" EXTRA_ASFLAGS="${EXTRA_ASFLAGS} ${CPU_ARCH}" else as_fn_error $? "\"sorry...compiler not supported\"" "$LINENO" 5 fi # use WinFiber on MinGW platforms case ${TARGET_ARCH} in #( mingw*) : QT_ARCH="none" ;; #( *) : ;; esac ;; #( macosx) : LDFLAG_RPATH="-Wl,-rpath -Wl," # check CPU architecture case ${target_cpu} in #( x86_64|amd64) : TARGET_ARCH="${TARGET_ARCH}64" CPU_ARCH="x86_64" QT_ARCH="x86_64" ;; #( x*86|i*86) : CPU_ARCH="i386" QT_ARCH="iX86" ;; #( powerpc64) : TARGET_ARCH="${TARGET_ARCH}ppc64" CPU_ARCH="ppc64" QT_ARCH="pthreads" ;; #( powerpc) : TARGET_ARCH="${TARGET_ARCH}ppc" CPU_ARCH="ppc" QT_ARCH="powerpc-apple-macosx" ;; #( *) : as_fn_error $? "\"sorry...architecture not supported\"" "$LINENO" 5 ;; esac # check compiler if test "x$GXX" = xyes; then : EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -arch ${CPU_ARCH}" EXTRA_ASFLAGS="${EXTRA_ASFLAGS} -arch ${CPU_ARCH} -x assembler" else as_fn_error $? "\"sorry...compiler not supported\"" "$LINENO" 5 fi ;; #( gcchpux11) : QT_ARCH="hppa" ;; #( hpux11) : QT_ARCH="hppa" if test "x$CXX_COMP" = xaCC; then : EXTRA_CXXFLAGS="-AA -ext +DA2.0 +DS2.0" EXTRA_CFLAGS="-Wa,-w36" OPT_CXXFLAGS="+O1" : ${CCAS=/usr/ccs/bin/as} else as_fn_error $? "\"sorry...compiler not supported\"" "$LINENO" 5 fi ;; #( gccsparcOS5) : QT_ARCH="sparc-os2" LDFLAG_RPATH="-Wl,-R" ;; #( sparcOS5) : QT_ARCH="sparc-os2" LDFLAG_RPATH="-Wl,-R" if test "x$CXX_COMP" = xCC; then : EXTRA_CXXFLAGS="" EXTRA_CFLAGS="" else as_fn_error $? "\"sorry...compiler not supported\"" "$LINENO" 5 fi ;; #( *) : ;; esac EXTRA_CFLAGS="${EXTRA_CXXFLAGS} ${EXTRA_CFLAGS}" if test "$sc_cv_clangxx" = yes; then : EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -Wc,-Qunused-arguments" fi if test "$sc_cv_clang" = yes -a "$CCAS" = "$CC"; then : EXTRA_ASFLAGS="${EXTRA_ASFLAGS} -Qunused-arguments" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else flag="-mt -D_REENTRANT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then for ac_prog in xlc_r cc_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else ax_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign" if test "x$ac_cv_func_posix_memalign" = xyes; then : $as_echo "#define SC_HAVE_POSIX_MEMALIGN 1" >>confdefs.h fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CXXFLAGS_USER="${CXXFLAGS}" CXXFLAGS="${EXTRA_CXXFLAGS} ${CXXFLAGS}" case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: CXXFLAGS="${CXXFLAGS_USER}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SystemC install layout" >&5 $as_echo_n "checking for SystemC install layout... " >&6; } # Check whether --with-unix-layout was given. if test "${with_unix_layout+set}" = set; then : withval=$with_unix_layout; case "x$withval" in #( xyes) : sysc_install_layout=Unix ;; #( xno|x) : sysc_install_layout=classic ;; #( *) : as_fn_error $? "Unknown install layout requested." "$LINENO" 5 ;; esac else sysc_install_layout=classic fi # AC_ARG_WITH gnu-layout abs_srcdir=`cd "$srcdir" && pwd` abs_builddir=`pwd` if test "x$prefix" = "xNONE" ; then prefix="$abs_srcdir" sysc_install_layout=ignored fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sysc_install_layout" >&5 $as_echo "$sysc_install_layout" >&6; } rootdocdir='${docdir}' if test $sysc_install_layout = Unix ; then LIB_ARCH_SUFFIX='' else sysc_install_layout=classic if test x$datarootdir = x'${prefix}/share' ; then datarootdir='${prefix}' fi if test x$datadir = x'${datarootdir}' ; then datadir='${prefix}' fi if test x$docdir = x'${datarootdir}/doc/${PACKAGE_TARNAME}' ; then docdir='${prefix}/docs' rootdocdir='${prefix}' fi LIB_ARCH_SUFFIX='-${TARGET_ARCH}' fi examplesdir='${rootdocdir}/examples' libarchdir='${libdir}${LIB_ARCH_SUFFIX}' if test "x${prefix}" != "x${abs_srcdir}" ; then SEPARATE_INSTALL_TREE_TRUE= SEPARATE_INSTALL_TREE_FALSE='#' else SEPARATE_INSTALL_TREE_TRUE='#' SEPARATE_INSTALL_TREE_FALSE= fi if test "x${abs_srcdir}" != "x${abs_builddir}" ; then SEPARATE_BUILD_TREE_TRUE= SEPARATE_BUILD_TREE_FALSE='#' else SEPARATE_BUILD_TREE_TRUE='#' SEPARATE_BUILD_TREE_FALSE= fi #AM_COND_IF([SEPARATE_BUILD_TREE],[ if test -z "${SEPARATE_BUILD_TREE_TRUE}" ; then if test "x${prefix}" = "x${abs_builddir}" ; then as_fn_error $? "Installation to build directory not supported." "$LINENO" 5 fi fi #]) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SystemC library arch suffix" >&5 $as_echo_n "checking for SystemC library arch suffix... " >&6; } # Check whether --with-arch-suffix was given. if test "${with_arch_suffix+set}" = set; then : withval=$with_arch_suffix; case "x$withval" in #( xyes) : with_arch_suffix=yes LIB_ARCH_SUFFIX='-${TARGET_ARCH}' ;; #( xno|x) : with_arch_suffix=no LIB_ARCH_SUFFIX="" ;; #( *) : LIB_ARCH_SUFFIX="${withval}" ;; esac else with_arch_suffix=default fi # AC_ARG_WITH arch-suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_arch_suffix (TARGET_ARCH=${TARGET_ARCH})" >&5 $as_echo "$with_arch_suffix (TARGET_ARCH=${TARGET_ARCH})" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add debug symbols to the SystemC library" >&5 $as_echo_n "checking whether to add debug symbols to the SystemC library... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; case "${enableval}" in #( yes|no) : ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else enable_debug=no fi if test x$enable_debug = xyes; then WANT_DEBUG_TRUE= WANT_DEBUG_FALSE='#' else WANT_DEBUG_TRUE='#' WANT_DEBUG_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 $as_echo "$enable_debug" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler optimization" >&5 $as_echo_n "checking whether to enable compiler optimization... " >&6; } # Check whether --enable-optimize was given. if test "${enable_optimize+set}" = set; then : enableval=$enable_optimize; case "${enableval}" in #( yes|no) : ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-optimize" "$LINENO" 5 ;; esac else enable_optimize=yes fi if test x$enable_optimize = xyes; then WANT_OPTIMIZE_TRUE= WANT_OPTIMIZE_FALSE='#' else WANT_OPTIMIZE_TRUE='#' WANT_OPTIMIZE_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_optimize" >&5 $as_echo "$enable_optimize" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add support for asynchronous update requests" >&5 $as_echo_n "checking whether to add support for asynchronous update requests... " >&6; } support_async_updates=no if test x$ax_pthread_ok = xyes; then : support_async_updates=pthread elif test x$ax_pthread_ok = xno; then : case "${TARGET_ARCH}" in #( mingw*|msvc*) : support_async_updates=native ;; #( *) : ;; esac fi # Check whether --enable-async-updates was given. if test "${enable_async_updates+set}" = set; then : enableval=$enable_async_updates; case "${enableval}" in #( yes) : if test $support_async_updates = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no native/pthread support found, disabled" >&5 $as_echo "$as_me: WARNING: no native/pthread support found, disabled" >&2;} enable_async_updates=no support_async_updates=disabled fi ;; #( no) : support_async_updates=disabled ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-async-updates" "$LINENO" 5 ;; esac else if test ${support_async_updates} != no; then : enable_async_updates=yes else enable_async_updates=no fi fi if test x"$enable_async_updates" = xno; then DISABLE_ASYNC_UPDATES_TRUE= DISABLE_ASYNC_UPDATES_FALSE='#' else DISABLE_ASYNC_UPDATES_TRUE='#' DISABLE_ASYNC_UPDATES_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_async_updates" >&5 $as_echo "$enable_async_updates" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use POSIX threads for SystemC processes" >&5 $as_echo_n "checking whether to use POSIX threads for SystemC processes... " >&6; } # Check whether --enable-pthreads was given. if test "${enable_pthreads+set}" = set; then : enableval=$enable_pthreads; case "${enableval}" in #( yes) : if test x"$ax_pthread_ok" = xyes; then : QT_ARCH=pthreads else enable_pthreads=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no pthread support found, ignore --enable-pthreads" >&5 $as_echo "$as_me: WARNING: no pthread support found, ignore --enable-pthreads" >&2;} fi ;; #( no) : ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-pthreads" "$LINENO" 5 ;; esac else enable_pthreads=no fi if test x"$enable_pthreads" = xyes; then : case "${TARGET_ARCH}" in #( mingw*|msvc*) : as_fn_error $? "pthread processes not supported on target architecture ${target}" "$LINENO" 5 ;; #( *) : ;; esac fi if test x"$QT_ARCH" = xpthreads -a x"$enable_pthreads" = xno; then : if test x"$ax_pthread_ok" = xyes; then : enable_pthreads=yes else as_fn_error $? "pthread processes required on target architecture ${target}" "$LINENO" 5 fi fi if test x"$enable_pthreads" = xyes; then WANT_PTHREADS_THREADS_TRUE= WANT_PTHREADS_THREADS_FALSE='#' else WANT_PTHREADS_THREADS_TRUE='#' WANT_PTHREADS_THREADS_FALSE= fi if test x"$enable_pthreads" = xno -a x"$QT_ARCH" != xnone ; then WANT_QT_THREADS_TRUE= WANT_QT_THREADS_FALSE='#' else WANT_QT_THREADS_TRUE='#' WANT_QT_THREADS_FALSE= fi if test x"$enable_pthreads" = xyes -o x"$support_async_updates" = xpthread ; then USES_PTHREADS_LIB_TRUE= USES_PTHREADS_LIB_FALSE='#' else USES_PTHREADS_LIB_TRUE='#' USES_PTHREADS_LIB_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pthreads" >&5 $as_echo "$enable_pthreads" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable simulation phase callbacks (experimental)" >&5 $as_echo_n "checking whether to enable simulation phase callbacks (experimental)... " >&6; } # Check whether --enable-phase-callbacks was given. if test "${enable_phase_callbacks+set}" = set; then : enableval=$enable_phase_callbacks; case "${enableval}" in #( yes) : enable_phase_callbacks=yes ;; #( tracing) : enable_phase_callbacks=tracing ;; #( no|default) : enable_phase_callbacks=no ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-phase-callbacks" "$LINENO" 5 ;; esac else enable_phase_callbacks=no fi if test x"$enable_phase_callbacks" = xyes; then ENABLE_CALLBACKS_TRUE= ENABLE_CALLBACKS_FALSE='#' else ENABLE_CALLBACKS_TRUE='#' ENABLE_CALLBACKS_FALSE= fi if test x"$enable_phase_callbacks" = xtracing; then ENABLE_CALLBACKS_TRACING_TRUE= ENABLE_CALLBACKS_TRACING_FALSE='#' else ENABLE_CALLBACKS_TRACING_TRUE='#' ENABLE_CALLBACKS_TRACING_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_phase_callbacks" >&5 $as_echo "$enable_phase_callbacks" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable VCD scopes by default" >&5 $as_echo_n "checking whether to enable VCD scopes by default... " >&6; } # Check whether --enable-vcd-scopes was given. if test "${enable_vcd_scopes+set}" = set; then : enableval=$enable_vcd_scopes; case "${enableval}" in #( yes|default) : enable_vcd_scopes=yes ;; #( no) : enable_vcd_scopes=no ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-vcd-scopes" "$LINENO" 5 ;; esac else enable_vcd_scopes=yes fi if test x"$enable_vcd_scopes" = xno; then DISABLE_VCD_SCOPES_TRUE= DISABLE_VCD_SCOPES_FALSE='#' else DISABLE_VCD_SCOPES_TRUE='#' DISABLE_VCD_SCOPES_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_vcd_scopes" >&5 $as_echo "$enable_vcd_scopes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable legacy memory managment for allocating coroutine stack" >&5 $as_echo_n "checking whether to enable legacy memory managment for allocating coroutine stack... " >&6; } # Check whether --enable-legacy_mem_mgmt was given. if test "${enable_legacy_mem_mgmt+set}" = set; then : enableval=$enable_legacy_mem_mgmt; case "${enableval}" in #( yes) : enable_legacy_mem_mgmt=yes ;; #( no|default) : enable_legacy_mem_mgmt=no ;; #( *) : as_fn_error $? "bad value ${enableval} for --enable-legacy-mem-mgmt" "$LINENO" 5 ;; esac else enable_legacy_mem_mgmt=no fi if test x"$enable_legacy_mem_mgmt" = xyes; then ENABLE_LEGACY_MEM_MGMT_TRUE= ENABLE_LEGACY_MEM_MGMT_FALSE='#' else ENABLE_LEGACY_MEM_MGMT_TRUE='#' ENABLE_LEGACY_MEM_MGMT_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_legacy_mem_mgmt" >&5 $as_echo "$enable_legacy_mem_mgmt" >&6; } if test "${QT_ARCH}" = "iX86" ; then QT_ARCH_X86_TRUE= QT_ARCH_X86_FALSE='#' else QT_ARCH_X86_TRUE='#' QT_ARCH_X86_FALSE= fi if test "${QT_ARCH}" = "aarch64" ; then QT_ARCH_AARCH64_TRUE= QT_ARCH_AARCH64_FALSE='#' else QT_ARCH_AARCH64_TRUE='#' QT_ARCH_AARCH64_FALSE= fi if test "${QT_ARCH}" = "x86_64" ; then QT_ARCH_X86_64_TRUE= QT_ARCH_X86_64_FALSE='#' else QT_ARCH_X86_64_TRUE='#' QT_ARCH_X86_64_FALSE= fi if test "${QT_ARCH}" = "powerpc-apple-macosx" ; then QT_ARCH_POWERPC_MACOSX_TRUE= QT_ARCH_POWERPC_MACOSX_FALSE='#' else QT_ARCH_POWERPC_MACOSX_TRUE='#' QT_ARCH_POWERPC_MACOSX_FALSE= fi if test "${QT_ARCH}" = "sparc-os2" ; then QT_ARCH_SPARC_TRUE= QT_ARCH_SPARC_FALSE='#' else QT_ARCH_SPARC_TRUE='#' QT_ARCH_SPARC_FALSE= fi if test "${QT_ARCH}" = "hppa" ; then QT_ARCH_HPPA_TRUE= QT_ARCH_HPPA_FALSE='#' else QT_ARCH_HPPA_TRUE='#' QT_ARCH_HPPA_FALSE= fi LIBCONFIG_DEFINES= PKGCONFIG_DEFINES= PKGCONFIG_CFLAGS= PKGCONFIG_LDPRIV= #AM_COND_IF([USES_PTHREADS_LIB],[ if test -z "${USES_PTHREADS_LIB_TRUE}" ; then PKGCONFIG_CFLAGS="${PTHREAD_CFLAGS}" PKGCONFIG_LDPRIV="${PTHREAD_LIBS} ${EXPLICIT_LPTHREAD}" fi #]) # AC_CHECK_DEFINE([DEBUG_SYSTEMC], # [PKGCONFIG_DEFINES="${PKGCONFIG_DEFINES} -DDEBUG_SYSTEMC"]) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SC_DISABLE_VIRTUAL_BIND defined" >&5 $as_echo_n "checking for SC_DISABLE_VIRTUAL_BIND defined... " >&6; } if ${ac_cv_defined_SC_DISABLE_VIRTUAL_BIND+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef SC_DISABLE_VIRTUAL_BIND int ok; #else choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_defined_SC_DISABLE_VIRTUAL_BIND=yes else ac_cv_defined_SC_DISABLE_VIRTUAL_BIND=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_defined_SC_DISABLE_VIRTUAL_BIND" >&5 $as_echo "$ac_cv_defined_SC_DISABLE_VIRTUAL_BIND" >&6; } if test $ac_cv_defined_SC_DISABLE_VIRTUAL_BIND != "no"; then : PKGCONFIG_DEFINES="${PKGCONFIG_DEFINES} -DSC_DISABLE_VIRTUAL_BIND" sysc_non_1666=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION defined" >&5 $as_echo_n "checking for SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION defined... " >&6; } if ${ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION int ok; #else choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION=yes else ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION" >&5 $as_echo "$ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION" >&6; } if test $ac_cv_defined_SC_ENABLE_IMMEDIATE_SELF_NOTIFICATION != "no"; then : LIBCONFIG_DEFINES="${LIBCONFIG_DEFINES} -DSC_ENABLE_IMMEDIATE_SELF_NOTIFICATION" sysc_non_1666=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SC_ENABLE_EARLY_MAXTIME_CREATION defined" >&5 $as_echo_n "checking for SC_ENABLE_EARLY_MAXTIME_CREATION defined... " >&6; } if ${ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef SC_ENABLE_EARLY_MAXTIME_CREATION int ok; #else choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION=yes else ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION" >&5 $as_echo "$ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION" >&6; } if test $ac_cv_defined_SC_ENABLE_EARLY_MAXTIME_CREATION != "no"; then : LIBCONFIG_DEFINES="${LIBCONFIG_DEFINES} -DSC_ENABLE_EARLY_MAXTIME_CREATION" sysc_non_1666=yes fi ac_config_files="$ac_config_files Makefile src/Makefile src/systemc.pc src/tlm.pc src/sysc/Makefile src/sysc/packages/boost/Makefile src/sysc/packages/qt/Makefile src/tlm_core/Makefile src/tlm_utils/Makefile examples/Makefile examples/sysc/Makefile examples/tlm/Makefile examples/tlm/common/Makefile docs/Makefile docs/sysc/doxygen/Doxyfile docs/tlm/doxygen/Doxyfile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SEPARATE_INSTALL_TREE_TRUE}" && test -z "${SEPARATE_INSTALL_TREE_FALSE}"; then as_fn_error $? "conditional \"SEPARATE_INSTALL_TREE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SEPARATE_BUILD_TREE_TRUE}" && test -z "${SEPARATE_BUILD_TREE_FALSE}"; then as_fn_error $? "conditional \"SEPARATE_BUILD_TREE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_DEBUG_TRUE}" && test -z "${WANT_DEBUG_FALSE}"; then as_fn_error $? "conditional \"WANT_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_OPTIMIZE_TRUE}" && test -z "${WANT_OPTIMIZE_FALSE}"; then as_fn_error $? "conditional \"WANT_OPTIMIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DISABLE_ASYNC_UPDATES_TRUE}" && test -z "${DISABLE_ASYNC_UPDATES_FALSE}"; then as_fn_error $? "conditional \"DISABLE_ASYNC_UPDATES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PTHREADS_THREADS_TRUE}" && test -z "${WANT_PTHREADS_THREADS_FALSE}"; then as_fn_error $? "conditional \"WANT_PTHREADS_THREADS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_QT_THREADS_TRUE}" && test -z "${WANT_QT_THREADS_FALSE}"; then as_fn_error $? "conditional \"WANT_QT_THREADS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USES_PTHREADS_LIB_TRUE}" && test -z "${USES_PTHREADS_LIB_FALSE}"; then as_fn_error $? "conditional \"USES_PTHREADS_LIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CALLBACKS_TRUE}" && test -z "${ENABLE_CALLBACKS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CALLBACKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CALLBACKS_TRACING_TRUE}" && test -z "${ENABLE_CALLBACKS_TRACING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CALLBACKS_TRACING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DISABLE_VCD_SCOPES_TRUE}" && test -z "${DISABLE_VCD_SCOPES_FALSE}"; then as_fn_error $? "conditional \"DISABLE_VCD_SCOPES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_LEGACY_MEM_MGMT_TRUE}" && test -z "${ENABLE_LEGACY_MEM_MGMT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_LEGACY_MEM_MGMT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_X86_TRUE}" && test -z "${QT_ARCH_X86_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_X86\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_AARCH64_TRUE}" && test -z "${QT_ARCH_AARCH64_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_AARCH64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_X86_64_TRUE}" && test -z "${QT_ARCH_X86_64_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_POWERPC_MACOSX_TRUE}" && test -z "${QT_ARCH_POWERPC_MACOSX_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_POWERPC_MACOSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_SPARC_TRUE}" && test -z "${QT_ARCH_SPARC_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_SPARC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_ARCH_HPPA_TRUE}" && test -z "${QT_ARCH_HPPA_FALSE}"; then as_fn_error $? "conditional \"QT_ARCH_HPPA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by SystemC $as_me 2.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to . SystemC home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ SystemC config.status 2.3.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/systemc.pc") CONFIG_FILES="$CONFIG_FILES src/systemc.pc" ;; "src/tlm.pc") CONFIG_FILES="$CONFIG_FILES src/tlm.pc" ;; "src/sysc/Makefile") CONFIG_FILES="$CONFIG_FILES src/sysc/Makefile" ;; "src/sysc/packages/boost/Makefile") CONFIG_FILES="$CONFIG_FILES src/sysc/packages/boost/Makefile" ;; "src/sysc/packages/qt/Makefile") CONFIG_FILES="$CONFIG_FILES src/sysc/packages/qt/Makefile" ;; "src/tlm_core/Makefile") CONFIG_FILES="$CONFIG_FILES src/tlm_core/Makefile" ;; "src/tlm_utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/tlm_utils/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "examples/sysc/Makefile") CONFIG_FILES="$CONFIG_FILES examples/sysc/Makefile" ;; "examples/tlm/Makefile") CONFIG_FILES="$CONFIG_FILES examples/tlm/Makefile" ;; "examples/tlm/common/Makefile") CONFIG_FILES="$CONFIG_FILES examples/tlm/common/Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "docs/sysc/doxygen/Doxyfile") CONFIG_FILES="$CONFIG_FILES docs/sysc/doxygen/Doxyfile" ;; "docs/tlm/doxygen/Doxyfile") CONFIG_FILES="$CONFIG_FILES docs/tlm/doxygen/Doxyfile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "x$enable_async_updates" = xyes; then : disable_async_updates=no else disable_async_updates=yes sysc_non_1666=yes fi if test -z "${WANT_QT_THREADS_TRUE}"; then : sysc_coroutine="QuickThreads" elif test -z "${WANT_PTHREADS_THREADS_TRUE}"; then : sysc_coroutine="Pthreads" else sysc_coroutine="WinFiber" fi sysc_compiler="${CXX}" if test "x$CC" = x"${CXX}"; then : as_fn_append sysc_compiler " (C/C++)" else as_fn_append sysc_compiler " (C++) / ${CC} (C)" fi if test "x$CCAS" = x"${CC}"; then : else as_fn_append sysc_compiler " / ${CCAS} (Assembler)" fi sysc_flags="" if test -n "${CFLAGS}"; then : as_fn_append sysc_flags " C compiler flags (CFLAGS) : ${CFLAGS}${as_nl}" fi if test -n "${CXXFLAGS}"; then : as_fn_append sysc_flags " C++ compiler flags (CXXFLAGS) : ${CXXFLAGS}${as_nl}" fi if test -n "${CCASFLAGS}"; then : as_fn_append sysc_flags " Assembler flags (CCASFLAGS) : ${CCASFLAGS}${as_nl}" fi if test -n "${LDFLAGS}"; then : as_fn_append sysc_flags " Linker flags (LDFLAGS) : ${LDFLAGS}${as_nl}" fi if test -n "${sysc_flags}"; then : sysc_flags="${as_nl} User-provided command-line flags :${as_nl}${sysc_flags}" fi if test -n "${PKGCONFIG_DEFINES}" -o -n "${LIBCONFIG_DEFINES}"; then : sysc_additional="${as_nl} Detected additional settings:" if test -n "${PKGCONFIG_DEFINES}"; then : as_fn_append sysc_additional "${as_nl} ${PKGCONFIG_DEFINES}" fi if test -n "${LIBCONFIG_DEFINES}"; then : as_fn_append sysc_additional "${as_nl} ${LIBCONFIG_DEFINES}" fi as_fn_append sysc_additional "${as_nl}" fi SYSTEMC_HOME=$prefix prefix='' eval "sysc_includedir=\"${includedir}\"" eval "sysc_includedir=\"${sysc_includedir}\"" eval "sysc_libdir=\"${libdir}${LIB_ARCH_SUFFIX}\"" eval "sysc_libdir=\"${sysc_libdir}\"" eval "sysc_docdir=\"${docdir}\"" eval "sysc_docdir=\"${sysc_docdir}\"" eval "sysc_examplesdir=\"${examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_examplesdir=\"${sysc_examplesdir}\"" eval "sysc_prefix=\"${SYSTEMC_HOME}\"" prefix=$SYSTEMC_HOME cat <. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemc-2.3.4/config/test.sh.in0000644000175000017500000000514514342422106016257 0ustar carstencarsten#!/bin/sh ## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.sh.in -- ## Process this file (during `make check') to produce a test.sh file. ## ## Original Author: Philipp A. Hartmann, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** #set -x #set -e # override user's SHELL (e.g. for SHELL=/bin/tcsh) SHELL=@SHELL@ export SHELL ## SystemC / TLM example test to run TEST=@TEST@ INPUT=@TESTINPUT@ GOLDEN=@TESTGOLDEN@ FILTER=@TESTFILTER@ # prepare environment TESTDIR=`dirname "$0"` TESTEXE=`basename "${TEST}"` export TEST TESTDIR TESTEXE # switch to test directory and restart if test ! x"$TESTDIR" = x. ; then cd "$TESTDIR" exec ${SHELL} `basename "$0"` "$@" fi if test ! -f "${INPUT}" ; then INPUT="" ; fi if test "x${INPUT}" != x ; then INPUT="< '${INPUT}'" ; fi if test "x${FILTER}" != x ; then FILTER="| grep '${FILTER}'" ; fi # run test executable eval "./${TESTEXE} ${INPUT} ${FILTER} > run.log" result=$? # no golden -> return exit status if test ! -e "${GOLDEN}" ; then exit $result ; fi cat run.log | grep -v "stopped by user" | \ awk '{if($0!="") print $0}' > run_trimmed.log cat ${GOLDEN} | grep -v "stopped by user" | \ awk '{if($0!="") print $0}' > ./expected_trimmed.log diff ./run_trimmed.log ./expected_trimmed.log > diff.log 2>&1; result=$? if test -s diff.log ; then echo "***ERROR:" cat diff.log else echo "OK" fi rm -f *_trimmed.log run.log diff.log exit $result systemc-2.3.4/config/Make-rules.examples0000644000175000017500000000252614342422106020104 0ustar carstencarsteninclude $(top_srcdir)/config/Make-rules.common SYSTEMC_INC_DIR = $(top_srcdir)/src SYSTEMC_LIB_DIR = $(libdir)$(LIB_ARCH_SUFFIX) AM_CPPFLAGS += -I$(SYSTEMC_INC_DIR) LDADD = $(top_builddir)/src/libsystemc.la ## ************************************************************************ ## Create a run script for the examples ## (pattern rule is GNU extension, but we require GNU make, see INSTALL) %.sh: %$(EXEEXT) $(TESTSCRIPT_IN) $(AM_V_GEN)set -e ; rm -f $@ ; \ $(SED) -e 's#@'SHELL'@#@SHELL@#' \ -e 's#@'TEST'@#$*#' \ -e 's#@'TESTINPUT'@#$(examples_INPUT)#' \ -e 's#@'TESTGOLDEN'@#$(examples_GOLDEN)#' \ -e 's#@'TESTFILTER'@#$($(shell echo '$(*D)' | sed -e 's:[^A-Za-z0-9_\@]:_:g')_FILTER)#' \ $(TESTSCRIPT_IN) > $@ ; \ chmod a+x $@ TESTSCRIPT_IN=$(top_srcdir)/config/test.sh.in ## ************************************************************************ ## copy required run files in objdir tree, if needed if SEPARATE_BUILD_TREE all-local: copy-check-data # needed to put extra run files in objdir tree copy-check-data: $(AM_V_GEN)for file in $(examples_BUILD); do \ if test ! -e ./$$file ; then \ $(MKDIR_P) `dirname "$$file"` ; \ $(INSTALL_DATA) $(srcdir)/$$file ./$$file ; \ fi ; \ done CLEANFILES += $(examples_BUILD) endif # out-of-tree build systemc-2.3.4/config/ltmain.sh0000644000175000017500000105152214342422106016160 0ustar carstencarsten # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 systemc-2.3.4/config/missing0000755000175000017500000001533114342422106015734 0ustar carstencarsten#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemc-2.3.4/config/Make-rules.common0000644000175000017500000000144214342422106017552 0ustar carstencarsten# top-level SystemC include directory is added in Make-rules.{sysc,examples} # build flags DEFS=$(PKGCONFIG_DEFINES) $(EXTRA_DEFINES) AM_CPPFLAGS= AM_CFLAGS=$(EXTRA_CFLAGS) AM_CXXFLAGS=$(EXTRA_CXXFLAGS) AM_CCASFLAGS=$(EXTRA_ASFLAGS) AM_LDFLAGS=$(EXTRA_LDFLAGS) if WANT_DEBUG AM_CXXFLAGS+=$(DEBUG_CXXFLAGS) AM_CFLAGS+=$(DEBUG_CXXFLAGS) AM_CCASFLAGS+=$(DEBUG_CXXFLAGS) endif if WANT_OPTIMIZE AM_CXXFLAGS+=$(OPT_CXXFLAGS) AM_CFLAGS+=$(OPT_CXXFLAGS) endif # either for async_update locking or pthread processes if USES_PTHREADS_LIB AM_CXXFLAGS+=$(PTHREAD_CFLAGS) AM_CFLAGS+=$(PTHREAD_CFLAGS) AM_LDFLAGS+=$(PTHREAD_LIBS) endif # always add fix-point support EXTRA_DEFINES=-DSC_INCLUDE_FX # initialize some useful variables (filled later) CLEANFILES= EXTRA_DIST= systemc-2.3.4/config/Make-rules.sysc0000644000175000017500000000110014342422106017232 0ustar carstencarsteninclude $(top_srcdir)/config/Make-rules.common AM_CPPFLAGS += -I$(top_srcdir)/src EXTRA_DEFINES+=-DSC_BUILD if DISABLE_ASYNC_UPDATES EXTRA_DEFINES+=-DSC_DISABLE_ASYNC_UPDATES endif if ENABLE_CALLBACKS EXTRA_DEFINES+=-DSC_ENABLE_SIMULATION_PHASE_CALLBACKS endif if ENABLE_CALLBACKS_TRACING EXTRA_DEFINES+=-DSC_ENABLE_SIMULATION_PHASE_CALLBACKS_TRACING endif if WANT_PTHREADS_THREADS EXTRA_DEFINES+=-DSC_USE_PTHREADS endif if DISABLE_VCD_SCOPES EXTRA_DEFINES+=-DSC_DISABLE_VCD_SCOPES endif if ENABLE_LEGACY_MEM_MGMT EXTRA_DEFINES+=-DSC_LEGACY_MEM_MGMT endif systemc-2.3.4/config/config.guess0000755000175000017500000013012014342422106016647 0ustar carstencarsten#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; powerpc | unknown) UNAME_PROCESSOR=powerpc eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="powerpc64" fi fi ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemc-2.3.4/config/ltsugar.m40000644000175000017500000001042414342422106016256 0ustar carstencarsten# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) systemc-2.3.4/config/ltoptions.m40000644000175000017500000003007314342422106016632 0ustar carstencarsten# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) systemc-2.3.4/config/install-sh0000755000175000017500000003325514342422106016346 0ustar carstencarsten#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemc-2.3.4/config/lt~obsolete.m40000644000175000017500000001375614342422106017162 0ustar carstencarsten# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) systemc-2.3.4/config/bootstrap0000755000175000017500000000034514342422106016277 0ustar carstencarsten#! /bin/sh LIBTOOLIZE=libtoolize if test x"`uname -s`" = "xDarwin" ; then LIBTOOLIZE=glibtoolize fi aclocal -I config && \ $LIBTOOLIZE --automake --force --copy && \ automake --add-missing --copy && \ autoconf # Taf! systemc-2.3.4/config/config.sub0000755000175000017500000010517614342422106016327 0ustar carstencarsten#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemc-2.3.4/config/libtool.m40000644000175000017500000105743214342422106016254 0ustar carstencarsten# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS systemc-2.3.4/config/depcomp0000755000175000017500000005601614342422106015717 0ustar carstencarsten#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemc-2.3.4/config/ax_check_define.m40000644000175000017500000000661414342422106017662 0ustar carstencarsten# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_define.html # =========================================================================== # # SYNOPSIS # # AC_CHECK_DEFINE([symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT]) # AX_CHECK_DEFINE([includes],[symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT]) # # DESCRIPTION # # Complements AC_CHECK_FUNC but it does not check for a function but for a # define to exist. Consider a usage like: # # AC_CHECK_DEFINE(__STRICT_ANSI__, CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500") # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AU_ALIAS([AC_CHECK_DEFINED], [AC_CHECK_DEFINE]) AC_DEFUN([AC_CHECK_DEFINE],[ AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$1])dnl AC_CACHE_CHECK([for $1 defined], ac_var, AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #ifdef $1 int ok; #else choke me #endif ]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)])) AS_IF([test AS_VAR_GET(ac_var) != "no"], [$2], [$3])dnl AS_VAR_POPDEF([ac_var])dnl ]) AU_ALIAS([AX_CHECK_DEFINED], [AX_CHECK_DEFINE]) AC_DEFUN([AX_CHECK_DEFINE],[ AS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2_$1])dnl AC_CACHE_CHECK([for $2 defined in $1], ac_var, AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$1>]], [[ #ifdef $2 int ok; #else choke me #endif ]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)])) AS_IF([test AS_VAR_GET(ac_var) != "no"], [$3], [$4])dnl AS_VAR_POPDEF([ac_var])dnl ]) AC_DEFUN([AX_CHECK_FUNC], [AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl AC_CACHE_CHECK([for $2], ac_var, dnl AC_LANG_FUNC_LINK_TRY [AC_LINK_IFELSE([AC_LANG_PROGRAM([$1 #undef $2 char $2 ();],[ char (*f) () = $2; return f != $2; ])], [AS_VAR_SET(ac_var, yes)], [AS_VAR_SET(ac_var, no)])]) AS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl AS_VAR_POPDEF([ac_var])dnl ])# AC_CHECK_FUNC systemc-2.3.4/config/ar-lib0000755000175000017500000001330214342422106015425 0ustar carstencarsten#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2013 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat < # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 18 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes) AC_MSG_RESULT($ax_pthread_ok) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($ax_pthread_ok) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], ax_cv_PTHREAD_PRIO_INHERIT, [ AC_LINK_IFELSE([ AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.])) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD systemc-2.3.4/config/ltversion.m40000644000175000017500000000126214342422106016622 0ustar carstencarsten# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) systemc-2.3.4/LICENSE0000644000175000017500000002613614342422106014102 0ustar carstencarsten Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed 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. systemc-2.3.4/cmake/0000755000175000017500000000000014342422106014145 5ustar carstencarstensystemc-2.3.4/cmake/INSTALL_USING_CMAKE0000644000175000017500000004323214342422106017047 0ustar carstencarsten Install Notes for SystemC Using CMake to Configure the Build Process Torsten Maehne, Bern University of Applied Sciences, Switzerland 2017-02-22 Table of Contents ================= 1. Introduction 2. Installation Steps 3. Cross compilation 3.1 Cross Compilation for 32-bit on a 64-bit platform using GCC 3.2 Cross Compilation on OS X 3.3 Generic Cross Compilation to a Target System 4. Finding and Using SystemC with CMake 5. Known Problems 6. Ressources 1. Introduction =============== WARNING: The CMake build scripts are only provided as a preview to gather feedback from the community! They are a work in progress and have not been as thoroughly tested as the other build options for SystemC (i.e., the traditional autotools-based build system and the MSVC solutions). There are known open issues (see section 4). The original autotools-based build system of the SystemC distribution only supports a limited number of OS/processor/compiler platforms and initially did not allow the compilation of shared libraries. This was the motivation to implement a more flexible configuration system for SystemC using CMake . Depending on the operating system, processor, compiler, and available dependency libraries, it can configure the sources and generate the necessary files to compile/install SystemC using GNU Make, Ninja, or an IDE such as Eclipse, Xcode, MS Visual Studio C++, or Kdevelop. The CMake build scripts are compatible with CMake >=3.1 and have been tested on the following OS/processor/compiler platforms: - Mac OS X >= 10.5 (GCC, Clang): i386, x86_64, ppc - Linux (GCC, Clang): i386, x86_64 - Linux (GCC): aarch64 - Windows (MSYS2 with the MinGW-W32 or MinGW-W64 GCC toolchains): x86, AMD64 Currently untested, but considered by the build script (based on the autotools scripts) are: - *BSD (GCC, Clang): i386, x86_64 - Linux (GCC, Clang): sparc, powerpc - Linux (Clang): aarch64 - Mac OS X <= 10.5 (GCC): ppc64 - Windows (Cygwin GCC, MinGW-W32 GCC, MinGW-W64 GCC, Visual C++): x86, AMD64 - Solaris (GCC and native compiler): sparc - HP-UX (GCC and native compiler): hppa The build process can be configured by the users through the configuration variables offered to the user in the CMake console and GUI (ccmake and cmake-gui, respectively). CMake suggests to prefer out-of-source builds in contrast to in-source builds to clearly separate the source from the generated files. Thus, the build can be cleaned easily by deleting the build directory. 2. Installation Steps ===================== Typically, the following steps need to be followed to compile the sources using CMake: 1.) Download and install CMake from (Linux distributions provide often a package). Note, the CMake script have been developed for CMake >= 3.1. 2.) Create a build subdirectory: $ pwd .../systemc/ $ mkdir build 3.) Launch the interactive cmake console program ccmake (on Unix) or the CMake GUI (Unix, Mac OS X, Windows) and specify the source (.../systemc) and build directory (.../systemc/build). For the console based ccmake, this is done by changing into the build directory and launching ccmake with the relative path to the source root directory as an argument: $ cd build/ $ ccmake .. For cmake-gui, the same approach works: $ cd build/ $ cmake-gui .. Alternatively, the CMake GUI allows to directly enter the paths to the sources and build directoy in the top of its main window. 4.) Configure the sources by pressing 'c' or clicking on "Configure". Depending on the operating system, CMake will ask the user what it should generate Makefiles or IDE project files (Eclipse, Xcode, Kdevelop, MS Visual Studio C++). CMake will parse the file CMakeLists.txt in the source root directory and configure the sources accordingly carrying out all necessary platform-specific checks. The CMake build scripts detect the actual features provided by the target (Unix or Windows) platform. On Unix (including OS X), shared libraries can be built. If the QuickThreads library provides support for the target processor, it will be automatically used. Otherwise, we rely on Pthreads on Unix and Fiber on Windows. By default, the SystemC library installation will follow the GNU standard installation layout so that also other SystemC libraries (SystemC, SCV, TLM, AMS extensions) can be installed into the same directory hierarchy (Unix: /opt/systemc/; Windows: $ENV{ProgramFiles}/SystemC/). The target platform's conventions are respected meaning usually include/ for the headers and lib/, lib64/, or lib// for the libraries. The lib-${SYSTEMC_TARGET_ARCH})/ convention is not used by default, as ${SYSTEMC_TARGET_ARCH} does not reliably encode the OS/processor/compiler tuple. The build process can be configured through the configuration variables offered to the user in the CMake console and GUI (ccmake and cmake-gui, respectively). Each variable is annotated with a brief documentation string. The most important variables are: BUILD_SHARED_LIBS Build shared instead of static libraries (default: ON if not targetting Windows). BUILD_SOURCE_DOCUMENTATION Build source code documentation using Doxygen (default: OFF). CMAKE_BUILD_TYPE Specifies the build type on single-configuration generators. (default: Release). CMAKE_CXX_STANDARD C++ standard to build all targets. Supported values are 98, 11, 14, and 17. (default: 98) CMAKE_CXX_STANDARD_REQUIRED The with CMAKE_CXX_STANDARD selected C++ standard is a requirement. (default: ON) CMAKE_INSTALL_PREFIX Root directory of the SystemC libraries installation (defaults to $ENV{SYSTEMC_HOME} if set to an absolute path and otherwise to either /opt/systemc/ (Unix-like platforms including CYGWIN), $ENV{ProgramFiles}/SystemC/ (on Windows systems), or ${CMAKE_INSTALL_PREFIX}/systemc. CMAKE_OSX_ARCHITECTURES Architectures for cross-compilation on Mac OS X (default: empty, i.e., only for the system processor). CMAKE_VERBOSE_MAKEFILE Generate a verbose Makefile (default: OFF). DISABLE_ASYNC_UPDATES Disable async_request_update() support. DISABLE_COPYRIGHT_MESSAGE Do not print the copyright message when starting the application. (default: OFF) DISABLE_VIRTUAL_BIND Disable the definition of bind() member functions of ports and exports as "virtual", which is incompatible with old TLM library implementations (< 2.0.2). ENABLE_ASSERTIONS Always enable the `sc_assert' expressions (default: ON) ENABLE_IMMEDIATE_SELF_NOTIFICATIONS Enable immediate self-notification of processes, which is no longer supported due to changes in IEEE Std 1666-2011 (see sc_event::notify, 5.10.6). ENABLE_PTHREADS Use POSIX threads for SystemC processes instead of QuickThreads on Unix or Fiber on Windows. SystemC_TARGET_ARCH Target architecture according to the Accellera SystemC conventions set either from $ENV{SYSTEMC_TARGET_ARCH}, $ENV{SYSTEMC_ARCH}, or detected by CMake. INSTALL_TO_LIB_BUILD_TYPE_DIR Install the libraries to lib-${CMAKE_BUILD_TYPE} to enable parallel installation of the different build variants. (default: OFF) INSTALL_TO_LIB_TARGET_ARCH_DIR Install the libraries to lib- to facilitate linking applications, which build systems assume to find SystemC in lib-. (default: OFF) INSTALL_LIB_TARGET_ARCH_SYMLINK On Unix, install a symlink lib- to lib-${CMAKE_BUILD_TYPE} facilitating the linking of user code, which build system assumes to find the SystemC libraries under lib-. (default: OFF) Other configuration variables will be proposed by CMake depending on the OS and detected processor, compiler, and libraries. For more information, please refer to the CMake documentation or . The configuration step needs to be repeated until no new configuration variables appear. 5.) Generate the Makefiles or IDE project files by pressing 'g' or clicking on "Generate". 6.) Compile, test, and install the libraries using make or the IDE: $ make $ make check $ sudo make install More documentation on using CMake is available from the the CMake Wiki . 3. Cross Compilation ==================== CMake supports cross compilation on a host system for a different target architecture. Depending on the scenario, different approaches can be used. 3.1 Cross Compilation for 32-bit on a 64-bit platform using GCC --------------------------------------------------------------- This section is primarily relevant for users of 64-bit versions of Linux and Windows. On 64-bit platforms like Linux x86_64 and Windows AMD64, the OS provides usually for backward-compatability the capability to execute 64-bit and 32-bit applications. To this end, it provides 32-bit and 64-bit versions of all runtime libraries (on Linux, they can be usually found in the lib/ and lib64/ directories). On these platforms, the GCC toolchain is usually installed in a multilib variant, which supports the compilation and linking of 64-bit and 32-bit applications and libraries. The word width of the target architecture is simply chosen with the "-m64" or "-m32" option, which has to be consistently passed at each compiler and linker call. Therefore, it is in principle sufficient to add "-m32" to the corresponding CMake variables containing the flags to be passed to the linker and compiler: CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS These flags should be already set upon the first CMake invocation in a new build directory, as most system introspection results are cached over multiple CMake runs. You can do so via the "-D=" option of cmake, ccmake, and cmake-gui. In a similar way, the particular C or C++ compiler can be chosen by providing the name (optionally preceded by the path) of the compiler executables: CMAKE_C_COMPILER CMAKE_CXX_COMPILER However, it is very handy to know that CMake honors the standard environment variables CC (C compiler), CXX (C++ compiler), CFLAGS (C compiler flags), CXXFLAGS (C++ compiler flags), and LDFLAGS (linker flags), which are also used by other tools such as GNU Make, to initialize the above variables upon its first call in a new build directory. Note, that CPPFLAGS is currently ignored by CMake . On certain platforms, CMake might have trouble to find the right library for the target processor architecture when using find_package() or find_library() in the CMake scripts. In that case, it can help to explicitly set the following global property in your CMake file before issuing any find_package() or find_library() in your CMake script: set_property (GLOBAL FIND_LIBRARY_USE_LIB64_PATHS ) If set to TRUE, it will look for the library in lib64/ instead of lib/. This property is usually automatically set on platforms known to need it, but depending on the chosen compiler options, it may need adjustment. 3.2 Cross Compilation on OS X ----------------------------- On OS X, a similar approach as in section 3.1 can be adopted. However, it has to be noted that Apple's versions of GCC and Clang don't support "-m32" and "-m64", but the more flexible "-arch " parameter. The latter can be even repeated several times on the command line to create universal binaries able to run on several processor architectures. CMake has native support for this command line option, which value can be set centrally in the CMake scripts and will be then passed on to the compilers and linker. It is sufficient to set the variable CMAKE_OSX_ARCHITECTURES to the desired target architecture(s). Multiple architectures are separated with a ';'. You can do so already on the command line $ cmake .. -DCMAKE_OSX_ARCHITECTURES=x86_64;i386;ppc or in variable editors of ccmake and cmake-gui. If you are using MacPorts or Homebrew versions of GCC, you will have to make sure that you install universal variants of the compiler toolchain. Then, you can follow the instruction in section 3.1. 3.3 Generic Cross Compilation to a Target System ------------------------------------------------ As CMake cannot guess the target system, a number of variables have to be preset so that the correct compiler toolchain and libraries are found. It is recommended to do this with a so-called toolchain file, which is passed as an argument to cmake, ccmake or cmake-gui using the option "-DCMAKE_TOOLCHAIN_FILE=". The file in CMake syntax has to define the following variables: CMAKE_SYSTEM_NAME (mandatory), e.g., "Linux", "Windows", "Darwin" CMAKE_SYSTEM_VERSION (optional) CMAKE_SYSTEM_PROCESSOR (optional), e.g., "i386", "x86_64", "ppc", "ppc64" CMAKE_C_COMPILER (mandatory), name of C compiler executable CMAKE_CXX_COMPILER (mandatory), name of C compiler executable CMAKE_FIND_ROOT_PATH (optional), root to target include and library directories CMAKE_FIND_ROOT_PATH_MODE_PROGRAM, either "NEVER", "ONLY", or "BOTH" (default) CMAKE_FIND_ROOT_PATH_MODE_LIBRARY, either "NEVER", "ONLY", or "BOTH" (default) CMAKE_FIND_ROOT_PATH_MODE_INCLUDE, either "NEVER", "ONLY", or "BOTH" (default) The necessary steps are discussed in detail on the CMake Wiki . 4. Finding and Using SystemC with CMake ======================================= The CMake build scripts install CMake package config files to facilitate finding the SystemC and TLM libraries. The packages are called SystemCLanguage and SystemCTLM. As the TLM support is compiled into the SystemC library, the package SystemCTLM just finds the matching SystemC library as a dependency. As SystemC is usually installed in its own directory tree, you have to tell CMake where to look for the package config files by setting the variable CMAKE_PREFIX_PATH to the root directory of your SystemC installation before calling find_package(). The SystemCLanguage package provides the imported target SystemC::systemc to which an application or library should link to. Linking to an imported target ensures that all necessary preprocessor definitions, compiler options, and transitive link libraries are used when compiling and linking the application. The SystemCLanguage package exports a number of variables: SystemC_TARGET_ARCH Target architecture according to the Accellera SystemC conventions SystemC_CXX_STANDARD Preferred C++ standard SystemC_CXX_STANDARD_REQUIRED Determine whether the selected C++ standard is a requirement The SystemC_CXX_STANDARD and SystemC_CXX_STANDARD_REQUIRED variables should be used to initialize the respective CMAKE_CXX_STANDARD and CMAKE_CXX_STANDARD_REQUIRED variables in the CMake build scripts of the application/library. Alternatively, the CXX_STANDARD and CXX_STANDARD_REQUIRED target properties can be set directly. As an example, here is a minimal CMakeLists.txt to compile the simple_perf SystemC example as a stand-alone application: --- Start: CMakeLists.txt --- cmake_minimum_required(VERSION 3.1) project(simple_perf CXX) set (CMAKE_PREFIX_PATH /opt/systemc) find_package(SystemCLanguage CONFIG REQUIRED) set (CMAKE_CXX_STANDARD ${SystemC_CXX_STANDARD} CACHE STRING "C++ standard to build all targets. Supported values are 98, 11, 14, and 17.") set (CMAKE_CXX_STANDARD_REQUIRED ${SystemC_CXX_STANDARD_REQUIRED} CACHE BOOL "The with CMAKE_CXX_STANDARD selected C++ standard is a requirement.") add_executable(simple_perf simple_perf.cpp) target_link_libraries(simple_perf SystemC::systemc) --- End: CMakeLists.txt --- 5. Known Problems ================= - The CMake build scripts require more thorough testing of the various build configurations on as many platforms as possible. For the moment, testing has been primarily done on OS X (x86_64 and i686) and Linux (x86_64 and i686) as well as to a lesser degree on Windows 7 using MSYS2 + MingGW-W64 and MSVC 2013 / 2015 (x86_64 and i686). - The CMake build scripts do not yet support the compilation of the SystemC libraries as a DLL on Windows. To make it work, the SystemC library has to be at least split into libsystemc-core.dll and a static libsystemc.lib. - The CMake build scripts don't yet configure and install systemc.pc and tlm.pc for pkg-config. 6. Ressources ============= [1] CMake - Cross Platform Make Homepage [2] CMake Documentation [3] CMake Wiki |4] Ken Martin, Bill Hoffman: "Mastering CMake", Kitware. [5] The MacPorts Project Homepage [6] Homebrew -- The missing package manager for OS X. systemc-2.3.4/cmake/SystemCLanguageConfig.cmake.in0000644000175000017500000000200614342422106021733 0ustar carstencarsten# - Config file for the SystemCLanguage package # It defines the following variables: # SystemC_TARGET_ARCH - Target architecture according to the Accellera SystemC conventions # SystemC_CXX_STANDARD - Preferred C++ standard # SystemC_CXX_STANDARD_REQUIRED - Determine whether the selected C++ standard is a requirement @PACKAGE_INIT@ include(CMakeFindDependencyMacro) # SystemC requires Pthreads under certain conditions if (@CMAKE_USE_PTHREADS_INIT@) set (THREADS_PREFER_PTHREAD_FLAG ON) find_dependency (Threads) if (NOT CMAKE_USE_PTHREADS_INIT) message (SEND_ERROR "Failed to find the Pthreads library required to implement the SystemC coroutines and async_request_update() of primitive channels on Unix.") endif (NOT CMAKE_USE_PTHREADS_INIT) endif (@CMAKE_USE_PTHREADS_INIT@) include ("${CMAKE_CURRENT_LIST_DIR}/SystemCLanguageTargets.cmake") set (SystemC_TARGET_ARCH @SystemC_TARGET_ARCH@) set (SystemC_CXX_STANDARD @CMAKE_CXX_STANDARD@) set (SystemC_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@) systemc-2.3.4/cmake/SystemCTLMConfig.cmake.in0000644000175000017500000000045414342422106020651 0ustar carstencarsten# - Config file for the SystemCTLM package # TLM is part of the SystemC language library. include(CMakeFindDependencyMacro) find_dependency (SystemCLanguage @SystemCLanguage_VERSION_MAJOR@.@SystemCLanguage_VERSION_MINOR@.@SystemCLanguage_VERSION_PATCH@.@SystemCLanguage_VERSION_RELEASE_DATE@ EXACT) systemc-2.3.4/cmake/run_test.cmake0000644000175000017500000001206114342422106017012 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # cmake/run_test.cmake -- # CMake script to run a compiled unit test and to optionally compare its output # with a golden reference file. # # Original Author: Torsten Maehne, Berner Fachhochschule (BFH), 2016-09-12 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### cmake_minimum_required (VERSION 2.8.11) if(NOT TEST_EXE) message(FATAL_ERROR " Usage: cmake -DTEST_EXE= [-DTEST_INPUT=] \\\n" " [-DTEST_GOLDEN=] \\\n" " [-DTEST_FILTER=] \\\n" " [-DDIFF_COMMAND=] \\\n" " [-DDIFF_OPTIONS=] \\\n" " -P run_test.cmake") endif(NOT TEST_EXE) if(NOT EXISTS ${TEST_EXE}) message(FATAL_ERROR "Can't find the executable: ${TEST_EXE}") endif(NOT EXISTS ${TEST_EXE}) if (NOT TEST_DIR) get_filename_component(TEST_DIR ${TEST_EXE} DIRECTORY) endif (NOT TEST_DIR) if(NOT EXISTS ${TEST_DIR}) message(FATAL_ERROR "Can't find the test execution directory: ${TEST_DIR}") endif(NOT EXISTS ${TEST_DIR}) if(TEST_INPUT AND NOT EXISTS ${TEST_INPUT}) message(FATAL_ERROR "Can't find the test input file: ${TEST_INPUT}") endif(TEST_INPUT AND NOT EXISTS ${TEST_INPUT}) if(TEST_GOLDEN AND NOT EXISTS ${TEST_GOLDEN}) message(FATAL_ERROR "Can't find the test's golden reference output file: ${TEST_GOLDEN}") endif(TEST_GOLDEN AND NOT EXISTS ${TEST_GOLDEN}) if(TEST_INPUT) execute_process(COMMAND ${TEST_EXE} WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE TEST_EXIT_CODE INPUT_FILE ${TEST_INPUT} OUTPUT_FILE run.log ERROR_VARIABLE TEST_ERROR) else(TEST_INPUT) execute_process(COMMAND ${TEST_EXE} WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE TEST_EXIT_CODE OUTPUT_FILE run.log ERROR_VARIABLE TEST_ERROR) endif(TEST_INPUT) if(NOT TEST_GOLDEN) if(TEST_EXIT_CODE EQUAL 0) message ("OK") return() else(TEST_EXIT_CODE EQUAL 0) message (FATAL_ERROR "***ERROR:\n${TEST_ERROR}") endif(TEST_EXIT_CODE EQUAL 0) endif(NOT TEST_GOLDEN) # TODO: trim empty lines from run and expected log output if ("${TEST_FILTER}" STREQUAL "") file (READ ${TEST_DIR}/run.log RUN_LOG) else ("${TEST_FILTER}" STREQUAL "") file (STRINGS ${TEST_DIR}/run.log RUN_FILTERED_LOG REGEX "^.*${TEST_FILTER}.*$" ) string(REPLACE ";" "\n" RUN_LOG "${RUN_FILTERED_LOG}\n") endif ("${TEST_FILTER}" STREQUAL "") string(REGEX REPLACE "^.*stopped by user.*$" "" RUN_TRIMMED_LOG ${RUN_LOG}) file(WRITE ${TEST_DIR}/run_trimmed.log "${RUN_TRIMMED_LOG}") file(READ ${TEST_GOLDEN} EXPECTED_LOG) string(REGEX REPLACE "^.*stopped by user.*$" "" EXPECTED_TRIMMED_LOG "${EXPECTED_LOG}") file(WRITE ${TEST_DIR}/expected_trimmed.log "${EXPECTED_TRIMMED_LOG}") if(NOT DIFF_COMMAND) set(DIFF_COMMAND ${CMAKE_COMMAND}) set(DIFF_OPTIONS -E compare_files) endif(NOT DIFF_COMMAND) execute_process(COMMAND ${DIFF_COMMAND} ${DIFF_OPTIONS} run_trimmed.log expected_trimmed.log WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE DIFF_EXIT_CODE OUTPUT_FILE diff.log ERROR_FILE diff.log) message("DIFF_EXIT_CODE = ${DIFF_EXIT_CODE}") if(DIFF_EXIT_CODE EQUAL 0) message ("OK") else(DIFF_EXIT_CODE EQUAL 0) file(READ ${TEST_DIR}/diff.log DIFF_LOG) message(FATAL_ERROR "***ERROR:\n${DIFF_LOG}") endif(DIFF_EXIT_CODE EQUAL 0) file(REMOVE ${TEST_DIR}/run.log ${TEST_DIR}/run_trimmed.log ${TEST_DIR}/expected_trimmed.log ${TEST_DIR}/diff.log) systemc-2.3.4/msvc10/0000755000175000017500000000000014342422106014176 5ustar carstencarstensystemc-2.3.4/msvc10/SystemC/0000755000175000017500000000000014342422106015565 5ustar carstencarstensystemc-2.3.4/msvc10/SystemC/SystemC-core.vcxproj0000644000175000017500000011404714342422106021526 0ustar carstencarsten DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 ReleaseDLL Win32 ReleaseDLL x64 Release Win32 Release x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414} SystemC Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) $(SolutionName)-$(SYSTEMC_VERSION) Disabled ../../src;%(AdditionalIncludeDirectories) SC_BUILD;_DEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) X64 Disabled ../../src;%(AdditionalIncludeDirectories) SC_BUILD;_DEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) ../../src;%(AdditionalIncludeDirectories) SC_BUILD;NDEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) X64 ../../src;%(AdditionalIncludeDirectories) SC_BUILD;NDEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) Disabled ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;SC_BUILD;_DEBUG;_USRDLL;WIN32;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) true X64 Disabled ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;SC_BUILD;_DEBUG;_USRDLL;WIN64;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) true ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;SC_BUILD;NDEBUG;_USRDLL;WIN32;%(PreprocessorDefinitions) true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) X64 ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;SC_BUILD;NDEBUG;_USRDLL;WIN64;%(PreprocessorDefinitions) true Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) CppCode CppCode CppCode CppCode CppCode CppCode systemc-2.3.4/msvc10/SystemC/SystemC-core.vcxproj.filters0000644000175000017500000011174114342422106023173 0ustar carstencarsten Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_core Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\tlm Source Files\tlm Source Files\tlm Source Files\tlm_utils Source Files\tlm_utils Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_core Header Files\sc_core Header Files\sc_dt Header Files\sc_dt Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_dt Header Files\sc_dt Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_core Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\sc_dt Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Header Files\tlm_utils Source Files\sc_dt Header Files\sc_dt Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Header Files\sc_boost Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt Source Files\sc_dt {b776df48-157a-4218-89f6-b4bd33ccd7f9} *.h;*.hpp {284dc6c4-398e-47fd-bca2-e431fb954247} *.cpp;*.inc {595ee38e-eb18-4458-b4bc-ca69a7592a5e} {50b28bec-038e-416e-adb6-ad3ebde9b15e} {1e3968e1-5ae4-46c4-abd2-49bb3703e0c8} {51ae78d0-d018-4e19-adf9-5f2721aae88b} {bdcbecb3-8d8d-4e33-b145-e9ac71e4567f} {1564d417-7614-4391-b8fa-d08c984483ca} {15db5fd4-7b4b-4cd0-bed7-f879b08ddd1e} {1050930d-f9f9-45f1-a16d-076f334b0aeb} {d873e7b3-e806-4138-8218-e54338e43868} systemc-2.3.4/msvc10/SystemC/SystemC.sln0000644000175000017500000000651414342422106017700 0ustar carstencarstenMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SystemC", "SystemC.vcxproj", "{86DF4B8C-CF94-4EA8-B529-78997F0F30A7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SystemC-core", "SystemC-core.vcxproj", "{C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugDLL|Win32 = DebugDLL|Win32 DebugDLL|x64 = DebugDLL|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 ReleaseDLL|Win32 = ReleaseDLL|Win32 ReleaseDLL|x64 = ReleaseDLL|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Debug|Win32.ActiveCfg = Debug|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Debug|Win32.Build.0 = Debug|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Debug|x64.ActiveCfg = Debug|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Debug|x64.Build.0 = Debug|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.DebugDLL|x64.Build.0 = DebugDLL|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Release|Win32.ActiveCfg = Release|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Release|Win32.Build.0 = Release|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Release|x64.ActiveCfg = Release|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.Release|x64.Build.0 = Release|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Debug|Win32.ActiveCfg = Debug|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Debug|Win32.Build.0 = Debug|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Debug|x64.ActiveCfg = Debug|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Debug|x64.Build.0 = Debug|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.DebugDLL|x64.Build.0 = DebugDLL|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Release|Win32.ActiveCfg = Release|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Release|Win32.Build.0 = Release|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Release|x64.ActiveCfg = Release|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.Release|x64.Build.0 = Release|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 {C4BB70F7-ECD9-4E8D-9898-AC8F7FB73414}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/msvc10/SystemC/SystemC.vcxproj.filters0000644000175000017500000000216114342422106022240 0ustar carstencarsten Source Files Source Files Header Files Header Files Header Files Header Files {1779b90e-754e-414c-ba03-ebd5e2bc7a7f} {8e9e908a-8e50-4bcb-b8e1-a7ffa0738a15} systemc-2.3.4/msvc10/SystemC/SystemC.props0000644000175000017500000000236214342422106020244 0ustar carstencarsten 2.3.4 $(Configuration)\ $(SolutionDir)$(Configuration)\ $(IntDir)$(MSBuildProjectName).log /vmg %(AdditionalOptions) Level3 SC_INCLUDE_FX;SC_ENABLE_ASSERTIONS;%(PreprocessorDefinitions) 4244;4267;4996 interface;%(UndefinePreprocessorDefinitions) MultiThreadedDLL $(SYSTEMC_VERSION) true systemc-2.3.4/msvc10/SystemC/SystemC.vcxproj0000644000175000017500000004361614342422106020603 0ustar carstencarsten DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 ReleaseDLL Win32 ReleaseDLL x64 Release Win32 Release x64 {86DF4B8C-CF94-4EA8-B529-78997F0F30A7} SystemC Win32Proj StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ $(Configuration)\ $(Configuration)\int-$(ProjectName)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\int-$(ProjectName)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(ProjectName) Disabled ../../src;%(AdditionalIncludeDirectories) _DEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase true X64 Disabled ../../src;%(AdditionalIncludeDirectories) _DEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase true $(OutDir)$(TargetName)$(TargetExt) ../../src;%(AdditionalIncludeDirectories) NDEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true Level3 ProgramDatabase true X64 ../../src;%(AdditionalIncludeDirectories) NDEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true Level3 ProgramDatabase true Disabled ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;_DEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase true X64 Disabled ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;_DEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false true Level3 ProgramDatabase true ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;NDEBUG;_LIB;WIN32;%(PreprocessorDefinitions) true Level3 ProgramDatabase true X64 ../../src;%(AdditionalIncludeDirectories) SC_WIN_DLL;NDEBUG;_LIB;WIN64;%(PreprocessorDefinitions) true Level3 ProgramDatabase true CppHeader CppHeader {c4bb70f7-ecd9-4e8d-9898-ac8f7fb73414} false systemc-2.3.4/NOTICE0000644000175000017500000000664714342422106014006 0ustar carstencarsten========================================================================= == NOTICE file corresponding to section 4 d of the Apache License, == == Version 2.0, in this case for the SystemC Class Library == == Proof of Concept implementation == ========================================================================= This product includes software developed by Accellera Systems Initiative 8698 Elk Grove Bldv Suite 1, #114, Elk Grove, CA 95624, USA Copyright 2011-2022 Accellera Systems Initiative Inc. (Accellera) All rights reserved. This product includes software developed by Arm Limited or its affiliates. Copyright 2017-2019. Arm Limited or its affiliates. All rights reserved This product includes software developed by Cadence Design Systems Inc. 2655 Seely Ave., San Jose, CA, USA Copyright 2006-2019 Cadence Design Systems Inc. All rights reserved. This product includes software developed by Circuitsutra Technologies Pvt Ltd. Regus, Ground Floor, Tapasya Corp Heights, Sector 126, Noida, 201303, UP, India Copyright 2011-2019 Circuitsutra Technologies Pvt Ltd. All rights reserved. This product includes software developed by COSEDA Technologies GmbH Koenigsbruecker Str. 124, 01099 Dresden, Germany Copyright 2022 COSEDA Technologies GmbH All rights reserved. This product includes software developed by Doulos Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, United Kingdom Copyright 2006-2019 Doulos All rights reserved. This product includes software developed by Ericsson AB 164 80, Stockholm, Sweden Copyright 2016-2019 Ericsson AB All rights reserved. This product includes software developed by Fraunhofer-Gesellschaft Postfach 20 07 33, 80007 Munich, Germany Copyright 2014-2019 Fraunhofer-Gesellschaft All rights reserved. This product includes software developed by GreenSocs SAS, 24380 Chalagnac, France, on behalf of the IRT Antoine de Saint-Exupery, 3 rue Tarfaya, CS 34436, France Copyright 2007-2022 GreenSocs SAS. All rights reserved. This product includes software developed by Intel Corp. 2200 Mission College Blvd., Santa Clara, CA 95054-1549, USA Copyright 2007-2019 Intel Corp. All rights reserved. This product includes software developed by Mentor Graphics Corporation 8005 SW Boeckman Road, Wilsonville, OR 97070, USA Copyright 2006-2019 Mentor Graphics Corporation All rights reserved. This product includes software developed by NXP B.V. High Tech Campus 60, 5656 AG Eindhoven, Netherlands Copyright 2012-2022 NXP B.V. All rights reserved This product includes software developed by OFFIS eV Escherweg 2, 26121 Oldenburg, Germany Copyright 2009-2019 OFFIS eV All rights reserved. This product includes software developed by STMicroelectronics International NV 39, Chemin de Champ-des-Filles, Plan-Les-Ouates, Geneva, Switzerland Copyright 2011-2022 STMicroelectronics International NV All rights reserved. This product includes software developed by Synopsys, Inc. 690 East Middlefield Road Mountain View, CA 94043, USA Copyright 1999-2019 Synopsys, Inc. All rights reserved. This product includes software developed by Universite Pierre et Marie Curie b.c. 167, 4 place Jussieu, 75252 Paris, France Copyright 2011-2019 Universite Pierre et Marie Curie (UPMC) All rights reserved. This product includes software developed by XtremeEDA Corporation 201-1339 Wellington St. West, Ottowa, Ontario K1Y3B8, Canada Copyright 2011-2019 XtremeEDA Corporation. All rights reserved. systemc-2.3.4/examples/0000755000175000017500000000000014342422106014703 5ustar carstencarstensystemc-2.3.4/examples/tlm/0000755000175000017500000000000014342422106015477 5ustar carstencarstensystemc-2.3.4/examples/tlm/common/0000755000175000017500000000000014342422106016767 5ustar carstencarstensystemc-2.3.4/examples/tlm/common/Makefile.am0000644000175000017500000000656714342422106021041 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-10 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.examples all: @echo "To compile the TLM examples library type" @echo " make check " check_LTLIBRARIES = libtlm20examples.la libtlm20examples_la_SOURCES = $(CXX_FILES) libtlm20examples_la_CPPFLAGS = -I$(srcdir)/include $(AM_CPPFLAGS) libtlm20examples_la_LIBADD = $(top_builddir)/src/libsystemc.la H_FILES = \ include/at_initiator_annotated.h \ include/at_initiator_explicit.h \ include/at_target_1_phase_dmi.h \ include/at_target_1_phase.h \ include/at_target_2_phase.h \ include/at_target_4_phase.h \ include/dmi_memory.h \ include/extension_initiator_id.h \ include/lt_dmi_initiator.h \ include/lt_dmi_target.h \ include/lt_initiator.h \ include/lt_synch_target.h \ include/lt_target.h \ include/lt_td_initiator.h \ include/memory.h \ include/models/README.txt \ include/models/SimpleBusAT.h \ include/models/SimpleBusLT.h \ include/reporting.h \ include/select_initiator.h \ include/traffic_generator.h # present, but currently broken EXTRA_DIST += \ include/at_initiator_temporal_decoupling.h CXX_FILES = \ src/at_initiator_annotated.cpp \ src/at_initiator_explicit.cpp \ src/at_target_1_phase.cpp \ src/at_target_1_phase_dmi.cpp \ src/at_target_2_phase.cpp \ src/at_target_4_phase.cpp \ src/dmi_memory.cpp \ src/extension_initiator_id.cpp \ src/lt_dmi_initiator.cpp \ src/lt_dmi_target.cpp \ src/lt_initiator.cpp \ src/lt_synch_target.cpp \ src/lt_target.cpp \ src/lt_td_initiator.cpp \ src/memory.cpp \ src/report.cpp \ src/select_initiator.cpp \ src/traffic_generator.cpp # present, but currently broken EXTRA_DIST += \ src/at_initiator_temporal_decoupling.cpp # install examples? if SEPARATE_INSTALL_TREE tlm20examplesdir = $(examplesdir)/tlm/common nobase_tlm20examples_HEADERS = \ $(H_FILES) \ $(CXX_FILES) # source files should be installed as well else # distribute only EXTRA_DIST += \ $(H_FILES) \ $(CXX_FILES) endif # SEPARATE_INSTALL_TREE ## Taf! systemc-2.3.4/examples/tlm/common/include/0000755000175000017500000000000014342422106020412 5ustar carstencarstensystemc-2.3.4/examples/tlm/common/include/lt_synch_target.h0000644000175000017500000000751114342422106023760 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_synch_target.h // /// @brief special target to illustrate dmi access to memory // //===================================================================== // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX //===================================================================== #ifndef __LT_SYNCH_TARGET_H__ #define __LT_SYNCH_TARGET_H__ #include "tlm.h" // TLM headers #include "memory.h" #include "tlm_utils/simple_target_socket.h" class lt_synch_target : public sc_core::sc_module /// inherit from SC module base clase //, virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn lt_synch_target /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== lt_synch_target ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); private: /// b_transport() - Blocking Transport void // returns nothing custom_b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm_utils::simple_target_socket m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays memory m_target_memory; }; #endif /* __LT_SYNCH_TARGET_H__ */ systemc-2.3.4/examples/tlm/common/include/models/0000755000175000017500000000000014342422106021675 5ustar carstencarstensystemc-2.3.4/examples/tlm/common/include/models/SimpleBusAT.h0000644000175000017500000002631014342422106024200 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __SIMPLEBUSAT_H__ #define __SIMPLEBUSAT_H__ //#include #include "tlm.h" #include "tlm_utils/simple_target_socket.h" #include "tlm_utils/simple_initiator_socket.h" #include "tlm_utils/peq_with_get.h" template class SimpleBusAT : public sc_core::sc_module { public: typedef tlm::tlm_generic_payload transaction_type; typedef tlm::tlm_phase phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm_utils::simple_target_socket_tagged target_socket_type; typedef tlm_utils::simple_initiator_socket_tagged initiator_socket_type; public: target_socket_type target_socket[NR_OF_INITIATORS]; initiator_socket_type initiator_socket[NR_OF_TARGETS]; public: SC_HAS_PROCESS(SimpleBusAT); SimpleBusAT(sc_core::sc_module_name name) : sc_core::sc_module(name), mRequestPEQ("requestPEQ"), mResponsePEQ("responsePEQ") { for (unsigned int i = 0; i < NR_OF_INITIATORS; ++i) { target_socket[i].register_nb_transport_fw(this, &SimpleBusAT::initiatorNBTransport, i); target_socket[i].register_transport_dbg(this, &SimpleBusAT::transportDebug, i); target_socket[i].register_get_direct_mem_ptr(this, &SimpleBusAT::getDMIPointer, i); } for (unsigned int i = 0; i < NR_OF_TARGETS; ++i) { initiator_socket[i].register_nb_transport_bw(this, &SimpleBusAT::targetNBTransport, i); initiator_socket[i].register_invalidate_direct_mem_ptr(this, &SimpleBusAT::invalidateDMIPointers, i); } SC_THREAD(RequestThread); SC_THREAD(ResponseThread); } // // Dummy decoder: // - address[31-28]: portId // - address[27-0]: masked address // unsigned int getPortId(const sc_dt::uint64& address) { return (unsigned int)address >> 28; } sc_dt::uint64 getAddressOffset(unsigned int portId) { return portId << 28; } sc_dt::uint64 getAddressMask(unsigned int /*portId*/) { return 0xfffffff; } unsigned int decode(const sc_dt::uint64& address) { // decode address: // - return initiator socket id return getPortId(address); } // // AT protocol // void RequestThread() { while (true) { wait(mRequestPEQ.get_event()); transaction_type* trans; while ((trans = mRequestPEQ.get_next_transaction())!=0) { unsigned int portId = decode(trans->get_address()); assert(portId < NR_OF_TARGETS); initiator_socket_type* decodeSocket = &initiator_socket[portId]; trans->set_address(trans->get_address() & getAddressMask(portId)); // Fill in the destination port PendingTransactionsIterator it = mPendingTransactions.find(trans); assert(it != mPendingTransactions.end()); it->second.to = decodeSocket; phase_type phase = tlm::BEGIN_REQ; sc_core::sc_time t = sc_core::SC_ZERO_TIME; // FIXME: No limitation on number of pending transactions // All targets (that return false) must support multiple transactions switch ((*decodeSocket)->nb_transport_fw(*trans, phase, t)) { case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: // Transaction not yet finished if (phase == tlm::BEGIN_REQ) { // Request phase not yet finished wait(mEndRequestEvent); } else if (phase == tlm::END_REQ) { // Request phase finished, but response phase not yet started wait(t); } else if (phase == tlm::BEGIN_RESP) { mResponsePEQ.notify(*trans, t); // Not needed to send END_REQ to initiator continue; } else { // END_RESP assert(0); exit(1); } // only send END_REQ to initiator if BEGIN_RESP was not already send if (it->second.from) { phase = tlm::END_REQ; t = sc_core::SC_ZERO_TIME; (*it->second.from)->nb_transport_bw(*trans, phase, t); } break; case tlm::TLM_COMPLETED: // Transaction finished mResponsePEQ.notify(*trans, t); // reset to destination port (we must not send END_RESP to target) it->second.to = 0; wait(t); break; default: assert(0); exit(1); }; } } } void ResponseThread() { while (true) { wait(mResponsePEQ.get_event()); transaction_type* trans; while ((trans = mResponsePEQ.get_next_transaction())!=0) { PendingTransactionsIterator it = mPendingTransactions.find(trans); assert(it != mPendingTransactions.end()); phase_type phase = tlm::BEGIN_RESP; sc_core::sc_time t = sc_core::SC_ZERO_TIME; target_socket_type* initiatorSocket = it->second.from; // if BEGIN_RESP is send first we don't have to send END_REQ anymore it->second.from = 0; switch ((*initiatorSocket)->nb_transport_bw(*trans, phase, t)) { case tlm::TLM_COMPLETED: // Transaction finished wait(t); break; case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: // Transaction not yet finished wait(mEndResponseEvent); break; default: assert(0); exit(1); }; // forward END_RESP to target if (it->second.to) { phase = tlm::END_RESP; t = sc_core::SC_ZERO_TIME; sync_enum_type r = (*it->second.to)->nb_transport_fw(*trans, phase, t); assert(r == tlm::TLM_COMPLETED); (void)r; } mPendingTransactions.erase(it); trans->release(); } } } // // interface methods // sync_enum_type initiatorNBTransport(int initiator_id, transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (phase == tlm::BEGIN_REQ) { trans.acquire(); addPendingTransaction(trans, 0, initiator_id); mRequestPEQ.notify(trans, t); } else if (phase == tlm::END_RESP) { mEndResponseEvent.notify(t); return tlm::TLM_COMPLETED; } else { std::cout << "ERROR: '" << name() << "': Illegal phase received from initiator." << std::endl; assert(false); exit(1); } return tlm::TLM_ACCEPTED; } sync_enum_type targetNBTransport(int /*portId*/, transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (phase != tlm::END_REQ && phase != tlm::BEGIN_RESP) { std::cout << "ERROR: '" << name() << "': Illegal phase received from target." << std::endl; assert(false); exit(1); } mEndRequestEvent.notify(t); if (phase == tlm::BEGIN_RESP) { mResponsePEQ.notify(trans, t); } return tlm::TLM_ACCEPTED; } unsigned int transportDebug(int /*initiator_id*/, transaction_type& trans) { unsigned int portId = decode(trans.get_address()); assert(portId < NR_OF_TARGETS); initiator_socket_type* decodeSocket = &initiator_socket[portId]; trans.set_address( trans.get_address() & getAddressMask(portId) ); return (*decodeSocket)->transport_dbg(trans); } bool limitRange(unsigned int portId, sc_dt::uint64& low, sc_dt::uint64& high) { sc_dt::uint64 addressOffset = getAddressOffset(portId); sc_dt::uint64 addressMask = getAddressMask(portId); if (low > addressMask) { // Range does not overlap with addressrange for this target return false; } low += addressOffset; if (high > addressMask) { high = addressOffset + addressMask; } else { high += addressOffset; } return true; } bool getDMIPointer(int /*initiator_id*/, transaction_type& trans, tlm::tlm_dmi& dmi_data) { // FIXME: DMI not supported for AT bus? sc_dt::uint64 address = trans.get_address(); unsigned int portId = decode(address); assert(portId < NR_OF_TARGETS); initiator_socket_type* decodeSocket = &initiator_socket[portId]; sc_dt::uint64 maskedAddress = address & getAddressMask(portId); trans.set_address(maskedAddress); bool result = (*decodeSocket)->get_direct_mem_ptr(trans, dmi_data); if (result) { // Range must contain address assert(dmi_data.get_start_address() <= maskedAddress); assert(dmi_data.get_end_address() >= maskedAddress); } // Should always succeed sc_dt::uint64 start, end; start = dmi_data.get_start_address(); end = dmi_data.get_end_address(); limitRange(portId, start, end); dmi_data.set_start_address(start); dmi_data.set_end_address(end); return result; } void invalidateDMIPointers(int portId, sc_dt::uint64 start_range, sc_dt::uint64 end_range) { // FIXME: probably faster to always invalidate everything? if ((portId >= 0) && !limitRange(portId, start_range, end_range)) { // Range does not fall into address range of target return; } for (unsigned int i = 0; i < NR_OF_INITIATORS; ++i) { (target_socket[i])->invalidate_direct_mem_ptr(start_range, end_range); } } private: void addPendingTransaction(transaction_type& trans, initiator_socket_type* to, int initiatorId) { const ConnectionInfo info = { &target_socket[initiatorId], to }; assert(mPendingTransactions.find(&trans) == mPendingTransactions.end()); mPendingTransactions[&trans] = info; } private: struct ConnectionInfo { target_socket_type* from; initiator_socket_type* to; }; typedef std::map PendingTransactions; typedef typename PendingTransactions::iterator PendingTransactionsIterator; typedef typename PendingTransactions::const_iterator PendingTransactionsConstIterator; private: PendingTransactions mPendingTransactions; tlm_utils::peq_with_get mRequestPEQ; sc_core::sc_event mBeginRequestEvent; sc_core::sc_event mEndRequestEvent; tlm_utils::peq_with_get mResponsePEQ; sc_core::sc_event mBeginResponseEvent; sc_core::sc_event mEndResponseEvent; }; #endif systemc-2.3.4/examples/tlm/common/include/models/README.txt0000644000175000017500000000135314342422106023375 0ustar carstencarstenSimpleBus --------- - Simple bus model - Runtime switcheable between LT and AT (can only switch if no transactions are pending) - No limitation on number of pending transactions (all targets that can return false must support multiple transactions) - added support for DMI and debug transactions - LT mode: -- Forward nb_transport calls to initiator/targets -- Only one active request/response phase - AT mode: -- Incoming transactions are queued -- AT protocol is executed from a different SC_THREAD -- A target is notified immediately of the end of a transaction (using timing annotation). This is needed because the initiator can re-use the transaction (and the target may use the transaction pointer to identify the transaction) systemc-2.3.4/examples/tlm/common/include/models/SimpleBusLT.h0000644000175000017500000001327414342422106024220 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __SIMPLEBUSLT_H__ #define __SIMPLEBUSLT_H__ //#include #include "tlm.h" #include "tlm_utils/simple_target_socket.h" #include "tlm_utils/simple_initiator_socket.h" template class SimpleBusLT : public sc_core::sc_module { public: typedef tlm::tlm_generic_payload transaction_type; typedef tlm::tlm_phase phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm_utils::simple_target_socket_tagged target_socket_type; typedef tlm_utils::simple_initiator_socket_tagged initiator_socket_type; public: target_socket_type target_socket[NR_OF_INITIATORS]; initiator_socket_type initiator_socket[NR_OF_TARGETS]; public: SC_HAS_PROCESS(SimpleBusLT); SimpleBusLT(sc_core::sc_module_name name) : sc_core::sc_module(name) { for (unsigned int i = 0; i < NR_OF_INITIATORS; ++i) { target_socket[i].register_b_transport(this, &SimpleBusLT::initiatorBTransport, i); target_socket[i].register_transport_dbg(this, &SimpleBusLT::transportDebug, i); target_socket[i].register_get_direct_mem_ptr(this, &SimpleBusLT::getDMIPointer, i); } for (unsigned int i = 0; i < NR_OF_TARGETS; ++i) { initiator_socket[i].register_invalidate_direct_mem_ptr(this, &SimpleBusLT::invalidateDMIPointers, i); } } // // Dummy decoder: // - address[31-28]: portId // - address[27-0]: masked address // unsigned int getPortId(const sc_dt::uint64& address) { return (unsigned int)address >> 28; } sc_dt::uint64 getAddressOffset(unsigned int portId) { return portId << 28; } sc_dt::uint64 getAddressMask(unsigned int /*portId*/) { return 0xfffffff; } unsigned int decode(const sc_dt::uint64& address) { // decode address: // - return initiator socket id return getPortId(address); } // // interface methods // // // LT protocol // - forward each call to the target/initiator // void initiatorBTransport(int /*SocketId*/, transaction_type& trans, sc_core::sc_time& t) { initiator_socket_type* decodeSocket; unsigned int portId = decode(trans.get_address()); assert(portId < NR_OF_TARGETS); decodeSocket = &initiator_socket[portId]; trans.set_address(trans.get_address() & getAddressMask(portId)); (*decodeSocket)->b_transport(trans, t); } unsigned int transportDebug(int /*SocketId*/, transaction_type& trans) { unsigned int portId = decode(trans.get_address()); assert(portId < NR_OF_TARGETS); initiator_socket_type* decodeSocket = &initiator_socket[portId]; trans.set_address( trans.get_address() & getAddressMask(portId) ); return (*decodeSocket)->transport_dbg(trans); } bool limitRange(unsigned int portId, sc_dt::uint64& low, sc_dt::uint64& high) { sc_dt::uint64 addressOffset = getAddressOffset(portId); sc_dt::uint64 addressMask = getAddressMask(portId); if (low > addressMask) { // Range does not overlap with addressrange for this target return false; } low += addressOffset; if (high > addressMask) { high = addressOffset + addressMask; } else { high += addressOffset; } return true; } bool getDMIPointer(int /*SocketId*/, transaction_type& trans, tlm::tlm_dmi& dmi_data) { sc_dt::uint64 address = trans.get_address(); unsigned int portId = decode(address); assert(portId < NR_OF_TARGETS); initiator_socket_type* decodeSocket = &initiator_socket[portId]; sc_dt::uint64 maskedAddress = address & getAddressMask(portId); trans.set_address(maskedAddress); bool result = (*decodeSocket)->get_direct_mem_ptr(trans, dmi_data); if (result) { // Range must contain address assert(dmi_data.get_start_address() <= maskedAddress); assert(dmi_data.get_end_address() >= maskedAddress); } // Should always succeed sc_dt::uint64 start, end; start = dmi_data.get_start_address(); end = dmi_data.get_end_address(); limitRange(portId, start, end); dmi_data.set_start_address(start); dmi_data.set_end_address(end); return result; } void invalidateDMIPointers(int port_id, sc_dt::uint64 start_range, sc_dt::uint64 end_range) { // FIXME: probably faster to always invalidate everything? if (!limitRange(port_id, start_range, end_range)) { // Range does not fall into address range of target return; } for (unsigned int i = 0; i < NR_OF_INITIATORS; ++i) { (target_socket[i])->invalidate_direct_mem_ptr(start_range, end_range); } } }; #endif systemc-2.3.4/examples/tlm/common/include/at_target_1_phase_dmi.h0000644000175000017500000001532214342422106024771 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_1_phase.h // /// @brief Single phase AT target // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __AT_TARGET_1_PHASE_H__ #define __AT_TARGET_1_PHASE_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include "memory.h" // memory storage class at_target_1_phase /// at_target_1_phase : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn at_initiator_1_phase /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== at_target_1_phase ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); //===================================================================== /// @brief Implementation of call from Initiator. // /// @details /// This is the ultimate destination of the nb_transport_fw call from /// the initiator after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum // sync status nb_transport_fw ( tlm::tlm_generic_payload &gp ///< generic payoad pointer , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &delay_time ///< time taken for transport ); //===================================================================== /// @fn at_target_1_phase::begin_response_method /// /// @brief Response Processing /// /// @details /// This routine takes transaction responses from the m_response_PEQ. /// It contains the state machine to manage the communication path /// back to the initiator. This method is registered as an SC_METHOD /// with the SystemC kernal and is sensitive to m_response_PEQ.get_event() //===================================================================== void begin_response_method ( void ); private: /// helper function for printing memory transactions void print_memory_transaction_helper ( const int &ID , std::ostringstream &partial_msg , tlm::tlm_generic_payload &trans ); //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Not implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); /// Not implemented for this example but required by interface unsigned int // result transport_dbg ( tlm::tlm_generic_payload &payload // debug payload ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm::tlm_target_socket<> m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays unsigned long m_request_count; ///< used to calc synch transactions bool m_nb_trans_fw_prev_warning; bool m_begin_resp_method_prev_warning; bool m_trans_dbg_prev_warning; bool m_get_dm_ptr_prev_warning; tlm_utils::peq_with_get m_response_PEQ; ///< response payload event queue memory m_target_memory; sc_core::sc_event m_end_resp_rcvd_event; }; #endif /* __AT_TARGET_1_PHASE_H__ */ systemc-2.3.4/examples/tlm/common/include/at_target_4_phase.h0000644000175000017500000001652714342422106024153 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_4_phase.h // /// @brief Four phase AT target only // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __AT_TARGET_4_PHASE_H__ #define __AT_TARGET_4_PHASE_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include "memory.h" // memory storage class at_target_4_phase /// at_target_4_phase : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn at_initiator_4_phase /// /// @brief Constructor for Four Phase AT target /// /// @details /// Generic Four Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== at_target_4_phase ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); //===================================================================== /// @brief Implementation of call from Initiator. // /// @details /// This is the ultimate destination of the nb_transport_fw call from /// the initiator after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum // sync status nb_transport_fw ( tlm::tlm_generic_payload &gp ///< generic payoad pointer , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &delay_time ///< time taken for transport ); //===================================================================== /// @fn at_target_4_phase::end_request_method /// /// @brief End Request Processing /// /// @details /// ???? //===================================================================== void end_request_method ( void ); //===================================================================== /// @fn at_target_4_phase::begin_response_method /// /// @brief Response Processing /// /// @details /// This routine takes transaction responses from the m_response_PEQ. /// It contains the state machine to manage the communication path /// back to the initiator. This method is registered as an SC_METHOD /// with the SystemC kernal and is sensitive to m_response_PEQ.get_event() //===================================================================== void begin_response_method ( void ); private: /// helper function for printing memory transactions void print_memory_transaction_helper ( const int &ID , std::ostringstream &partial_msg , tlm::tlm_generic_payload &trans ); //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Not implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); /// Not implemented for this example but required by interface unsigned int // result transport_dbg ( tlm::tlm_generic_payload &payload // debug payload ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer /// @todo Should this be the convenience scoket from utilities? /// for clarity and templated types with "con" in the title tlm::tlm_target_socket<> m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays bool m_nb_trans_fw_prev_warning; bool m_end_request_method_prev_warning; bool m_begin_resp_method_prev_warning; bool m_trans_dbg_prev_warning; bool m_get_dm_ptr_prev_warning; tlm_utils::peq_with_get m_end_request_PEQ; ///< response payload event queue sc_core::sc_event m_end_resp_rcvd_event; tlm_utils::peq_with_get m_response_PEQ; ///< response payload event queue memory m_target_memory; }; #endif /* __AT_TARGET_4_PHASE_H__ */ systemc-2.3.4/examples/tlm/common/include/extension_initiator_id.h0000644000175000017500000000520614342422106025340 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /*============================================================================== @file my_initiator_id_extension.h @brief This is a generic payload extension @details This module defines the gp extension for the example. In this example, we define an optional extension to be the string containing initiator ID. =============================================================================*/ /***************************************************************************** Original Authors: Charles Wilson, ESLX Anna Keist, ESLX Bill Bunton, ESLX *****************************************************************************/ #ifndef __EXTENSION_INITIATOR_ID_H__ #define __EXTENSION_INITIATOR_ID_H__ #include "tlm.h" ///< TLM header #include ///< standard string class extension_initiator_id ///< extension class : public tlm::tlm_extension ///< tlm extension { public: typedef tlm::tlm_base_protocol_types::tlm_payload_type tlm_payload_type; typedef tlm::tlm_base_protocol_types::tlm_phase_type tlm_phase_type; extension_initiator_id ///< constructor ( void ); ~extension_initiator_id ///< destructor ( void ); void copy_from ( const tlm_extension_base &extension ); tlm::tlm_extension_base* clone ///< clone operation ( void ) const; // member variables std::string m_initiator_id; ///< initiator ID string }; /* struct extension_initiator_id_payload_types { }; */ #endif /* __EXTENSION_INITIATOR_ID_H__ */ systemc-2.3.4/examples/tlm/common/include/at_initiator_annotated.h0000644000175000017500000001442714342422106025316 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file at_initiator_annotated.h // /// @brief This is a TLM AT initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // //============================================================================= #ifndef __AT_INITIATOR_ANNOTATED_H__ #define __AT_INITIATOR_ANNOTATED_H__ #include "tlm.h" // TLM headers #include // STL map #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO class at_initiator_annotated // TLM AT at_initiator_annotated : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_bw_transport_if<> /// inherit from TLM "backward interface" { SC_HAS_PROCESS(at_initiator_annotated); //============================================================================== // Ports, exports and Sockets //============================================================================== typedef tlm::tlm_generic_payload *gp_ptr; // generic payload public: sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; tlm::tlm_initiator_socket<> initiator_socket; //============================================================================= /// @fn at_initiator_annotated /// /// @brief Constructor for AT Initiator /// /// @details /// Generic AT Initiator used in several examples. /// Constructor offers several parameters for customization /// //============================================================================= at_initiator_annotated // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ); //============================================================================= /// @fn at_target_2_phase::initiator_thread /// /// @brief Initiator thread /// /// @details /// This thread takes generic payloads (gp) from the request FIFO that connects /// to the traffic generator and initiates. When the transaction completes the /// gp is placed in the response FIFO to return it to the traffic generator. //============================================================================= private: void initiator_thread (void); // initiator thread //============================================================================= /// @fn at_target_2_phase::send_end_rsp_method /// /// @brief Send end response method /// /// @details /// This routine takes transaction responses from the m_send_end_rsp_PEQ. /// It contains the state machine to manage the communication path to the /// targets. This method is registered as an SC_METHOD with the SystemC /// kernel and is sensitive to m_send_end_rsp_PEQ.get_event() //============================================================================= private: void send_end_rsp_method(void); // send end response method //============================================================================= /// @brief Implementation of call from targets. // /// @details /// This is the ultimate destination of the nb_transport_bw call from /// the targets after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum nb_transport_bw( // nb_transport tlm::tlm_generic_payload& transaction, // transaction tlm::tlm_phase& phase, // transaction phase sc_core::sc_time& time); // elapsed time //============================================================================== // Required but not implemented member methods //============================================================================== void invalidate_direct_mem_ptr( // invalidate_direct_mem_ptr sc_dt::uint64 start_range, // start range sc_dt::uint64 end_range); // end range //============================================================================== // Private member variables and methods //============================================================================== private: enum previous_phase_enum {Rcved_UPDATED_enum // Received TLM_UPDATED d ,Rcved_ACCEPTED_enum // Received ACCEPTED ,Rcved_END_REQ_enum // Received TLM_BEGIN_RESP }; typedef std::map waiting_bw_path_map; waiting_bw_path_map m_waiting_bw_path_map; // Wait backward path map sc_core::sc_event m_enable_next_request_event; tlm_utils::peq_with_get m_send_end_rsp_PEQ; // send end response PEq unsigned int m_ID; // initiator ID sc_core::sc_time m_end_rsp_delay; // end response delay }; #endif /* __AT_INITIATOR_ANNOTATED_H__ */ systemc-2.3.4/examples/tlm/common/include/at_initiator_temporal_decoupling.h0000644000175000017500000000727414342422106027377 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* --------------------------------------------------------------------------------------- @file at_initiator_temporal_decoupling.h @brief lt_iniator_temporal_decoupling class header Original Authors: Bill Bunton, ESLX Charles Wilson, ESLX --------------------------------------------------------------------------------------- */ #ifndef __AT_INITIATOR_TEMPORAL_DECOUPLING_H__ #define __AT_INITIATOR_TEMPORAL_DECOUPLING_H__ #include "tlm.h" ///< TLM headers #include ///< standard queue class at_initiator_temporal_decoupling ///< at_initiator_temporal_decoupling : public sc_core::sc_module ///< SC module , virtual public tlm::tlm_bw_nb_transport_if<> ///< initiator socket { SC_HAS_PROCESS(at_initiator_temporal_decoupling); // Ports, exports and Sockets typedef tlm::tlm_generic_payload *gp_ptr; public: sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; // Constructors / Destructor at_initiator_temporal_decoupling ///< constructor ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_core::sc_time end_rsp_delay ///< delay ); // Threads and Methods private: void initiator_thread ///< thread ( void ); // backward non-blocking transport method tlm::tlm_sync_enum ///< TLM phase nb_transport ///< nb_transport ( tlm::tlm_generic_payload &transaction ///< transaction , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &time ///< elapsed time ); // Required but unimplemented member methods void invalidate_direct_mem_ptr ///< invalidate_direct_mem_ptr ( sc_dt::uint64 start_range ///< start range , sc_dt::uint64 end_range ///< end range ); // Private member variables and methods private: tlm::tlm_quantumkeeper m_QuantumKeeper; ///< quantum keeper std::queue m_req_accepted_queue; ///< request accepted queue sc_core::sc_event m_req_accepted_event; ///< request accepted event const unsigned int m_ID; ///< initiator ID sc_core::sc_time m_end_rsp_delay; ///< end response delay public: tlm::tlm_initiator_socket<> initiator_socket; ///< initiator socket }; #endif /* __AT_INITIATOR_TEMPORAL_DECOUPLING_H__ */ systemc-2.3.4/examples/tlm/common/include/select_initiator.h0000644000175000017500000001443414342422106024132 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file select_initiator.h // /// @brief This is a TLM AT initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // //============================================================================= #ifndef __SELECT_INITIATOR_H__ #define __SELECT_INITIATOR_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include // STL map class select_initiator /// TLM AT select_initiator : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_bw_transport_if<> /// inherit from TLM "backward interface" { SC_HAS_PROCESS(select_initiator); //============================================================================== // Ports, exports and Sockets //============================================================================== typedef tlm::tlm_generic_payload *gp_ptr; // generic payload public: sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; tlm::tlm_initiator_socket<> initiator_socket; //============================================================================= /// @fn select_initiator /// /// @brief Constructor for AT Initiator /// /// @details /// Generic AT Initiator used in several examples. /// Constructor offers several parameters for customization /// //============================================================================= select_initiator // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ); //============================================================================= /// @fn at_target_2_phase::initiator_thread /// /// @brief Initiator thread /// /// @details /// This thread takes generic payloads (gp) from the request FIFO that connects /// to the traffic generator and initiates. When the transaction completes the /// gp is placed in the response FIFO to return it to the traffic generator. //============================================================================= private: void initiator_thread (void); // initiator thread //============================================================================= /// @fn at_target_2_phase::send_end_rsp_method /// /// @brief Send end response method /// /// @details /// This routine takes transaction responses from the m_send_end_rsp_PEQ. /// It contains the state machine to manage the communication path to the /// targets. This method is registered as an SC_METHOD with the SystemC /// kernel and is sensitive to m_send_end_rsp_PEQ.get_event() //============================================================================= private: void send_end_rsp_method(void); // send end response method //============================================================================= /// @brief Implementation of call from targets. // /// @details /// This is the ultimate destination of the nb_transport_bw call from /// the targets after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum nb_transport_bw( // nb_transport tlm::tlm_generic_payload& transaction, // transaction tlm::tlm_phase& phase, // transaction phase sc_core::sc_time& time); // elapsed time //============================================================================== // Required but not implemented member methods //============================================================================== void invalidate_direct_mem_ptr( // invalidate_direct_mem_ptr sc_dt::uint64 start_range, // start range sc_dt::uint64 end_range); // end range //============================================================================== // Private member variables and methods //============================================================================== private: enum previous_phase_enum {Rcved_UPDATED_enum // Received TLM_UPDATED d ,Rcved_ACCEPTED_enum // Received ACCEPTED ,Rcved_END_REQ_enum // Received TLM_BEGIN_RESP }; typedef std::map waiting_bw_path_map; waiting_bw_path_map m_waiting_bw_path_map; // Wait backward path map sc_core::sc_event m_enable_next_request_event; tlm_utils::peq_with_get m_send_end_rsp_PEQ; // send end response PEQ const unsigned int m_ID; // initiator ID const sc_core::sc_time m_end_rsp_delay; // end response delay bool m_enable_target_tracking; // ? remove }; #endif /* __SELECT_INITIATOR_H__ */ systemc-2.3.4/examples/tlm/common/include/lt_initiator.h0000644000175000017500000000714114342422106023267 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_initiator.h /// @brief This is Loosley Timed Initiator /// /// @Details /// This module implements only implements the blocking interface. /// The nb_transport_bw and invalidate_direct_memory_ptr are implemented /// within the covenience socket // //============================================================================== //============================================================================== // Original Authors: // Jack Donovan, ESLX // Anna Keist, ESLX //============================================================================== #ifndef __LT_INITIATOR_H__ #define __LT_INITIATOR_H__ #include "tlm.h" // TLM headers #include "tlm_utils/simple_initiator_socket.h" // TLM simple initiator socket class lt_initiator // lt_initiator : public sc_core::sc_module // module base class { public: // Constructor ================================================================= lt_initiator // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID ///< initiator ID ); // Method Declarations ========================================================= //============================================================================== /// @brief SC_THREAD that performs blocking call (lt call) // /// @details /// This SC_THREAD takes transactions from traffic generator via the /// sc_fifo attached to the request_in_port. Performs the blocking call. /// After completing the blocking call the transactions are returned to /// the traffic generator for checking via the response_out_port // //============================================================================== void initiator_thread (void); // Variable and Object Declarations ============================================ public: typedef tlm::tlm_generic_payload *gp_ptr; // generic payload tlm_utils::simple_initiator_socket initiator_socket; tlm_utils::simple_initiator_socket_optional initiator_socket_opt; sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; private: tlm::tlm_response_status gp_status; unsigned int m_ID; // initiator ID sc_core::sc_time m_end_rsp_delay; // end response delay }; #endif /* __LT_INITIATOR_H__ */ systemc-2.3.4/examples/tlm/common/include/lt_target.h0000644000175000017500000000757614342422106022567 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_target.h // /// @brief special target to illustrate dmi access to memory // //===================================================================== // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX //===================================================================== #ifndef __LT_TARGET_H__ #define __LT_TARGET_H__ #include "tlm.h" // TLM headers #include "memory.h" #include "tlm_utils/simple_target_socket.h" class lt_target : public sc_core::sc_module /// inherit from SC module base clase //, virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn lt_target /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== lt_target ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); private: /// b_transport() - Blocking Transport void // returns nothing custom_b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm_utils::simple_target_socket m_memory_socket; ///< target socket tlm_utils::simple_target_socket_optional m_optional_socket; ///< optional extra socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays memory m_target_memory; }; #endif /* __LT_TARGET_H__ */ systemc-2.3.4/examples/tlm/common/include/memory.h0000644000175000017500000001037114342422106022075 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file memory.h // /// @brief Object for isolationg memory operations from TLM "shell" // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // //============================================================================== #ifndef __MEMORY_H__ #define __MEMORY_H__ #include "tlm.h" // TLM headers class memory { // Member Methods ==================================================== memory(const memory&) /* = delete*/; memory& operator=(const memory&) /* = delete */; public: //===================================================================== /// @fn memory.h // /// @brief memory Constructor // /// @details // Initialize member variables, include allocating and initializing // the actual memory // //===================================================================== memory ( const unsigned int ID ///< initiator ID for messaging , sc_core::sc_time read_delay ///< delay for reads , sc_core::sc_time write_delay ///< delay for writes , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) ); //==================================================================== /// @fn operation /// /// @brief Performs the Memory Operation specified in the GP /// /// @details /// Performs the operation specified by the GP /// Returns after updating the status of the GP (if required) /// and updating the time based upon initialization parameters /// ///=================================================================== void operation( tlm::tlm_generic_payload &gp ///< TLM2 GP reference , sc_core::sc_time &delay_time ///< transaction delay ); //==================================================================== /// @fn get_delay /// /// @brief Looks at GP and returns delay without doing GP Operation /// /// @details /// Performs the operation specified by the GP /// Returns after updating the status of the GP (if required) /// and updating the time based upon initialization parameters /// ///=================================================================== void get_delay( tlm::tlm_generic_payload &gp ///< TLM2 GP reference , sc_core::sc_time &delay_time ///< time to be updated ); unsigned char* get_mem_ptr(void); private: /// Check the address vs. range passed at construction tlm::tlm_response_status check_address ( tlm::tlm_generic_payload &gp ); // Member Variables/Objects =================================================== private: const unsigned int m_ID; ///< initiator ID const sc_core::sc_time m_read_delay; ///< read delay const sc_core::sc_time m_write_delay; ///< write delay const sc_dt::uint64 m_memory_size; ///< memory size (bytes) const unsigned int m_memory_width; ///< memory width (bytes) unsigned char *m_memory; ///< memory bool m_previous_warning; ///< limits to one message }; #endif /* __MEMORY_H__ */ systemc-2.3.4/examples/tlm/common/include/at_initiator_explicit.h0000644000175000017500000001442014342422106025153 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file at_initiator_explicit.h // /// @brief This is a TLM AT initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // //============================================================================= #ifndef __AT_INITIATOR_EXPLICIT_H__ #define __AT_INITIATOR_EXPLICIT_H__ #include "tlm.h" // TLM headers #include // STL map #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO class at_initiator_explicit /// TLM AT at_initiator_explicit : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_bw_transport_if<> /// inherit from TLM "backward interface" { SC_HAS_PROCESS(at_initiator_explicit); //============================================================================== // Ports, exports and Sockets //============================================================================== typedef tlm::tlm_generic_payload *gp_ptr; // generic payload public: sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; tlm::tlm_initiator_socket<> initiator_socket; //============================================================================= /// @fn at_initiator_explicit /// /// @brief Constructor for AT Initiator /// /// @details /// Generic AT Initiator used in several examples. /// Constructor offers several parameters for customization /// //============================================================================= at_initiator_explicit // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ); //============================================================================= /// @fn at_target_2_phase::initiator_thread /// /// @brief Initiator thread /// /// @details /// This thread takes generic payloads (gp) from the request FIFO that connects /// to the traffic generator and initiates. When the transaction completes the /// gp is placed in the response FIFO to return it to the traffic generator. //============================================================================= private: void initiator_thread (void); // initiator thread //============================================================================= /// @fn at_target_2_phase::send_end_rsp_method /// /// @brief Send end response method /// /// @details /// This routine takes transaction responses from the m_send_end_rsp_PEQ. /// It contains the state machine to manage the communication path to the /// targets. This method is registered as an SC_METHOD with the SystemC /// kernel and is sensitive to m_send_end_rsp_PEQ.get_event() //============================================================================= private: void send_end_rsp_method(void); // send end response method //============================================================================= /// @brief Implementation of call from targets. // /// @details /// This is the ultimate destination of the nb_transport_bw call from /// the targets after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum nb_transport_bw( // nb_transport tlm::tlm_generic_payload& transaction, // transaction tlm::tlm_phase& phase, // transaction phase sc_core::sc_time& time); // elapsed time //============================================================================== // Required but not implemented member methods //============================================================================== void invalidate_direct_mem_ptr( // invalidate_direct_mem_ptr sc_dt::uint64 start_range, // start range sc_dt::uint64 end_range); // end range //============================================================================== // Private member variables and methods //============================================================================== private: enum previous_phase_enum {Rcved_UPDATED_enum // Received TLM_UPDATED d ,Rcved_ACCEPTED_enum // Received ACCEPTED ,Rcved_END_REQ_enum // Received TLM_BEGIN_RESP }; typedef std::map waiting_bw_path_map; waiting_bw_path_map m_waiting_bw_path_map; // Wait backward path map sc_core::sc_event m_enable_next_request_event; tlm_utils::peq_with_get m_send_end_rsp_PEQ; // send end response PEq unsigned int m_ID; // initiator ID sc_core::sc_time m_end_rsp_delay; // end response delay }; #endif /* __AT_INITIATOR_EXPLICIT_H__ */ systemc-2.3.4/examples/tlm/common/include/at_target_2_phase.h0000644000175000017500000001532214342422106024141 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_2_phase.h // /// @brief Single phase AT target // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __AT_TARGET_2_PHASE_H__ #define __AT_TARGET_2_PHASE_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include "memory.h" // memory storage class at_target_2_phase /// at_target_2_phase : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn at_initiator_1_phase /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== at_target_2_phase ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); //===================================================================== /// @brief Implementation of call from Initiator. // /// @details /// This is the ultimate destination of the nb_transport_fw call from /// the initiator after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum // sync status nb_transport_fw ( tlm::tlm_generic_payload &gp ///< generic payoad pointer , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &delay_time ///< time taken for transport ); //===================================================================== /// @fn at_target_2_phase::begin_response_method /// /// @brief Response Processing /// /// @details /// This routine takes transaction responses from the m_response_PEQ. /// It contains the state machine to manage the communication path /// back to the initiator. This method is registered as an SC_METHOD /// with the SystemC kernal and is sensitive to m_response_PEQ.get_event() //===================================================================== void begin_response_method ( void ); private: /// helper function for printing memory transactions void print_memory_transaction_helper ( const int &ID , std::ostringstream &partial_msg , tlm::tlm_generic_payload &trans ); //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Not implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); /// Not implemented for this example but required by interface unsigned int // result transport_dbg ( tlm::tlm_generic_payload &payload // debug payload ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm::tlm_target_socket<> m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays unsigned long m_request_count; ///< used to calc synch transactions bool m_nb_trans_fw_prev_warning; bool m_begin_resp_method_prev_warning; bool m_trans_dbg_prev_warning; bool m_get_dm_ptr_prev_warning; tlm_utils::peq_with_get m_response_PEQ; ///< response payload event queue memory m_target_memory; sc_core::sc_event m_end_resp_rcvd_event; }; #endif /* __AT_TARGET_2_PHASE_H__ */ systemc-2.3.4/examples/tlm/common/include/at_target_1_phase.h0000644000175000017500000001532214342422106024140 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_1_phase.h // /// @brief Single phase AT target // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __AT_TARGET_1_PHASE_H__ #define __AT_TARGET_1_PHASE_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include "memory.h" // memory storage class at_target_1_phase /// at_target_1_phase : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn at_initiator_1_phase /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== at_target_1_phase ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); //===================================================================== /// @brief Implementation of call from Initiator. // /// @details /// This is the ultimate destination of the nb_transport_fw call from /// the initiator after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum // sync status nb_transport_fw ( tlm::tlm_generic_payload &gp ///< generic payoad pointer , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &delay_time ///< time taken for transport ); //===================================================================== /// @fn at_target_1_phase::begin_response_method /// /// @brief Response Processing /// /// @details /// This routine takes transaction responses from the m_response_PEQ. /// It contains the state machine to manage the communication path /// back to the initiator. This method is registered as an SC_METHOD /// with the SystemC kernal and is sensitive to m_response_PEQ.get_event() //===================================================================== void begin_response_method ( void ); private: /// helper function for printing memory transactions void print_memory_transaction_helper ( const int &ID , std::ostringstream &partial_msg , tlm::tlm_generic_payload &trans ); //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Not implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); /// Not implemented for this example but required by interface unsigned int // result transport_dbg ( tlm::tlm_generic_payload &payload // debug payload ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm::tlm_target_socket<> m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays unsigned long m_request_count; ///< used to calc synch transactions bool m_nb_trans_fw_prev_warning; bool m_begin_resp_method_prev_warning; bool m_trans_dbg_prev_warning; bool m_get_dm_ptr_prev_warning; tlm_utils::peq_with_get m_response_PEQ; ///< response payload event queue memory m_target_memory; sc_core::sc_event m_end_resp_rcvd_event; }; #endif /* __AT_TARGET_1_PHASE_H__ */ systemc-2.3.4/examples/tlm/common/include/traffic_generator.h0000644000175000017500000001444014342422106024252 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file traffic_generator.h // /// @brief traffic_generator class header // //===================================================================== // Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //==================================================================== #ifndef __TRAFFIC_GENERATOR_H__ #define __TRAFFIC_GENERATOR_H__ #include "tlm.h" // TLM headers #include // queue header from std lib class traffic_generator // traffic_generator : public sc_core::sc_module // sc_module { // Member Methods ==================================================== public: //============================================================================= /// @fn traffic_generator // /// @brief traffic_generator constructor // /// @details /// Initializes Traffice Generator iIncluding active transaction count // //============================================================================= traffic_generator ( sc_core::sc_module_name name ///< module name for SC , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); //============================================================================= /// @fn traffic_generator_thread // /// @brief traffic_generator processing thread // /// @details /// Method actually called by SC simulator to generate and /// check traffic. Generate Writes then Reads to check the /// Writes // //============================================================================= void traffic_generator_thread ( void ); //----------------------------------------------------------------------------- // Check Complete method void check_complete (void); //----------------------------------------------------------------------------- // Check All Complete method void check_all_complete (void); // memory manager (queue) static const unsigned int m_txn_data_size = 4; // transaction size class tg_queue_c /// memory managed queue class : public tlm::tlm_mm_interface /// implements memory management IF { public: tg_queue_c /// tg_queue_c constructor ( void ) { } void enqueue /// enqueue entry (create) ( void ) { tlm::tlm_generic_payload *transaction_ptr = new tlm::tlm_generic_payload ( this ); /// transaction pointer unsigned char *data_buffer_ptr = new unsigned char [ m_txn_data_size ]; /// data buffer pointer transaction_ptr->set_data_ptr ( data_buffer_ptr ); m_queue.push ( transaction_ptr ); } tlm::tlm_generic_payload * /// transaction pointer dequeue /// dequeue entry ( void ) { tlm::tlm_generic_payload *transaction_ptr = m_queue.front (); m_queue.pop(); return transaction_ptr; } void release /// release entry ( tlm::tlm_generic_payload *transaction_ptr /// transaction pointer ) { transaction_ptr->release (); } bool /// true / false is_empty /// queue empty ( void ) { return m_queue.empty (); } size_t /// queue size size /// queue size ( void ) { return m_queue.size (); } void free /// return transaction ( tlm::tlm_generic_payload *transaction_ptr /// to the pool ) { transaction_ptr->reset(); m_queue.push ( transaction_ptr ); } private: std::queue m_queue; /// queue }; //============================================================================= // Member Variables private: typedef tlm::tlm_generic_payload *gp_ptr; // pointer to a generic payload const unsigned int m_ID; // initiator ID sc_dt::uint64 m_base_address_1; // first base address sc_dt::uint64 m_base_address_2; // second base address tg_queue_c m_transaction_queue; // transaction queue unsigned int m_active_txn_count; // active transaction count bool m_check_all; public: /// Port for requests to the initiator sc_core::sc_port > request_out_port; /// Port for responses from the initiator sc_core::sc_port > response_in_port; }; #endif /* __TRAFFIC_GENERATOR_H__ */ systemc-2.3.4/examples/tlm/common/include/lt_dmi_target.h0000644000175000017500000001131714342422106023404 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_dmi_target.h // /// @brief special target to illustrate dmi access to memory // //===================================================================== // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX //===================================================================== #ifndef __LT_DMI_TARGET_H__ #define __LT_DMI_TARGET_H__ #include "tlm.h" // TLM headers #include "memory.h" #include "tlm_utils/simple_target_socket.h" class lt_dmi_target : public sc_core::sc_module /// inherit from SC module base clase { // Member Methods ===================================================== public: //===================================================================== /// @fn lt_dmi_target /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== lt_dmi_target ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) , const sc_core::sc_time start_dmi_delay = sc_core::sc_time(100,sc_core::SC_NS) , const sc_core::sc_time dmi_duration = sc_core::sc_time(1000,sc_core::SC_NS) ); void toggle_dmi_method(void); private: //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing custom_b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm_utils::simple_target_socket m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays bool m_dmi_enabled; const sc_core::sc_time m_start_dmi_delay; const sc_core::sc_time m_dmi_duration; sc_dt::uint64 m_start_address; sc_dt::uint64 m_end_address; sc_core::sc_event m_end_resp_rcvd_event; unsigned int m_toggle_count; const unsigned int m_max_dmi_toggle_count; memory m_target_memory; }; #endif /* __LT_DMI_TARGET_H__ */ systemc-2.3.4/examples/tlm/common/include/reporting.h0000644000175000017500000001526414342422106022604 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* * @file * reporting.h * * @brief * Convenience macros to simplify reporting. */ /***************************************************************************** Original Authors: Charles Wilson, ESLX Bill Bunton, ESLX *****************************************************************************/ #ifndef __REPORTING_H__ #define __REPORTING_H__ #include "tlm.h" ///< TLM headers #include ///< string streams #include ///< I/O manipulation #include ///< standard I/O using std::setfill; using std::setw; using namespace std; #if ( defined ( REPORT_DEFINE_GLOBALS ) ) # define RDG_EXTERN #else /* REPORT_DEFINE_GLOBALS */ # define RDG_EXTERN extern #endif /* REPORT_DEFINE_GLOBALS */ RDG_EXTERN bool tlm_enable_info_reporting; ///< info level reporting enable RDG_EXTERN bool tlm_enable_warning_reporting; ///< warning level reporting enable RDG_EXTERN bool tlm_enable_error_reporting; ///< error level reporting enable RDG_EXTERN bool tlm_enable_fatal_reporting; ///< fatal level reporting enable RDG_EXTERN ostringstream reporting_os; ///< reporting output string #define REPORT_ENABLE_INFO_REPORTING() (tlm_enable_info_reporting = true) #define REPORT_ENABLE_WARNING_REPORTING() (tlm_enable_warning_reporting = true) #define REPORT_ENABLE_ERROR_REPORTING() (tlm_enable_error_reporting = true) #define REPORT_ENABLE_FATAL_REPORTING() (tlm_enable_fatal_reporting = true) #define REPORT_DISABLE_INFO_REPORTING() (tlm_enable_info_reporting = false) #define REPORT_DISABLE_WARNING_REPORTING() (tlm_enable_warning_reporting = false) #define REPORT_DISABLE_ERROR_REPORTING() (tlm_enable_error_reporting = false) #define REPORT_DISABLE_FATAL_REPORTING() (tlm_enable_fatal_reporting = false) #define REPORT_SET_ENABLES(ri,rw,re,rf) \ { \ if (ri) {REPORT_ENABLE_INFO_REPORTING ();} else {REPORT_DISABLE_INFO_REPORTING ();} \ if (rw) {REPORT_ENABLE_WARNING_REPORTING ();} else {REPORT_DISABLE_WARNING_REPORTING ();} \ if (re) {REPORT_ENABLE_ERROR_REPORTING ();} else {REPORT_DISABLE_ERROR_REPORTING ();} \ if (rf) {REPORT_ENABLE_FATAL_REPORTING ();} else {REPORT_DISABLE_FATAL_REPORTING ();} \ } #define REPORT_ENABLE_ALL_REPORTING() \ { \ REPORT_SET_ENABLES(true,true,true,true); \ } #define REPORT_DISABLE_ALL_REPORTING() \ { \ REPORT_SET_ENABLES(false,false,false,false); \ } #if ( defined ( REPORTING_OFF ) ) #define REPORT_NEW(text) {} #define REPORT_APPEND(text) {} #define REPORT_OUTPUT(severity, source) {} #else /* REPORTING_OFF */ #define REPORT_NEW(text) \ { \ reporting_os.str (""); \ reporting_os << text; \ } #define REPORT_APPEND(text) \ { \ reporting_os << text; \ } #define REPORT_OUTPUT(severity, source) \ { \ ostringstream os; \ os << sc_core::sc_time_stamp() << " - " << __FUNCTION__ << endl << " " << reporting_os.str(); \ SC_REPORT_##severity (source, os.str().c_str()); \ } #endif /* REPORTING_OFF */ #define REPORT_INFO(source, routine, text) \ { ostringstream os; \ string routine_string (routine); \ int colon_location; \ if ((colon_location = routine_string.find("::")) != -1) \ { \ routine_string.erase(0, colon_location + 2); \ } \ os << sc_core::sc_time_stamp() << " - " << routine_string << endl << " " << text; \ if (tlm_enable_info_reporting) \ { \ SC_REPORT_INFO(source, os.str().c_str()); \ } \ } #define REPORT_WARNING(source, routine, text) \ { ostringstream os; \ string routine_string (routine); \ int colon_location; \ if ((colon_location = routine_string.find("::")) != -1) \ { \ routine_string.erase(0, colon_location + 2); \ } \ os << sc_core::sc_time_stamp() << " - " << routine_string << endl << " " << text; \ if (tlm_enable_warning_reporting) \ { \ SC_REPORT_WARNING(source, os.str().c_str()); \ } \ } #define REPORT_ERROR(source, routine, text) \ { ostringstream os; \ string routine_string (routine); \ int colon_location; \ if ((colon_location = routine_string.find("::")) != -1) \ { \ routine_string.erase(0, colon_location + 2); \ } \ os << sc_core::sc_time_stamp() << " - " << routine_string << endl << " " << text; \ if (tlm_enable_error_reporting) \ { \ SC_REPORT_ERROR(source, os.str().c_str()); \ } \ } #define REPORT_FATAL(source, routine, text) \ { ostringstream os; \ string routine_string (routine); \ int colon_location; \ if ((colon_location = routine_string.find("::")) != -1) \ { \ routine_string.erase(0, colon_location + 2); \ } \ os << sc_core::sc_time_stamp() << " - " << routine_string << endl << " " << text; \ if (tlm_enable_fatal_reporting) \ { \ SC_REPORT_FATAL(source, os.str().c_str()); \ } \ } namespace report { std::string print (const tlm::tlm_sync_enum status); std::string print (const tlm::tlm_phase phase); std::string print (const tlm::tlm_response_status); void print ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_generic_payload &trans ///< transaction to be printed , const char* calling_filename= "print.cpp" ); void print_full ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_generic_payload &trans ///< transaction to be printed , const char* filename = "print.cpp" ); void print ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_dmi &dmi_parameters ///< dmi transaction to be printed , const char* calling_filename = "print.cpp" ); } #endif /* __REPORTING_H__ */ systemc-2.3.4/examples/tlm/common/include/lt_td_initiator.h0000644000175000017500000000714014342422106023755 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_td_initiator.h /// @brief This is Loosley Timed Initiator /// /// @Details /// This module implements only implements the blocking interface. /// The nb_transport_bw and invalidate_direct_memory_ptr are implemented /// within the covenience socket // //============================================================================== //============================================================================== // Original Authors: // Jack Donovan, ESLX // Anna Keist, ESLX //============================================================================== #ifndef __LT_TD_INITIATOR_H__ #define __LT_TD_INITIATOR_H__ #include "tlm.h" // TLM headers #include "tlm_utils/tlm_quantumkeeper.h" #include "tlm_utils/simple_initiator_socket.h" class lt_td_initiator // lt_td_initiator : public sc_core::sc_module // module base class { public: // Constructor ================================================================= lt_td_initiator // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID ///< initiator ID ); // Method Declarations ========================================================= //============================================================================== /// @brief SC_THREAD that performs blocking call (lt call) // /// @details /// This SC_THREAD takes transactions from traffic generator via the /// sc_fifo attached to the request_in_port. Performs the blocking call. /// After completing the blocking call the transactions are returned to /// the traffic generator for checking via the response_out_port // //============================================================================== void initiator_thread (void); // Variable and Object Declarations ============================================ public: typedef tlm::tlm_generic_payload *gp_ptr; // generic payload tlm_utils::simple_initiator_socket initiator_socket; sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; sc_core::sc_time m_delay; private: tlm::tlm_response_status gp_status; unsigned int m_ID; // initiator ID sc_core::sc_time m_end_rsp_delay; // end response delay tlm_utils::tlm_quantumkeeper m_quantum_keeper; }; #endif /* __LT_TD_INITIATOR_H__ */ systemc-2.3.4/examples/tlm/common/include/lt_dmi_initiator.h0000644000175000017500000000763714342422106024132 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_dmi_initiator.h /// @brief This is Loosley Timed Initiator /// /// @Details /// This module implements only implements the blocking interface. /// The nb_transport_bw and invalidate_direct_memory_ptr are implemented /// within the covenience socket // //============================================================================== //============================================================================== // Original Authors: // Jack Donovan, ESLX // Anna Keist, ESLX //============================================================================== #ifndef __LT_DMI_INITIATOR_H__ #define __LT_DMI_INITIATOR_H__ #include "tlm.h" // TLM headers #include "dmi_memory.h" #include "tlm_utils/simple_initiator_socket.h" class lt_dmi_initiator // lt_dmi_initiator : public sc_core::sc_module // module base class // , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { public: // Constructor ================================================================= lt_dmi_initiator // constructor ( sc_core::sc_module_name name // module name , const unsigned int ID ///< initiator ID ); // Method Declarations ========================================================= //============================================================================== /// @brief SC_THREAD that performs blocking call (lt call) // /// @details /// This SC_THREAD takes transactions from traffic generator via the /// sc_fifo attached to the request_in_port. Performs the blocking call. /// After completing the blocking call the transactions are returned to /// the traffic generator for checking via the response_out_port // //============================================================================== void initiator_thread (void); void custom_invalidate_dmi_ptr // invalidate_direct_mem_ptr ( sc_dt::uint64 start_range // start range , sc_dt::uint64 end_range // end range ); // Variable and Object Declarations ============================================ public: typedef tlm::tlm_generic_payload *gp_ptr; // generic payload tlm_utils::simple_initiator_socket initiator_socket; sc_core::sc_port > request_in_port; sc_core::sc_port > response_out_port; private: tlm::tlm_response_status m_gp_status; unsigned int m_ID; // initiator ID sc_core::sc_time m_end_rsp_delay; // end response delay dmi_memory m_dmi_memory; tlm::tlm_dmi m_dmi_properties; sc_dt::uint64 m_address; }; #endif /* __LT_DMI_INITIATOR_H__ */ systemc-2.3.4/examples/tlm/common/include/dmi_memory.h0000644000175000017500000001054414342422106022730 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file dmi_memory.h // /// @brief performs dmi "housekeeping" and actual reads and writes // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // //============================================================================== #ifndef __DMI_MEMORY_H__ #define __DMI_MEMORY_H__ #include "tlm.h" // TLM headers class dmi_memory { // Member Methods ============================================================= public: //============================================================================== /// @fn dmi_memory.h // /// @brief Constructor // //============================================================================== dmi_memory ( const unsigned int ID ///< initiator ID for messaging ); //============================================================================= /// @fn operation /// /// @brief Performs the DMI based Memory Operation specified in the GP /// /// @details /// Performs the operation specified by the GP /// Returns after updating the status of the GP (if required) /// and updating the time based upon initialization parameters /// ///=================================================================== void operation ( tlm::tlm_generic_payload &gp ///< TLM2 GP reference , sc_core::sc_time &delay_time ///< transaction delay ); //============================================================================= /// @fn load_dmi_ptr // /// @brief Configures the internal data structures with the DMI object // ///============================================================================ void load_dmi_ptr ( tlm::tlm_dmi &dmi_parameters ); //============================================================================ /// @fn invalidate_dmi_ptr // /// @brief Invalidates a dmi pointer associated with an address range // ///=========================================================================== void invalidate_dmi_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); //============================================================================ /// @fn is_address_dmi // /// @brief Checks the address in the gp to see if in range of a dmi pointer // ///=========================================================================== bool is_address_dmi ( tlm::tlm_generic_payload &gp ); // Member Variables private: unsigned int m_ID; ///< initiator ID unsigned char *m_data; unsigned int m_length; sc_dt::uint64 m_dmi_size; sc_dt::uint64 m_offset; sc_dt::uint64 m_address; sc_core::sc_time m_dmi_read_latency; sc_core::sc_time m_dmi_write_latency; sc_dt::uint64 m_dmi_base_address; tlm::tlm_command m_command; unsigned char *m_dmi_ptr; sc_dt::uint64 m_start_address; sc_dt::uint64 m_end_address; bool m_is_dmi_flag; tlm::tlm_dmi::dmi_access_e m_granted_access; }; #endif /* __DMI_MEMORY_H__ */ systemc-2.3.4/examples/tlm/common/src/0000755000175000017500000000000014342422106017556 5ustar carstencarstensystemc-2.3.4/examples/tlm/common/src/at_target_1_phase_dmi.cpp0000644000175000017500000003311714342422106024472 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_1_phase.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Charles Wilson, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_target_1_phase.h" // our header #include "reporting.h" // reporting macros //#include using namespace std; static const char *filename = "at_target_1_phase.cpp"; ///< filename for reporting SC_HAS_PROCESS(at_target_1_phase); ///Constructor at_target_1_phase::at_target_1_phase ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_request_count (1) /// init request count , m_nb_trans_fw_prev_warning(false) , m_begin_resp_method_prev_warning(false) , m_trans_dbg_prev_warning(false) , m_get_dm_ptr_prev_warning(false) , m_response_PEQ ("response_PEQ") , m_target_memory /// init target's memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { /// Bind the socket's export to the interface m_memory_socket(*this); /// Register begin_reponse as an SC_METHOD /// Used to implement force synchronization multiple timing points SC_METHOD(begin_response_method); sensitive << m_response_PEQ.get_event(); dont_initialize(); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void at_target_1_phase::b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload, mem_op_time); msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================= // nb_transport_fw implementation calls from initiators // //============================================================================= tlm::tlm_sync_enum // synchronization state at_target_1_phase::nb_transport_fw // non-blocking transport call through Bus ( tlm::tlm_generic_payload &gp // generic payoad pointer , tlm::tlm_phase &phase // transaction phase , sc_core::sc_time &delay_time) // time it should take for transport { std::ostringstream msg; // log message msg.str(""); msg << "Target: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay_time << ")"; tlm::tlm_sync_enum return_status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // decode phase argument //----------------------------------------------------------------------------- switch (phase) { //============================================================================= case tlm::BEGIN_REQ: { /// Generate frorced synchronization response every 20th request if(m_request_count++ % 20) //----------------------------------------------------------------------------- // AT single timing point forced by returning TLM_COMPLETED //----------------------------------------------------------------------------- { REPORT_INFO(filename, __FUNCTION__, msg.str()); m_target_memory.operation(gp, delay_time); // perform memory operation now delay_time += m_accept_delay; return_status = tlm::TLM_COMPLETED; // indicate end of transaction msg.str(""); msg << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // end AT single timing point //----------------------------------------------------------------------------- // Force synchronization multiple timing points by returning TLM_ACCEPTED // use a payload event queue to schedule BEGIN_RESP timing point //----------------------------------------------------------------------------- else { m_target_memory.get_delay(gp, delay_time); // get memory operation delay delay_time += m_accept_delay; m_response_PEQ.notify(gp, delay_time); // put transaction in the PEQ delay_time = m_accept_delay; phase = tlm::END_REQ; // advance txn state to end request return_status = tlm::TLM_UPDATED; // force synchronization msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); } break; } // end BEGIN_REQ //============================================================================= case tlm::END_RESP: { m_end_resp_rcvd_event.notify (sc_core::SC_ZERO_TIME); return_status = tlm::TLM_COMPLETED; // indicate end of transaction break; } //============================================================================= case tlm::END_REQ: case tlm::BEGIN_RESP: { msg << "Target: " << m_ID << " Illegal phase received by target -- END_REQ or BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_ACCEPTED; break; } //============================================================================= default: { return_status = tlm::TLM_ACCEPTED; if(!m_nb_trans_fw_prev_warning) { msg << "Target: " << m_ID << " default phase encountered"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_nb_trans_fw_prev_warning = true; break; } } return return_status; } //end nb_transport_fw //============================================================================= /// begin_response method function implementation // // This method is statically sensitive to m_response_PEQ.get_event // //============================================================================= void at_target_1_phase::begin_response_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer msg.str(""); tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_response_PEQ.get_next_transaction()) != NULL) { sc_core::sc_time dummy_t = sc_core::SC_ZERO_TIME; /// perform memory operation now m_target_memory.operation(*transaction_ptr, dummy_t); tlm::tlm_phase phase = tlm::BEGIN_RESP; sc_core::sc_time delay = sc_core::SC_ZERO_TIME; msg << "Target: " << m_ID << " nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME)" << endl << " "; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase BEGIN_RESP check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg << "Target: " << m_ID << " " << report::print(status) << "(GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); switch (status) { //============================================================================= case tlm::TLM_COMPLETED: { next_trigger (delay); // add comments ??? return; break; } //============================================================================= case tlm::TLM_ACCEPTED: { next_trigger (m_end_resp_rcvd_event); // add comments ??? return; break; } //============================================================================= case tlm::TLM_UPDATED: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to BEGIN_RESP"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } //============================================================================= default: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " undefined return status "; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } }// end switch } // end while next_trigger (m_response_PEQ.get_event()); } //end begin_response_queue_active //============================================================================== // Methods Required by Target Interface but not Implemented for this Example // Not implemented for this example but required by interface bool at_target_1_phase::get_direct_mem_ptr (tlm::tlm_generic_payload & /*payload*/, ///< address + extensions tlm::tlm_dmi & /*data*/ ///< dmi data ) { // THis is not a fatal, print first as warning std::ostringstream msg; msg.str(""); if(!m_get_dm_ptr_prev_warning) { msg << "Target: " << m_ID << " DMI not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_get_dm_ptr_prev_warning = true; return false; } // Not implemented for this example but required by interface unsigned int // result at_target_1_phase::transport_dbg ( tlm::tlm_generic_payload & /*payload*/ ///< debug payload ) { std::ostringstream msg; msg.str(""); if(!m_trans_dbg_prev_warning) { msg << "Target: " << m_ID << " DBG(debug) not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_trans_dbg_prev_warning = true; return false; } systemc-2.3.4/examples/tlm/common/src/lt_dmi_initiator.cpp0000644000175000017500000001742014342422106023620 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_dmi_initiator.cpp /// @Details /// /// //============================================================================== // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX //============================================================================== //==================================================================== // Nov 06, 2008 // // Updated by: // Xiaopeng Qiu, JEDA Technologies, Inc // Email: qiuxp@jedatechnologies.net // // To fix violations of TLM2.0 rules, which are detected by JEDA // TLM2.0 checker. // //==================================================================== #include "reporting.h" ///< Reporting convenience macros #include "lt_dmi_initiator.h" ///< Our header #include "tlm.h" ///< TLM headers using namespace sc_core; static const char *filename = "lt_dmi_initiator.cpp"; ///< filename for reporting //============================================================================== /// @fn lt_dmi_initiator::lt_dmi_initiator /// /// @brief class constructor /// /// @details /// This is the class constructor. /// //============================================================================== SC_HAS_PROCESS(lt_dmi_initiator); lt_dmi_initiator::lt_dmi_initiator // constructor ( sc_module_name name // module name , const unsigned int ID // initiator ID ) : sc_module (name) // module instance name , initiator_socket ("initiator_socket") // initiator socket , m_ID (ID) // initialize initiator ID , m_dmi_memory (ID) { // bind initiator to the export // initiator_socket (*this); initiator_socket.register_invalidate_direct_mem_ptr ( this , <_dmi_initiator::custom_invalidate_dmi_ptr); // register thread process SC_THREAD(initiator_thread); } /*============================================================================== /// @fn lt_dmi_initiator::initiator_thread /// /// @brief initiates non-blocking transport /// /// @details /// ==============================================================================*/ void lt_dmi_initiator::initiator_thread(void) ///< initiator thread { tlm::tlm_generic_payload *gp_ptr; ///< transaction pointer std::ostringstream msg; ///< log message while (true) { // Read transaction from input port gp_ptr = request_in_port->read(); // get request from input fifo msg.str(""); sc_time delay = SC_ZERO_TIME; // Create delay objects msg << "Initiator: " << m_ID << " b_transport with delay of " << delay << ");"; REPORT_INFO(filename, __FUNCTION__, msg.str()); if(!(m_dmi_memory.is_address_dmi(*gp_ptr))) { // Not a dmi transaction ================================================= m_address = gp_ptr->get_address(); gp_ptr->set_dmi_allowed(false); initiator_socket->b_transport(*gp_ptr, delay); // report::print(m_ID, *gp_ptr); m_gp_status = gp_ptr->get_response_status(); if(m_gp_status == tlm::TLM_OK_RESPONSE) { msg.str(""); msg << "Initiator: " << m_ID << " b_transport returned a delay of " << delay; REPORT_INFO(filename, __FUNCTION__, msg.str()); wait(delay); msg.str(""); msg << "Initiator: " << m_ID << " gp_tpr was returned with dmi_allowed set to " << gp_ptr->is_dmi_allowed(); REPORT_INFO(filename, __FUNCTION__, msg.str()); } else { msg << "Initiator: " << m_ID << "Bad GP status returned = " << m_gp_status; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } // Set up for potential dmi utilization for next transaction if(gp_ptr->is_dmi_allowed()) { msg.str(""); msg << "Initiator: " << m_ID << " set up dmi for next access to this target" << endl << " "; // reset address in case it was mutated gp_ptr->set_address(m_address); msg << "Initiator: " << m_ID << " requesting DMI pointer"; REPORT_INFO(filename, __FUNCTION__, msg.str()); m_dmi_properties.init(); if(initiator_socket->get_direct_mem_ptr(*gp_ptr,m_dmi_properties)) { m_dmi_memory.load_dmi_ptr(m_dmi_properties); } else { msg.str(""); msg << "Initiator: " << m_ID << " DMI access refused even though dmi_allowed was set"; REPORT_INFO(filename, __FUNCTION__, msg.str()); }//end else }// end if dmi_allowed }//end if else // dmi transaction ==================================================== { m_dmi_memory.operation(*gp_ptr, delay); m_gp_status = gp_ptr->get_response_status(); if(m_gp_status == tlm::TLM_OK_RESPONSE) { msg.str(""); msg << "Initiator: " << m_ID << " dmi based transaction returned a delay of " << delay; REPORT_INFO(filename, __FUNCTION__, msg.str()); wait(delay); } else { msg << "Initiator: " << m_ID << "Unknown GP status " << report::print(m_gp_status) << " returned from DMI-based transaction "; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } }//end else msg.str(""); msg << "Initiator: " << m_ID << " End of processing"; REPORT_INFO(filename, __FUNCTION__, msg.str()); response_out_port->write(gp_ptr); // return txn to traffic gen } // end while true } // end initiator_thread void lt_dmi_initiator::custom_invalidate_dmi_ptr // invalidate_direct_mem_ptr ( sc_dt::uint64 start_range // start range , sc_dt::uint64 end_range // end range ) { // std::ostringstream msg; // msg.str(""); // msg << "Initiator: " << m_ID // << " invalidate_direct_mem_ptr (" // << start_range << " , " << end_range << ");"; // REPORT_INFO(filename, __FUNCTION__, msg.str()); m_dmi_memory.invalidate_dmi_ptr(start_range, end_range); return; } systemc-2.3.4/examples/tlm/common/src/lt_dmi_target.cpp0000644000175000017500000001672714342422106023115 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_dmi_target.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Jack Donovan, ESLX // //===================================================================== #include "lt_dmi_target.h" // our header #include "reporting.h" // reporting macros using namespace std; static const char *filename = "lt_dmi_target.cpp"; ///< filename for reporting SC_HAS_PROCESS(lt_dmi_target); ///Constructor lt_dmi_target::lt_dmi_target ( sc_core::sc_module_name module_name ///< module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME) , const sc_core::sc_time start_dmi_delay ///< start of dmi transactions , const sc_core::sc_time dmi_duration ///< duration of dmi transactions ) : sc_module ( module_name ) ///< init module name , m_memory_socket ( memory_socket ) ///< init socket name , m_ID ( ID ) ///< init target ID , m_memory_size ( memory_size ) ///< init memory size (bytes) , m_memory_width ( memory_width ) ///< init memory width (bytes) , m_accept_delay ( accept_delay ) ///< init accept delay , m_read_response_delay ( read_response_delay ) ///< init read response delay , m_write_response_delay ( write_response_delay ) ///< init write response delay , m_dmi_enabled ( true ) , m_start_dmi_delay ( start_dmi_delay ) , m_dmi_duration ( dmi_duration ) , m_start_address ( 0 ) , m_end_address ( memory_size ) , m_toggle_count ( 0 ) , m_max_dmi_toggle_count ( 3 ) , m_target_memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) ///< target memory { SC_METHOD(toggle_dmi_method); m_memory_socket.register_b_transport(this, <_dmi_target::custom_b_transport); m_memory_socket.register_get_direct_mem_ptr(this, <_dmi_target::get_direct_mem_ptr); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void lt_dmi_target::custom_b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { sc_core::sc_time mem_op_time; std::ostringstream msg; msg.str(""); m_target_memory.operation(payload, mem_op_time); if(m_dmi_enabled) { payload.set_dmi_allowed(true); msg << "Target: " << m_ID << " has set dmi_allowed " << endl << " "; } else { payload.set_dmi_allowed(false); } msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } bool lt_dmi_target::get_direct_mem_ptr ( tlm::tlm_generic_payload &gp ///< address + extensions , tlm::tlm_dmi &dmi_properties ///< dmi data ) { std::ostringstream msg; msg.str(""); sc_dt::uint64 address = gp.get_address(); // First check to see if we are "open" to a dmi if(!m_dmi_enabled) { msg << "Target: " << m_ID << " DMI not enabled, not expecting call "; REPORT_INFO(filename, __FUNCTION__, msg.str()); } else { // dmi processing if (address < m_end_address+1) // check that address is in our range { // set up dmi properties object ====================================== dmi_properties.allow_read_write ( ); dmi_properties.set_start_address ( m_start_address ); dmi_properties.set_end_address ( m_end_address ); dmi_properties.set_dmi_ptr ( m_target_memory.get_mem_ptr () ); dmi_properties.set_read_latency ( m_read_response_delay ); dmi_properties.set_write_latency ( m_write_response_delay ); msg << "Target: " << m_ID << " passing DMI pointer back to initiator"; REPORT_INFO(filename, __FUNCTION__, msg.str()); return true; } else { msg << "Target: " << m_ID << " DMI pointer request for address= " << address << " max address for this target = " << m_end_address+1; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // end else } // end else return false; } // end get_direct_mem_ptr void lt_dmi_target::toggle_dmi_method (void ) { std::ostringstream msg; msg.str(""); m_toggle_count++; if (m_dmi_enabled) { m_dmi_enabled = false; msg << "Target: " << m_ID << " invalidate_direct_ptr " << "(" << m_start_address << ", " << m_end_address << ");"; REPORT_INFO(filename, __FUNCTION__, msg.str()); m_memory_socket->invalidate_direct_mem_ptr(m_start_address, m_end_address ); next_trigger(m_start_dmi_delay); } else { m_dmi_enabled = true; next_trigger(m_dmi_duration); msg << "Target: " << m_ID << " DMI has been enabled in this target"; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // Don't execute again if(m_toggle_count >= m_max_dmi_toggle_count) { next_trigger(); m_dmi_enabled = false; } } systemc-2.3.4/examples/tlm/common/src/select_initiator.cpp0000644000175000017500000004607414342422106023636 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================= /// @file select_initiator.cpp /// @Details Implements a AT non blocking initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX //============================================================================= #include "reporting.h" // Reporting convenience macros #include "select_initiator.h" // Our header #include "tlm.h" // TLM headers using namespace sc_core; static const char *filename = "select_initiator.cpp"; /// filename for reporting //============================================================================= ///Constructor select_initiator::select_initiator // constructor ( sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ) : sc_module (name) /// init module name , initiator_socket ("initiator_socket") /// init socket name , m_send_end_rsp_PEQ ("send_end_rsp_PEQ") /// init PEQ name , m_ID (ID) /// init initiator ID , m_end_rsp_delay (end_rsp_delay) /// init end response delay , m_enable_target_tracking (true) /// init tracking mode { // bind initiator to the export initiator_socket (*this); // register thread process SC_THREAD(initiator_thread); // register method process SC_METHOD(send_end_rsp_method) sensitive << m_send_end_rsp_PEQ.get_event(); dont_initialize(); } //============================================================================= // // Initiator thread // //============================================================================= void select_initiator::initiator_thread(void) // initiator thread { tlm::tlm_generic_payload *transaction_ptr; // transaction pointer while (true) { //============================================================================= // Read FIFO to Get new transaction GP from the traffic generator //============================================================================= transaction_ptr = request_in_port->read(); // get request from input fifo tlm::tlm_phase phase = tlm::BEGIN_REQ; // Create phase objects sc_time delay = SC_ZERO_TIME; // Create delay objects std::ostringstream msg; // log message msg.str(""); msg << "Initiator: " << m_ID << " starting new transaction" << " for Addr:0x" << hex << setw(8) << setfill('0') << uppercase << transaction_ptr->get_address() << endl << " " ; msg << "Initiator: " << dec << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Make the non-blocking call and decode returned status (tlm_sync_enum) //----------------------------------------------------------------------------- tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")" << endl; switch (return_value) { //----------------------------------------------------------------------------- // The target returned COMPLETED this is a single phase transaction // Wait the annotated delay // Return the transaction to the traffic generator //----------------------------------------------------------------------------- case tlm::TLM_COMPLETED: { wait(delay + m_end_rsp_delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " target returned COMPLETED with annotated time "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); response_out_port->write(transaction_ptr); // return txn to traffic gen break; }// end case TLM_COMPLETED //----------------------------------------------------------------------------- // Target returned UPDATED this will be 2 phase transaction // Add the transaction pointer to the waiting backward path map // Set tracking enum to Rcved_UPDATED // Wait the annotated delay //----------------------------------------------------------------------------- case tlm::TLM_UPDATED: { if( phase == tlm::END_REQ) { if (m_enable_target_tracking) { m_waiting_bw_path_map.insert(make_pair(transaction_ptr ,Rcved_UPDATED_enum )); } else { m_waiting_bw_path_map.insert(make_pair(transaction_ptr ,Rcved_END_REQ_enum )); } wait(delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); } else if( phase == tlm::BEGIN_RESP) { // ????? } else { msg << " " << "Initiator: " << m_ID << " Unexpected phase for UPDATED return from target "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } break; } // end case TLM_UPDATED //----------------------------------------------------------------------------- // Target returned ACCEPTED this will be 4 phase transaction // Add the transaction pointer to the waiting backward path map // Set tracking enum to Rcved_END_REQ // When the END REQUEST RULE is active wait for the target to response //----------------------------------------------------------------------------- case tlm::TLM_ACCEPTED: { msg << " " << "Initiator: " << m_ID << " transaction waiting end-request on backward-path "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); // use map to track transaction including current state information m_waiting_bw_path_map.insert (make_pair (transaction_ptr ,Rcved_ACCEPTED_enum )); wait (m_enable_next_request_event); break; } // end case TLM_ACCEPTED //----------------------------------------------------------------------------- // All case covered default //----------------------------------------------------------------------------- default: { msg << " " << "Initiator: " << m_ID << " Unexpected response to BEGIN_REQ "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); break; } } // end case } // end while true } // end initiator_thread //============================================================================= /// @fn select_initiator::nb_transport_bw // /// @brief non-blocking transport from targets // //============================================================================= tlm::tlm_sync_enum select_initiator::nb_transport_bw // inbound nb_transport_bw ( tlm::tlm_generic_payload& transaction_ref // generic payload , tlm::tlm_phase& phase // tlm phase , sc_time& delay // delay ) { tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; // return status reject by default std::ostringstream msg; // log message //============================================================================= // Check waiting backward path map of valid transaction //============================================================================= waiting_bw_path_map::iterator transaction_pair ; // create interator for map transaction_pair = m_waiting_bw_path_map.find(&transaction_ref); if (transaction_pair == m_waiting_bw_path_map.end() ) { //============================================================================= // The transaction pointer used by the backward path call does not belong // to this initiator, this is a major error //============================================================================= msg << " " << "Initiator: " << m_ID << " Received invalid transaction pointer"; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } //============================================================================= // Normal operation // Decode backward path phase //============================================================================= else { msg.str (""); msg << "Initiator: " << m_ID << " nb_transport_bw (GP, " << report::print(phase) << ", " << delay << ")" << "from Addr:0x" << hex << setw(8) << setfill('0') << uppercase << transaction_ref.get_address() << dec << endl; switch (phase) { //----------------------------------------------------------------------------- // Target has responded with END_REQ this is a 4 phase transaction // Verify the previous current tracking enum is Rcved_ACCEPTED_enum // Set tracking enum to Rcved_END_REQ //----------------------------------------------------------------------------- case tlm::END_REQ: { if (transaction_pair->second == Rcved_ACCEPTED_enum) { msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path" << endl; m_enable_next_request_event.notify(SC_ZERO_TIME); transaction_pair->second = Rcved_END_REQ_enum; status = tlm::TLM_ACCEPTED; msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); } else { msg << "Initiator: " << m_ID << " Unexpected END_REQ"; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } break; } //----------------------------------------------------------------------------- // Target has responded with BEGIN_RESP // The style could be 2,3 or 4 phase // Decode the previous tracking enum //----------------------------------------------------------------------------- case tlm::BEGIN_RESP: { //----------------------------------------------------------------------------- // Respond to begin-response - 2 phase style //----------------------------------------------------------------------------- if( transaction_pair->second == Rcved_UPDATED_enum){ msg << " " << "Initiator: " << m_ID << " Target response to begin-request was UPDATED" << endl << " " << "Initiator: " << m_ID << " indicating 2 phase return COMPLETED and annotate time" << endl; m_enable_next_request_event.notify(SC_ZERO_TIME); // release reqeuster thread m_waiting_bw_path_map.erase(&transaction_ref); // erase from map phase = tlm::END_RESP; // set appropriate return phase delay = m_end_rsp_delay; // wait for the response delay status = tlm::TLM_COMPLETED; // return status msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); response_out_port->write(&transaction_ref); // transaction to rsp fifo port } //----------------------------------------------------------------------------- // Respond to begin-response when the target has omitted the // end-request timing-point - 3 phase style //----------------------------------------------------------------------------- else if ( transaction_pair->second == Rcved_ACCEPTED_enum){ msg << " " << "Initiator: " << m_ID << " target omitted end-request timing-point returning ACCEPTED "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); m_waiting_bw_path_map.erase(&transaction_ref); // erase from map // use payload event queue to schedule sending end response m_send_end_rsp_PEQ.notify (transaction_ref, m_end_rsp_delay); m_enable_next_request_event.notify(SC_ZERO_TIME); status = tlm::TLM_ACCEPTED; } //----------------------------------------------------------------------------- // Respond to begin-response - 4 phase style //----------------------------------------------------------------------------- else if ( transaction_pair->second == Rcved_END_REQ_enum){ msg << " " << "Initiator: " << m_ID << " transaction moved to send-end-response PEQ " << endl; m_waiting_bw_path_map.erase(&transaction_ref); // erase from map // use payload event queue to schedule sending end response m_send_end_rsp_PEQ.notify (transaction_ref, m_end_rsp_delay); status = tlm::TLM_ACCEPTED; msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO (filename, __FUNCTION__, msg.str() ); } //----------------------------------------------------------------------------- else { msg.str (""); msg << m_ID << " - ** unexpected BEGIN_RESP"; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } break; } // end case BEGIN_RESP //----------------------------------------------------------------------------- // Invalid phase for backward path //----------------------------------------------------------------------------- case tlm::BEGIN_REQ: case tlm::END_RESP: { msg.str (""); msg << m_ID << " Illegal phase on backward path "; REPORT_FATAL(filename, __FUNCTION__, msg.str() ); break; } //----------------------------------------------------------------------------- // Unknown phase on backward path //----------------------------------------------------------------------------- default: { msg.str (""); msg << m_ID << " Unknown phase on the backward path "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); break; } } // end switch (phase) } return status; } // end backward nb transport //============================================================================= /// @fn select_initiator::send_end_rsp_method // /// @brief send end response method // /// @details This method is scheduled to send the end-response timing point. /// It is sensitive to the m_send_end_rsp_PEQ.get_event() event. // //============================================================================= void select_initiator::send_end_rsp_method(void) // send end response method { tlm::tlm_generic_payload* transaction_ptr; std::ostringstream msg; // log message //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_send_end_rsp_PEQ.get_next_transaction()) != NULL) { tlm::tlm_phase phase = tlm::END_RESP; // set the appropriate phase sc_time delay = SC_ZERO_TIME; msg.str(""); msg << "Initiator: " << m_ID << " starting send-end-response method" << endl << " " << "Initiator: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); // call begin response and then decode return status tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")"; switch (return_value) { case tlm::TLM_COMPLETED: // transaction complete { response_out_port->write(transaction_ptr); // send GP to output rsp fifo REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: default: { msg << " " << "Initiator: " << m_ID << report::print(return_value) << " Unknown return value for END_RESP "; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } } // end switch } // end while return; } // end send_end_rsp_method //============================================================================= /// @fn select_initiator::invalidate_direct_mem_ptr // /// @brief invalidate direct memory pointer Not implemented //============================================================================= void select_initiator::invalidate_direct_mem_ptr // invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ // start range , sc_dt::uint64 /*end_range*/ // end range ) { std::ostringstream msg; // log message msg.str (""); msg << m_ID << " invalidate_direct_mem_ptr: not implemented"; REPORT_INFO(filename, __FUNCTION__, msg.str()); } systemc-2.3.4/examples/tlm/common/src/extension_initiator_id.cpp0000644000175000017500000000423714342422106025042 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /*============================================================================== @file my_initiator_id_extension.cpp @brief This is the generic payload extension @Details This module implements the gp extension for the example. In this example, we define an optional extension to be the string containing initiator ID.. =============================================================================*/ /***************************************************************************** Original Authors: Anna Keist, ESLX Bill Bunton, ESLX Charles Wilson, ESLX *****************************************************************************/ #include "extension_initiator_id.h" ///< our header extension_initiator_id::extension_initiator_id ///< constructor ( void ) { } extension_initiator_id::~extension_initiator_id ///< destructor ( void ) { } void extension_initiator_id::copy_from ///< copy_from ( const tlm_extension_base &extension ) { m_initiator_id = static_cast(extension).m_initiator_id; } tlm::tlm_extension_base* extension_initiator_id::clone ///< clone operation ( void ) const { return new extension_initiator_id ( *this ); } systemc-2.3.4/examples/tlm/common/src/lt_synch_target.cpp0000644000175000017500000001025014342422106023451 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_synch_target.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Jack Donovan, ESLX // //===================================================================== #include "lt_synch_target.h" // our header #include "reporting.h" // reporting macros using namespace std; static const char *filename = "lt_synch_target.cpp"; ///< filename for reporting SC_HAS_PROCESS(lt_synch_target); ///Constructor lt_synch_target::lt_synch_target ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_target_memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { m_memory_socket.register_b_transport(this, <_synch_target::custom_b_transport); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void lt_synch_target::custom_b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload, mem_op_time); delay_time = delay_time + m_accept_delay + mem_op_time; msg << "Target: " << m_ID << " Forcing a synch in a temporal decoupled initiator with wait( " << delay_time << "),"; REPORT_INFO(filename, __FUNCTION__, msg.str()); wait(delay_time); delay_time = sc_core::SC_ZERO_TIME; msg.str(""); msg << "Target: " << m_ID << " return from wait will return a delay of " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } systemc-2.3.4/examples/tlm/common/src/lt_initiator.cpp0000644000175000017500000001037214342422106022766 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_initiator.cpp /// @Details /// /// //============================================================================== // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX //============================================================================== #include "reporting.h" ///< Reporting convenience macros #include "lt_initiator.h" ///< Our header #include "tlm.h" ///< TLM headers using namespace sc_core; static const char *filename = "lt_initiator.cpp"; ///< filename for reporting //============================================================================== /// @fn lt_initiator::lt_initiator /// /// @brief class constructor /// /// @details /// This is the class constructor. /// //============================================================================== SC_HAS_PROCESS(lt_initiator); lt_initiator::lt_initiator // constructor ( sc_module_name name // module name , const unsigned int ID // initiator ID ) : sc_module (name) // initialize module name , initiator_socket ("initiator_socket") // initiator socket , initiator_socket_opt("initiator_socket_opt") // optional initiator socket , m_ID (ID) // initialize initiator ID { // register thread process SC_THREAD(initiator_thread); } /*============================================================================== /// @fn lt_initiator::initiator_thread /// /// @brief initiates non-blocking transport /// /// @details /// ==============================================================================*/ void lt_initiator::initiator_thread(void) ///< initiator thread { tlm::tlm_generic_payload *transaction_ptr; ///< transaction pointer while (true) { //============================================================================= // Read FIFO to Get new transaction GP from the traffic generator //============================================================================= transaction_ptr = request_in_port->read(); // get request from input fifo sc_time delay = SC_ZERO_TIME; // Create delay objects std::ostringstream msg; msg.str(""); msg << "Initiator: " << m_ID << " b_transport(GP, " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); initiator_socket->b_transport(*transaction_ptr, delay); gp_status = transaction_ptr->get_response_status(); if(gp_status == tlm::TLM_OK_RESPONSE) { msg.str(""); msg << "Initiator: " << m_ID << " b_transport returned delay = " << delay; REPORT_INFO(filename, __FUNCTION__, msg.str()); wait(delay); } else { msg << "Initiator: " << m_ID << "Bad GP status returned = " << gp_status; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } response_out_port->write(transaction_ptr); // return txn to traffic gen } // end while true } // end initiator_thread systemc-2.3.4/examples/tlm/common/src/at_initiator_temporal_decoupling.cpp0000644000175000017500000002216214342422106027067 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* --------------------------------------------------------------------------------------- @file at_initiator_temporal_decoupling.h @brief LT initiator with temporal decoupling Original Authors: Bill Bunton, ESLX Charles Wilson, ESLX --------------------------------------------------------------------------------------- */ //============================================================================== // Note: order of headers is important #include "tlm.h" ///< TLM headers #include "reporting.h" ///< report output #include "at_initiator_temporal_decoupling.h" ///< LT initiator with temporal decoupling using namespace sc_core; using namespace std; const char *filename = "at_initiator_temporal_decoupling.cpp"; /*============================================================================= @fn at_initiator_temporal_decoupling::at_initiator_temporal_decoupling @brief at_initiator_temporal_decoupling constructor @details This routine initialized an at_initiator_temporal_decoupling class instance. @param name module name @param ID initiator ID @retval none =============================================================================*/ at_initiator_temporal_decoupling::at_initiator_temporal_decoupling ///< constructor ( sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_core::sc_time end_rsp_delay ///< delay ) :sc_module (name) ///< module name ,m_ID (ID) ///< initiator ID ,initiator_socket ("initiator_socket") ///< initiator socket ,m_end_rsp_delay (end_rsp_delay) ///< initialize delay { initiator_socket (*this); // bind initiator to the socket SC_THREAD(initiator_thread); // register thread process tlm::tlm_quantumkeeper::set_global_quantum(sc_core::sc_time(500, sc_core::SC_NS)); m_QuantumKeeper.reset(); } // ?????????????????? need to use m_end_rsp_delay /*============================================================================= @fn at_initiator_temporal_decoupling::initiator_thread @brief outbound data processing @details This routine handles outbound data. @param none @retval none =============================================================================*/ void at_initiator_temporal_decoupling::initiator_thread ///< initiator thread ( void ) { tlm::tlm_generic_payload *transaction_ptr; ///< transaction pointer std::ostringstream msg; ///< log message while (true) { // get transaction GP from reques in FIFO transaction_ptr = request_in_port->read(); // get request from input fifo // setup request tlm::tlm_phase phase = tlm::BEGIN_REQ; // Create phase objects msg.str (""); msg << m_ID << " " << ((transaction_ptr->get_command () == tlm::TLM_READ_COMMAND) ? "R" : "W") << " A: 0x" << internal << setw( sizeof(transaction_ptr->get_address ()) * 2 ) << setfill( '0' ) << uppercase << hex << transaction_ptr->get_address () << " L: " << internal << setw( 2 ) << setfill( '0' ) << dec << transaction_ptr->get_data_length (); REPORT_INFO (filename, __FUNCTION__, msg.str() ); // make the non-blocking call and decode returned status (tlm_sync_enum) switch (initiator_socket->nb_transport ( *transaction_ptr , phase , m_QuantumKeeper.get_local_time())) { case tlm::TLM_COMPLETED: // LT taget response complete with annonated delay { if (m_QuantumKeeper.need_sync()) { msg.str (""); msg << m_ID << " - " << "Sync Local time to SC time"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); m_QuantumKeeper.sync(); } response_out_port->write(transaction_ptr); msg.str (""); msg << m_ID << " - Completed LT request" << endl; msg << " SC time = " << sc_core::sc_time_stamp() << endl; msg << " local time = " << m_QuantumKeeper.get_current_time(); REPORT_INFO (filename, __FUNCTION__, msg.str()); break; } case tlm::TLM_ACCEPTED: // LT target accepted request case tlm::TLM_UPDATED: { m_req_accepted_queue.push(transaction_ptr); wait (m_req_accepted_event); msg.str (""); msg << m_ID << " - Completed LT request forced sync" << endl; msg << " local time = " << m_QuantumKeeper.get_local_time() << endl; m_QuantumKeeper.reset(); msg << " Reset local time = " << m_QuantumKeeper.get_local_time(); REPORT_INFO (filename, __FUNCTION__, msg.str()); break; } case tlm::TLM_REJECTED: default: { msg.str (""); msg << m_ID << " - TLM_REJECTED invalid response"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } } } } /*============================================================================= @fn at_initiator_temporal_decoupling::nb_transport @brief inbound non-blocking transport @details This routine handles inbound non-blocking transport. @param transaction_ref transaction reference @param phase transaction phase reference @param delay transaction delay reference @retval phase synchronization phase =============================================================================*/ tlm::tlm_sync_enum ///< phase at_initiator_temporal_decoupling::nb_transport ///< nb_transport ( tlm::tlm_generic_payload &transaction_ref ///< transaction , tlm::tlm_phase &phase ///< phase , sc_time &delay ///< delay ) { std::ostringstream msg; ///< log message tlm::tlm_sync_enum return_status = tlm::TLM_REJECTED; tlm::tlm_generic_payload *trans_ptr; switch (phase) { case tlm::BEGIN_RESP: { trans_ptr = m_req_accepted_queue.front(); if (trans_ptr == &transaction_ref) // LT target completing request { m_req_accepted_queue.pop(); m_req_accepted_event.notify(SC_ZERO_TIME); // release reqeuster thread response_out_port->write(&transaction_ref); msg.str (""); msg << m_ID << " - LT target completing request"; REPORT_INFO (filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_COMPLETED; } else { msg.str (""); msg << m_ID << " - transaction ptr not valid BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } break; } case tlm::END_REQ: case tlm::BEGIN_REQ: case tlm::END_RESP: { msg.str (""); msg << m_ID << " - phase undefined"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } default: { msg.str (""); msg << m_ID << " - phase not implemented"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } } return return_status; } /*============================================================================= @fn at_initiator_temporal_decoupling::invalidate_direct_mem_ptr @brief invalidate DMI pointer @details This routine a DMI pointer. @param name module name @retval none =============================================================================*/ void at_initiator_temporal_decoupling::invalidate_direct_mem_ptr ///< invalidate_direct_mem_ptr ( sc_dt::uint64 start_range ///< start range , sc_dt::uint64 end_range ///< end range ) { std::ostringstream msg; ///< log message msg.str (""); msg << m_ID << " - not implemented"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } systemc-2.3.4/examples/tlm/common/src/lt_target.cpp0000644000175000017500000001015114342422106022245 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_target.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Jack Donovan, ESLX // //===================================================================== #include "lt_target.h" // our header #include "reporting.h" // reporting macros using namespace std; static const char *filename = "lt_target.cpp"; ///< filename for reporting SC_HAS_PROCESS(lt_target); ///Constructor lt_target::lt_target ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_optional_socket ((std::string(memory_socket) + "_opt").c_str()) /// init optional socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_target_memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { m_memory_socket.register_b_transport(this, <_target::custom_b_transport); m_optional_socket.register_b_transport(this, <_target::custom_b_transport); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void lt_target::custom_b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload, mem_op_time); msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } systemc-2.3.4/examples/tlm/common/src/memory.cpp0000644000175000017500000002001614342422106021571 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================= /// @file memory.cpp // /// @brief Implement memory functionality // /// @details /// This class implements the memory functionality (read, write, etc.) /// and is used by all of the targets in the examples // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // //============================================================================== #include "reporting.h" // Reporting convenience macros #include "memory.h" // Header for this class using namespace sc_core; static const char *filename = "memory.cpp"; ///< filename for reporting /// Constructor memory::memory ( const unsigned int ID // Target ID , sc_core::sc_time read_delay // read delay , sc_core::sc_time write_delay // write delay , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) ) : m_ID (ID) , m_read_delay (read_delay) , m_write_delay (write_delay) , m_memory_size (memory_size) , m_memory_width (memory_width) , m_previous_warning(false) { /// Allocate and initalize an array for the target's memory m_memory = new unsigned char[size_t(m_memory_size)]; /// clear memory memset(m_memory, 0, size_t(m_memory_size)); sc_assert(m_memory_width > 0); sc_assert(m_memory_size % m_memory_width == 0); std::ostringstream msg; msg.str(""); if ( m_memory_width > m_memory_size ) { msg << "Target: " << m_ID <<" memory width is bigger than memory size"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } } // end Constructor //============================================================================== /// @fn memory::operation // /// @brief performs read and write // /// @details /// This routine implements the read and write operations. including /// checking for byte_enable and streaming that are not implemented // //============================================================================== void memory::operation ( tlm::tlm_generic_payload &gp , sc_core::sc_time &delay_time ///< transaction delay ) { /// Access the required attributes from the payload sc_dt::uint64 address = gp.get_address(); // memory address tlm::tlm_command command = gp.get_command(); // memory command unsigned char *data = gp.get_data_ptr(); // data pointer unsigned int length = gp.get_data_length(); // data length std::ostringstream msg; msg.str(""); tlm::tlm_response_status response_status = check_address(gp); if (gp.get_byte_enable_ptr()) { gp.set_response_status(tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE); } else if (gp.get_streaming_width() != gp.get_data_length()) { gp.set_response_status(tlm::TLM_BURST_ERROR_RESPONSE); } switch (command) { default: { if (m_previous_warning == false) { msg << "Target: " << m_ID << " Unsupported Command Extension"; REPORT_INFO(filename, __FUNCTION__, msg.str()); gp.set_response_status(tlm::TLM_COMMAND_ERROR_RESPONSE); delay_time = sc_core::SC_ZERO_TIME; m_previous_warning = true; } break; } /// Setup a TLM_WRITE_COMMAND Informational Message and Write the Data from /// the Generic Payload Data pointer to Memory /// case tlm::TLM_WRITE_COMMAND: { if (response_status == tlm::TLM_OK_RESPONSE) { for (unsigned int i = 0; i < length; i++) { m_memory[address++] = data[i]; // move the data to memory } delay_time = delay_time + m_write_delay; report::print(m_ID, gp, filename); } break; } case tlm::TLM_READ_COMMAND: { if (response_status == tlm::TLM_OK_RESPONSE) { for (unsigned int i = 0; i < length; i++) { data[i] = m_memory[address++]; // move the data to memory } delay_time = delay_time + m_read_delay; report::print(m_ID, gp, filename); } break; } } // end switch gp.set_response_status(response_status); return; } // end memory_operation //============================================================================== /// @fn memory::get_mem_ptr // /// @brief Method to return pointer to memory in this object // /// @details /// This routine used during dmi example // //============================================================================== unsigned char* memory::get_mem_ptr(void) { return m_memory; } //============================================================================== /// @fn memory::get_delay // /// @brief Method to "pull" appropriate delay from the gp // /// @details /// This routine used during several at examples // //============================================================================== void memory::get_delay ( tlm::tlm_generic_payload &gp ///< TLM2 GP reference , sc_core::sc_time &delay_time ///< time to be updated ) { /// Access the required attributes from the payload tlm::tlm_command command = gp.get_command(); // memory command std::ostringstream msg; msg.str(""); switch (command) { default: { if (m_previous_warning == false) { msg << "Target: " << m_ID << " Unsupport GP command extension"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); m_previous_warning = true; } break; } /// Setup a TLM_WRITE_COMMAND Informational Message and Write the Data from /// the Generic Payload Data pointer to Memory /// case tlm::TLM_WRITE_COMMAND: { delay_time = delay_time + m_write_delay; break; } case tlm::TLM_READ_COMMAND: { delay_time = delay_time + m_read_delay; break; } } // end switch return; } //============================================================================== /// @fn memory::check_address // /// @brief Method to check if the gp is in the address range of this memory // /// @details /// This routine used to check for errors in address space // //============================================================================== tlm::tlm_response_status memory::check_address ( tlm::tlm_generic_payload &gp ) { sc_dt::uint64 address = gp.get_address(); // memory address unsigned int length = gp.get_data_length(); // data length std::ostringstream msg; msg.str(""); if ( address >= m_memory_size ) { msg << "Target: " << m_ID <<" address out-of-range"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); return tlm::TLM_ADDRESS_ERROR_RESPONSE; // operation response } else { if ( (address + length) >= m_memory_size ) { msg << "Target: " << m_ID << " address will go out of bounds"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); return tlm::TLM_ADDRESS_ERROR_RESPONSE; // operation response } return tlm::TLM_OK_RESPONSE; } } // end check address systemc-2.3.4/examples/tlm/common/src/at_target_4_phase.cpp0000644000175000017500000004104214342422106023640 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_4_phase.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Charles Wilson, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_target_4_phase.h" // our header #include "reporting.h" // reporting macros #ifdef USING_EXTENSION_OPTIONAL #include "extension_initiator_id.h" // optional extension #endif /* USING_EXTENSION_OPTIONAL */ using namespace std; static const char *filename = "at_target_4_phase.cpp"; ///< filename for reporting SC_HAS_PROCESS(at_target_4_phase); ///Constructor at_target_4_phase::at_target_4_phase ( sc_core::sc_module_name module_name /// instance name , const unsigned int ID /// target ID , const char *memory_socket /// socket name , sc_dt::uint64 memory_size /// memory size (bytes) , unsigned int memory_width /// memory width (bytes) , const sc_core::sc_time accept_delay /// accept delay (SC_TIME) , const sc_core::sc_time read_response_delay /// read response delay (SC_TIME) , const sc_core::sc_time write_response_delay /// write response delay (SC_TIME) ) : sc_module (module_name) /// instance name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_nb_trans_fw_prev_warning (false) , m_end_request_method_prev_warning (false) , m_begin_resp_method_prev_warning (false) , m_trans_dbg_prev_warning (false) , m_get_dm_ptr_prev_warning (false) , m_end_request_PEQ ("end_request_PEQ") , m_response_PEQ ("response_PEQ") , m_target_memory /// init target's memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { /// Bind the socket's export to the interface m_memory_socket(*this); /// Register begin_reponse as an SC_METHOD SC_METHOD(end_request_method); sensitive << m_end_request_PEQ.get_event(); dont_initialize(); /// Register begin_reponse as an SC_METHOD SC_METHOD(begin_response_method); sensitive << m_response_PEQ.get_event(); dont_initialize(); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void at_target_4_phase::b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; // log message msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload, mem_op_time); msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================= // nb_transport_fw implementation calls from initiators // //============================================================================= tlm::tlm_sync_enum // synchronization state at_target_4_phase::nb_transport_fw // non-blocking transport call through Bus ( tlm::tlm_generic_payload &gp // generic payoad pointer , tlm::tlm_phase &phase // transaction phase , sc_core::sc_time &delay_time) // time it should take for transport { std::ostringstream msg; // log message tlm::tlm_sync_enum return_status = tlm::TLM_COMPLETED; #if ( defined ( USING_EXTENSION_OPTIONAL ) ) extension_initiator_id *extension_pointer; gp.get_extension ( extension_pointer ); msg.str(""); msg << "Target: " << m_ID << " extension "; if ( extension_pointer ) { msg << "data: " << extension_pointer->m_initiator_id; REPORT_INFO ( filename, __FUNCTION__, msg.str() ); } #endif /* USING_EXTENSION_OPTIONAL */ msg.str(""); msg << "Target: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay_time << ")"; //----------------------------------------------------------------------------- // decode phase argument //----------------------------------------------------------------------------- switch (phase) { //============================================================================= case tlm::BEGIN_REQ: { sc_core::sc_time PEQ_delay_time = delay_time + m_accept_delay; m_end_request_PEQ.notify(gp, PEQ_delay_time); // put transaction in the PEQ return_status = tlm::TLM_ACCEPTED; msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } // end BEGIN_REQ //============================================================================= case tlm::END_RESP: { m_end_resp_rcvd_event.notify (delay_time); return_status = tlm::TLM_COMPLETED; // indicate end of transaction break; } //============================================================================= case tlm::END_REQ: case tlm::BEGIN_RESP: { msg << "Target: " << m_ID << " Illegal phase received by target -- END_REQ or BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_ACCEPTED; break; } //============================================================================= default: { return_status = tlm::TLM_ACCEPTED; if(!m_nb_trans_fw_prev_warning) { msg << "Target: " << m_ID << " unknown phase " << phase << " encountered"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); m_nb_trans_fw_prev_warning = true; } break; } } return return_status; } //end nb_transport_fw //============================================================================= /// end_request method function implementation // // This method is statically sensitive to m_end_request_PEQ.get_event // //============================================================================= void at_target_4_phase::end_request_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer msg.str(""); tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_end_request_PEQ.get_next_transaction()) != NULL) { msg.str(""); msg << "Target: " << m_ID << " starting end-request method"; sc_core::sc_time delay = sc_core::SC_ZERO_TIME; m_target_memory.get_delay(*transaction_ptr, delay); // get memory operation delay m_response_PEQ.notify(*transaction_ptr, delay); // put transaction in the PEQ tlm::tlm_phase phase = tlm::END_REQ; delay = sc_core::SC_ZERO_TIME; msg << endl << " " << "Target: " << m_ID << " transaction moved to send-response PEQ " << endl << " "; msg << "Target: " << m_ID << " nb_transport_bw (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase END_REQ check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg.str(""); msg << "Target: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); switch (status) { //============================================================================= case tlm::TLM_ACCEPTED: { // more phases will follow break; } //============================================================================= case tlm::TLM_COMPLETED: { msg << "Target: " << m_ID << " TLM_COMPLETED invalid response to END_REQ" << endl << " Initiator must receive data before ending transaction"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } //============================================================================= case tlm::TLM_UPDATED: { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to END_REQ" << endl << " Initiator must receive data before updating transaction"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } //============================================================================= default: { msg << "Target: " << m_ID << " Illegal return status"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } }// end switch } // end while } //end end_request_method //============================================================================= /// begin_response method function implementation // // This method is statically sensitive to m_response_PEQ.get_event // //============================================================================= void at_target_4_phase::begin_response_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- // set default trigger, will be overridden by TLM_COMPLETED or TLM_UPDATED next_trigger (m_response_PEQ.get_event()); while ((transaction_ptr = m_response_PEQ.get_next_transaction()) != NULL) { msg.str(""); msg << "Target: " << m_ID << " starting response method"; REPORT_INFO(filename, __FUNCTION__, msg.str()); sc_core::sc_time delay = sc_core::SC_ZERO_TIME; m_target_memory.operation(*transaction_ptr, delay); /// perform memory operation tlm::tlm_phase phase = tlm::BEGIN_RESP; delay = sc_core::SC_ZERO_TIME; msg.str(""); msg << "Target: " << m_ID << " nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME)"; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase BEGIN_RESP check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg.str(""); msg << "Target: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); bool bail = false; switch (status) { //============================================================================= case tlm::TLM_COMPLETED: { next_trigger (delay); // honor the annotated delay bail = true; break; } //============================================================================= case tlm::TLM_ACCEPTED: { next_trigger (m_end_resp_rcvd_event); // honor end-response rule bail = true; break; } //============================================================================= case tlm::TLM_UPDATED: { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to BEGIN_RESP" << endl << " If the phase has been advanced, transaction should be TLM_COMPLETED"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } //============================================================================= default: { msg << "Target: " << m_ID << " Illegal return status " << status; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } }// end switch if ( bail ) { break; } } // end while } //end begin_response_queue_active //============================================================================== // Methods Required by Target Interface but not Implemented for this Example // Not implemented for this example but required by interface bool at_target_4_phase::get_direct_mem_ptr (tlm::tlm_generic_payload & /*payload*/, ///< address + extensions tlm::tlm_dmi & /*data*/ ///< dmi data ) { // THis is not a fatal, print first as warning std::ostringstream msg; msg.str(""); if(!m_get_dm_ptr_prev_warning) { msg << "Target: " << m_ID << " DMI not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); m_get_dm_ptr_prev_warning = true; } return false; } // Not implemented for this example but required by interface unsigned int // result at_target_4_phase::transport_dbg ( tlm::tlm_generic_payload & /*payload*/ ///< debug payload ) { std::ostringstream msg; msg.str(""); if(!m_trans_dbg_prev_warning) { msg << "Target: " << m_ID << " DBG(debug) not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); m_trans_dbg_prev_warning = true; } return false; } systemc-2.3.4/examples/tlm/common/src/report.cpp0000644000175000017500000001723514342422106021605 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file report.cpp // /// @Details /// // //===================================================================== // Original Authors: // Jack Donovan, ESLX //===================================================================== #include "reporting.h" // Reporting convenience macros //static const char *filename = "report.cpp"; ///< filename for reporting namespace report { std::string print(const tlm::tlm_phase phase) { std::stringstream os; switch (phase) { case tlm::BEGIN_REQ: { os << "BEGIN_REQ"; break; } case tlm::END_REQ: { os << "END_REQ"; break; } case tlm::BEGIN_RESP: { os << "BEGIN_RESP"; break; } case tlm::END_RESP: { os << "END_RESP"; break; } default: { os << "UNKNOWN_" << phase; break; } }//end switch return os.str(); } std::string print(const tlm::tlm_sync_enum status) { // std::stringstream os; // os << "TLM_" ; switch (status) { case tlm::TLM_COMPLETED: { os << "COMPLETED"; break; } case tlm::TLM_UPDATED: { os << "UPDATED"; break; } case tlm::TLM_ACCEPTED: { os << "ACCEPTED"; break; } default: { os << "UNKNOWN_" << status; break; } }//end switch return os.str(); } std::string print(const tlm::tlm_response_status status) { std::stringstream os; switch (status) { case tlm::TLM_OK_RESPONSE: { os << "OK_RESPONSE"; break; } case tlm::TLM_INCOMPLETE_RESPONSE: { os << "INCOMPLETE_RESPONSE"; break; } case tlm::TLM_GENERIC_ERROR_RESPONSE: { os << "GENERIC_ERROR_RESPONSE"; break; } case tlm::TLM_ADDRESS_ERROR_RESPONSE: { os << "ADDRESS_ERROR_RESPONSE"; break; } case tlm::TLM_COMMAND_ERROR_RESPONSE: { os << "COMMAND_ERROR_RESPONSE"; break; } case tlm::TLM_BURST_ERROR_RESPONSE : { os << "BURST_ERROR_RESPONSE"; break; } case tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE: { os << "BYTE_ENABLE_ERROR_RESPONSE"; break; } default: { os << "UNKNOWN_" << status; break; } }//end switch return os.str(); } //===================================================================== // /// @brief helper function for printing memory transactions // //===================================================================== void print ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_generic_payload &gp ///< transaction to be printed , const char* calling_filename ) { std::ostringstream msg; msg.str(""); sc_dt::uint64 print_address = gp.get_address(); // memory address unsigned char *print_data = gp.get_data_ptr(); // data pointer unsigned int print_length = gp.get_data_length(); // data length tlm::tlm_command print_command = gp.get_command(); // memory command msg << "ID: "<< ID << " COMMAND: " << ((print_command == tlm::TLM_WRITE_COMMAND) ? "WRITE" : "READ") << " Length: " << internal << setw( 2 ) << setfill( '0' ) << dec << print_length << endl << " Addr: 0x" << internal << setw( sizeof(print_address) * 2 ) << setfill( '0' ) << uppercase << hex << print_address << " Data: 0x" // For consistency across hosts (LE/BE), must interpret word as MSB:LSB rather than // a sequence of bytes in address order << internal << setw( 8 ) << setfill( '0' ) << uppercase << hex << *reinterpret_cast(print_data); REPORT_INFO(calling_filename, __FUNCTION__, msg.str()); } //===================================================================== // /// @brief helper function for printing memory transactions // //===================================================================== void print_full ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_generic_payload &gp ///< transaction to be printed , const char* caller_filename ) { std::ostringstream msg; msg.str(""); sc_dt::uint64 print_address = gp.get_address(); // memory address unsigned char *print_data = gp.get_data_ptr(); // data pointer unsigned int print_length = gp.get_data_length(); // data length tlm::tlm_command print_command = gp.get_command(); // memory command msg << "ID: "<< ID << " COMMAND: " << ((print_command == tlm::TLM_WRITE_COMMAND) ? "WRITE" : "READ") << " Length: " << internal << setw( 2 ) << setfill( '0' ) << dec << print_length << endl << " Addr: 0x" << internal << setw( sizeof(print_address) * 2 ) << setfill( '0' ) << uppercase << hex << print_address << " Data: 0x" << internal << setw( 2 ) << setfill( '0' ) << uppercase << hex << (int)print_data[3] << internal << setw( 2 ) << setfill( '0' ) << uppercase << hex << (int)print_data[2] << internal << setw( 2 ) << setfill( '0' ) << uppercase << hex << (int)print_data[1] << internal << setw( 2 ) << setfill( '0' ) << uppercase << hex << (int)print_data[0] << endl << " " << "RSP STATUS = " << gp.get_response_string() << " STREAMING WIDTH = " << gp.get_streaming_width() << endl << " " << "DMI ALLOWED = " << gp.is_dmi_allowed() << endl << " " << "BYTE ENABLE LENGTH = " << gp.get_byte_enable_length(); REPORT_INFO(caller_filename, __FUNCTION__, msg.str()); } void print ( const int &ID ///< Target ID/Initiator/?ID , tlm::tlm_dmi &dmi_properties ///< dmi transaction to be printed , const char* calling_filename ) { std::ostringstream msg; msg.str(""); msg << "Initiator: " << ID // << " &dmi_properties = " << &dmi_properties << endl << " " << "start addr = " << dmi_properties.get_start_address() << endl << " " << "end addr = " << dmi_properties.get_end_address() << endl << " " << "read latency = " << dmi_properties.get_read_latency() << endl << " " << "write latency = " << dmi_properties.get_write_latency() << endl << " " << "granted access = " << dmi_properties.get_granted_access(); // unsigned char* temp_dmi_ptr = dmi_properties.get_dmi_ptr(); // msg << endl << " " // << "dmi_ptr = " << temp_dmi_ptr; REPORT_INFO(calling_filename, __FUNCTION__, msg.str()); } }//end namespace systemc-2.3.4/examples/tlm/common/src/at_target_1_phase.cpp0000644000175000017500000003312314342422106023636 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_1_phase.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Charles Wilson, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_target_1_phase.h" // our header #include "reporting.h" // reporting macros //#include using namespace std; static const char *filename = "at_target_1_phase.cpp"; ///< filename for reporting SC_HAS_PROCESS(at_target_1_phase); ///Constructor at_target_1_phase::at_target_1_phase ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_request_count (1) /// init request count , m_nb_trans_fw_prev_warning(false) , m_begin_resp_method_prev_warning(false) , m_trans_dbg_prev_warning(false) , m_get_dm_ptr_prev_warning(false) , m_response_PEQ ("response_PEQ") , m_target_memory /// init target's memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { /// Bind the socket's export to the interface m_memory_socket(*this); /// Register begin_reponse as an SC_METHOD /// Used to implement force synchronization multiple timing points SC_METHOD(begin_response_method); sensitive << m_response_PEQ.get_event(); dont_initialize(); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void at_target_1_phase::b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload, mem_op_time); msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================= // nb_transport_fw implementation calls from initiators // //============================================================================= tlm::tlm_sync_enum // synchronization state at_target_1_phase::nb_transport_fw // non-blocking transport call through Bus ( tlm::tlm_generic_payload &gp // generic payoad pointer , tlm::tlm_phase &phase // transaction phase , sc_core::sc_time &delay_time) // time it should take for transport { std::ostringstream msg; // log message msg.str(""); msg << "Target: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay_time << ")"; tlm::tlm_sync_enum return_status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // decode phase argument //----------------------------------------------------------------------------- switch (phase) { //============================================================================= case tlm::BEGIN_REQ: { /// Generate frorced synchronization response every 20th request if(m_request_count++ % 20) //----------------------------------------------------------------------------- // AT single timing point forced by returning TLM_COMPLETED //----------------------------------------------------------------------------- { REPORT_INFO(filename, __FUNCTION__, msg.str()); m_target_memory.operation(gp, delay_time); // perform memory operation now delay_time += m_accept_delay; return_status = tlm::TLM_COMPLETED; // indicate end of transaction msg.str(""); msg << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // end AT single timing point //----------------------------------------------------------------------------- // Force synchronization multiple timing points by returning TLM_ACCEPTED // use a payload event queue to schedule BEGIN_RESP timing point //----------------------------------------------------------------------------- else { m_target_memory.get_delay(gp, delay_time); // get memory operation delay delay_time += m_accept_delay; m_response_PEQ.notify(gp, delay_time); // put transaction in the PEQ delay_time = m_accept_delay; phase = tlm::END_REQ; // advance txn state to end request return_status = tlm::TLM_UPDATED; // force synchronization msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); } break; } // end BEGIN_REQ //============================================================================= case tlm::END_RESP: { m_end_resp_rcvd_event.notify (sc_core::SC_ZERO_TIME); return_status = tlm::TLM_COMPLETED; // indicate end of transaction break; } //============================================================================= case tlm::END_REQ: case tlm::BEGIN_RESP: { msg << "Target: " << m_ID << " Illegal phase received by target -- END_REQ or BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_ACCEPTED; break; } //============================================================================= default: { return_status = tlm::TLM_ACCEPTED; if(!m_nb_trans_fw_prev_warning) { msg << "Target: " << m_ID << " default phase encountered"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_nb_trans_fw_prev_warning = true; break; } } return return_status; } //end nb_transport_fw //============================================================================= /// begin_response method function implementation // // This method is statically sensitive to m_response_PEQ.get_event // //============================================================================= void at_target_1_phase::begin_response_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer msg.str(""); tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_response_PEQ.get_next_transaction()) != NULL) { sc_core::sc_time dummy_t = sc_core::SC_ZERO_TIME; /// perform memory operation now m_target_memory.operation(*transaction_ptr, dummy_t); tlm::tlm_phase phase = tlm::BEGIN_RESP; sc_core::sc_time delay = sc_core::SC_ZERO_TIME; msg << "Target: " << m_ID << " nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME)" << endl << " "; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase BEGIN_RESP check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg << "Target: " << m_ID << " " << report::print(status) << "(GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); switch (status) { //============================================================================= case tlm::TLM_COMPLETED: { next_trigger (delay); // add comments ??? return; break; } //============================================================================= case tlm::TLM_ACCEPTED: { next_trigger (m_end_resp_rcvd_event); // add comments ??? return; break; } //============================================================================= case tlm::TLM_UPDATED: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to BEGIN_RESP"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } //============================================================================= default: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " undefined return status "; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } }// end switch } // end while next_trigger (m_response_PEQ.get_event()); } //end begin_response_queue_active //============================================================================== // Methods Required by Target Interface but not Implemented for this Example // Not implemented for this example but required by interface bool at_target_1_phase::get_direct_mem_ptr (tlm::tlm_generic_payload & /*payload*/, ///< address + extensions tlm::tlm_dmi & /*data*/ ///< dmi data ) { // THis is not a fatal, print first as warning std::ostringstream msg; msg.str(""); if(!m_get_dm_ptr_prev_warning) { msg << "Target: " << m_ID << " DMI not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_get_dm_ptr_prev_warning = true; return false; } // Not implemented for this example but required by interface unsigned int // result at_target_1_phase::transport_dbg ( tlm::tlm_generic_payload & /*payload*/ ///< debug payload ) { std::ostringstream msg; msg.str(""); if(!m_trans_dbg_prev_warning) { msg << "Target: " << m_ID << " DBG(debug) not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_trans_dbg_prev_warning = true; return false; } systemc-2.3.4/examples/tlm/common/src/at_initiator_explicit.cpp0000644000175000017500000004250314342422106024655 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================= /// @file at_initiator_explicit.cpp /// @Details Implements a AT non-blocking initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX //============================================================================= #include "reporting.h" // Reporting convenience macros #include "at_initiator_explicit.h" // Our header #include "tlm.h" // TLM headers using namespace sc_core; static const char *filename = "at_initiator_explicit.cpp"; /// filename for reporting //============================================================================= ///Constructor at_initiator_explicit::at_initiator_explicit // constructor ( sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ) : sc_module (name) /// init module name , initiator_socket ("initiator_socket") /// init socket name , m_send_end_rsp_PEQ ("send_end_rsp_PEQ") /// init PEQ name , m_ID (ID) /// init initiator ID , m_end_rsp_delay (end_rsp_delay) /// init end response delay { // bind initiator to the export initiator_socket (*this); // register thread process SC_THREAD(initiator_thread); // register method process SC_METHOD(send_end_rsp_method); sensitive << m_send_end_rsp_PEQ.get_event(); dont_initialize(); } //============================================================================= // // Initiator thread // //============================================================================= void at_initiator_explicit::initiator_thread(void) // initiator thread { tlm::tlm_generic_payload *transaction_ptr; // transaction pointer std::ostringstream msg; // log message while (true) { //============================================================================= // Read FIFO to Get new transaction GP from the traffic generator //============================================================================= transaction_ptr = request_in_port->read(); // get request from input fifo tlm::tlm_phase phase = tlm::BEGIN_REQ; // Create phase objects sc_time delay = SC_ZERO_TIME; // Create delay objects msg.str(""); msg << "Initiator: " << m_ID << " starting new transaction" << endl << " " << "Initiator: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Make the non-blocking call and decode returned status (tlm_sync_enum) //----------------------------------------------------------------------------- tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")" << endl; switch (return_value) { //----------------------------------------------------------------------------- // The target returned COMPLETED this is a 1 phase transaction // Wait the annotated delay // Return the transaction to the traffic generator // Make the next request //----------------------------------------------------------------------------- case tlm::TLM_COMPLETED: { wait(delay + m_end_rsp_delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " target returned COMPLETED with annotated time "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); response_out_port->write(transaction_ptr); // return txn to traffic gen break; }// end case TLM_COMPLETED //----------------------------------------------------------------------------- // Target returned UPDATED //----------------------------------------------------------------------------- case tlm::TLM_UPDATED: { //----------------------------------------------------------------------------- // Put poiter in waiting backware path map // Wait the annotated delay // Make the next request //----------------------------------------------------------------------------- if( phase == tlm::END_REQ) { m_waiting_bw_path_map.insert(make_pair(transaction_ptr ,Rcved_END_REQ_enum )); wait(delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); } //----------------------------------------------------------------------------- // Wait the annotated delay // Use payload event queue to schedule sending end response // Make the next request //----------------------------------------------------------------------------- else if( phase == tlm::BEGIN_RESP) { msg << " " << "Initiator: " << m_ID << " transaction moved to send-end-response PEQ " << endl; wait(delay); // wait the annotated delay m_send_end_rsp_PEQ.notify (*transaction_ptr, m_end_rsp_delay); msg << " " << "Initiator: " << m_ID << " " << " (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO (filename, __FUNCTION__, msg.str() ) } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- else { msg << " " << "Initiator: " << m_ID << " Unexpected phase for UPDATED return from target "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } break; } // end case TLM_UPDATED //----------------------------------------------------------------------------- // Target returned ACCEPTED this an explicit response // Add the transaction pointer to the waiting backward path map // END REQUEST RULE wait for the target to response //----------------------------------------------------------------------------- case tlm::TLM_ACCEPTED: { msg << " " << "Initiator: " << m_ID << " transaction waiting end-request on backward-path "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); // use map to track transaction including current state information m_waiting_bw_path_map.insert (make_pair (transaction_ptr ,Rcved_ACCEPTED_enum )); wait (m_enable_next_request_event); // wait for the target to response break; } // end case TLM_ACCEPTED //----------------------------------------------------------------------------- // All case covered default //----------------------------------------------------------------------------- default: { msg << " " << "Initiator: " << m_ID << " Unexpected response to BEGIN_REQ "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); break; } } // end case } // end while true } // end initiator_thread //============================================================================= /// @fn at_initiator_explicit::nb_transport_bw // /// @brief non-blocking transport from targets // //============================================================================= tlm::tlm_sync_enum at_initiator_explicit::nb_transport_bw // inbound nb_transport_bw ( tlm::tlm_generic_payload& transaction_ref // generic payload , tlm::tlm_phase& phase // tlm phase , sc_time& delay // delay ) { tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; // return status reject by default std::ostringstream msg; // log message //============================================================================= // Check waiting backward path map of valid transaction //============================================================================= waiting_bw_path_map::iterator transaction_inter; // create interator for map transaction_inter = m_waiting_bw_path_map.find(&transaction_ref); if (transaction_inter == m_waiting_bw_path_map.end() ) { //============================================================================= // The transaction pointer used by the backward path call does not belong // to this initiator, this is a major error //============================================================================= msg << " " << "Initiator: " << m_ID << " Received invalid transaction pointer"; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } //============================================================================= // Normal operation // Decode backward path phase //============================================================================= else { msg.str (""); msg << "Initiator: " << m_ID << " nb_transport_bw (GP, " << report::print(phase) << ", " << delay << ")" << endl; switch (phase) { //----------------------------------------------------------------------------- // Target has responded with END_REQ // notify enable next request event //----------------------------------------------------------------------------- case tlm::END_REQ: { msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path" << endl; m_enable_next_request_event.notify(SC_ZERO_TIME); transaction_inter->second = Rcved_END_REQ_enum; status = tlm::TLM_ACCEPTED; msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } //----------------------------------------------------------------------------- // Target has responded with BEGIN_RESP // Use payload event queue to schedule sending end response // If there was no END REQUEST this ends the request phase notify // enable next request event //----------------------------------------------------------------------------- case tlm::BEGIN_RESP: { msg << " " << "Initiator: " << m_ID << " transaction moved to send-end-response PEQ " << endl; m_send_end_rsp_PEQ.notify (transaction_ref, m_end_rsp_delay); // check for a synthetic 3-phase transaction (BEGIN_RESP without END_REQ) if (transaction_inter->second == Rcved_ACCEPTED_enum) { m_enable_next_request_event.notify(SC_ZERO_TIME); } m_waiting_bw_path_map.erase(&transaction_ref); // erase from map status = tlm::TLM_ACCEPTED; msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } // end case BEGIN_RESP //----------------------------------------------------------------------------- // Invalid phase for backward path //----------------------------------------------------------------------------- case tlm::BEGIN_REQ: case tlm::END_RESP: { msg.str (""); msg << m_ID << " Illegal phase on backward path "; REPORT_FATAL(filename, __FUNCTION__, msg.str() ); break; } //----------------------------------------------------------------------------- // Unknown phase on backward path //----------------------------------------------------------------------------- default: { msg.str (""); msg << m_ID << " Unknown phase on the backward path "; REPORT_WARNING (filename, __FUNCTION__, msg.str() ); break; } } // end switch (phase) } return status; } // end backward nb transport //============================================================================= /// @fn at_initiator_explicit::send_end_rsp_method // /// @brief send end response method // /// @details This method is scheduled to send the end-response timing point. /// It is sensitive to the m_send_end_rsp_PEQ.get_event() event. // //============================================================================= void at_initiator_explicit::send_end_rsp_method(void) // send end response method { tlm::tlm_generic_payload* transaction_ptr; std::ostringstream msg; // log message //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_send_end_rsp_PEQ.get_next_transaction()) != NULL) { tlm::tlm_phase phase = tlm::END_RESP; // set the appropriate phase sc_time delay = SC_ZERO_TIME; msg.str(""); msg << "Initiator: " << m_ID << " starting send-end-response method" << endl << " " << "Initiator: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); // call begin response and then decode return status tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")"; switch (return_value) { case tlm::TLM_COMPLETED: // transaction complete { response_out_port->write(transaction_ptr); // send GP to output rsp fifo REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: { msg << " " << "Initiator: " << m_ID << report::print(return_value) << " Invalid return value for END_RESP "; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } default: { msg << " " << "Initiator: " << m_ID << report::print(return_value) << " Unknown return value for END_RESP "; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } } // end switch } // end while return; } // end send_end_rsp_method //============================================================================= /// @fn at_initiator_explicit::invalidate_direct_mem_ptr // /// @brief invalidate direct memory pointer Not implemented //============================================================================= void at_initiator_explicit::invalidate_direct_mem_ptr // invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ // start range , sc_dt::uint64 /*end_range*/ // end range ) { std::ostringstream msg; // log message msg.str (""); msg << m_ID << " invalidate_direct_mem_ptr: not implemented"; REPORT_INFO(filename, __FUNCTION__, msg.str()); } systemc-2.3.4/examples/tlm/common/src/traffic_generator.cpp0000644000175000017500000002307314342422106023753 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file traffic_generator.cpp // /// @brief traffic generation routines // //===================================================================== // Authors: // Bill Bunton, ESLX // Jack Donovan, ESLX // Charles Wilson, ESLX //==================================================================== //==================================================================== // Nov 06, 2008 // // Updated by: // Xiaopeng Qiu, JEDA Technologies, Inc // Email: qiuxp@jedatechnologies.net // // To fix violations of TLM2.0 rules, which are detected by JEDA // TLM2.0 checker. // //==================================================================== #include "reporting.h" // reporting macros #include "traffic_generator.h" // traffic generator declarations #ifdef USING_EXTENSION_OPTIONAL #include "extension_initiator_id.h" // initiator ID extension #endif /* USING_EXTENSION_OPTIONAL */ using namespace std; static const char *filename = "traffic_generator.cpp"; ///< filename for reporting /// Constructor SC_HAS_PROCESS(traffic_generator); //----------------------------------------------------------------------------- // traffic_generator::traffic_generator // @todo keep me, lose other constructor ( sc_core::sc_module_name name // instance name , const unsigned int ID // initiator ID , sc_dt::uint64 base_address_1 // first base address , sc_dt::uint64 base_address_2 // second base address , unsigned int max_txns // Max number of active transactions ) : sc_module ( name ) /// instance name , m_ID ( ID ) /// initiator ID , m_base_address_1 ( base_address_1 ) /// first base address , m_base_address_2 ( base_address_2 ) /// second base address , m_active_txn_count ( 0 ) /// number of active transactions , m_check_all ( true ) { SC_THREAD(traffic_generator_thread); // build transaction pool for (unsigned int i = 0; i < max_txns; i++ ) { m_transaction_queue.enqueue (); } } /// SystemC thread for generation of GP traffic void traffic_generator::traffic_generator_thread ( void ) { std::ostringstream msg; ///< log message msg.str (""); msg << "Initiator: " << m_ID << " Starting Traffic"; REPORT_INFO(filename, __FUNCTION__, msg.str()); tlm::tlm_generic_payload *transaction_ptr; ///< transaction pointer unsigned char *data_buffer_ptr; ///< data buffer pointer // outer loop of a simple memory test generate addresses sc_dt::uint64 base_address; for (unsigned int i = 0; i < 2; i++ ) { base_address = i ? m_base_address_2 : m_base_address_1; sc_dt::uint64 mem_address = base_address; // write loop for (unsigned int j = 0; j < 16; j++ ) { if(!m_transaction_queue.is_empty()) { transaction_ptr = m_transaction_queue.dequeue (); transaction_ptr->acquire(); ++m_active_txn_count; data_buffer_ptr = transaction_ptr->get_data_ptr(); unsigned int w_data = (unsigned int)mem_address; // invert data on second pass if (i==1) { w_data = ~w_data; } // convert address of write data to an 32-bit value *reinterpret_cast(data_buffer_ptr) = w_data; transaction_ptr->set_command ( tlm::TLM_WRITE_COMMAND ); transaction_ptr->set_address ( mem_address ); transaction_ptr->set_data_length ( m_txn_data_size ); transaction_ptr->set_streaming_width ( m_txn_data_size ); transaction_ptr->set_response_status ( tlm::TLM_INCOMPLETE_RESPONSE ); #if ( defined ( USING_EXTENSION_OPTIONAL ) ) // set the extension extension_initiator_id *extension_pointer; // extension pointer std::ostringstream initiator_id; // initiator ID string initiator_id << "'Initiator ID: " << m_ID << "'"; extension_pointer = new extension_initiator_id; extension_pointer->m_initiator_id = initiator_id.str(); // register the extension transaction_ptr->set_extension ( extension_pointer ); #endif /* USING_EXTENSION_OPTIONAL */ // increment memory address mem_address += m_txn_data_size; // send write request request_out_port->write (transaction_ptr); } check_complete(); } check_all_complete(); // read loop mem_address = base_address; for (unsigned int k = 0; k < 16; k++ ) { if(!m_transaction_queue.is_empty()) { transaction_ptr = m_transaction_queue.dequeue (); transaction_ptr->acquire(); ++m_active_txn_count; transaction_ptr->set_command ( tlm::TLM_READ_COMMAND ); transaction_ptr->set_address ( mem_address ); transaction_ptr->set_data_length ( m_txn_data_size ); transaction_ptr->set_streaming_width ( m_txn_data_size ); transaction_ptr->set_response_status ( tlm::TLM_INCOMPLETE_RESPONSE ); #if ( defined ( USING_EXTENSION_OPTIONAL ) ) // set the extension extension_initiator_id *extension_pointer; // extension pointer std::ostringstream initiator_id; // initiator ID string initiator_id << "'Initiator ID: " << m_ID << "'"; extension_pointer = new extension_initiator_id; extension_pointer->m_initiator_id = initiator_id.str(); // register the extension transaction_ptr->set_extension ( extension_pointer ); #endif /* USING_EXTENSION_OPTIONAL */ // increment memory address mem_address += m_txn_data_size; // send write request request_out_port->write (transaction_ptr); } check_complete(); } // end read loop check_all_complete(); } msg.str (""); msg << "Traffic Generator : " << m_ID << endl << "=========================================================" << endl << " #### Traffic Generator Complete #### "; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // end traffic_generator_thread //----------------------------------------------------------------------------- // Check Complete method void traffic_generator::check_complete (void) { std::ostringstream msg; tlm::tlm_generic_payload *transaction_ptr; if ( m_transaction_queue.is_empty() || m_check_all || ( response_in_port->num_available() > 0 ) ) { response_in_port->read(transaction_ptr); if (transaction_ptr ->get_response_status() != tlm::TLM_OK_RESPONSE) { msg.str (""); msg << m_ID << "Transaction ERROR"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } if ( transaction_ptr->get_command() == tlm::TLM_READ_COMMAND) { unsigned int expected_data = (unsigned int)transaction_ptr->get_address(); unsigned char* data_buffer_ptr = transaction_ptr->get_data_ptr(); unsigned int read_data = *reinterpret_cast(data_buffer_ptr); //----------------------------------------------------------------------------- // The address for the gp is used as expected data. The address filed of // the gp is a mutable field and is changed by the SimpleBus interconnect. // The list significant 28 bits are not modified and are use for comparison. const unsigned int data_mask ( 0x0FFFFFFF ); unsigned int read_data_masked = read_data & data_mask; if ( ( read_data_masked != ( expected_data & data_mask ) ) && ( read_data_masked != ( ~expected_data & data_mask ) ) ) { msg.str (""); msg << m_ID << " Memory read data ERROR"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } } transaction_ptr->release(); --m_active_txn_count; } } // end check_complete //----------------------------------------------------------------------------- // Check All Complete method void traffic_generator::check_all_complete ( void ) { while (m_active_txn_count) { m_check_all = true; check_complete(); } m_check_all = false; } // end check_all_complete systemc-2.3.4/examples/tlm/common/src/dmi_memory.cpp0000644000175000017500000001676614342422106022443 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file dmi_memory.cpp // /// @details /// Isolates the dmi based memory functions from the rest of the /// TLM initiator "shell" // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // //============================================================================== #include "reporting.h" // Reporting convenience macros #include "dmi_memory.h" // Header for this class using namespace sc_core; static const char *filename = "dmi_memory.cpp"; ///< filename for reporting /// Constructor dmi_memory::dmi_memory ( const unsigned int ID // Target ID ) : m_ID (ID), m_dmi_size (0), m_dmi_base_address (0) { } // end Constructor //===================================================================== /// @fn dmi_memory::operation // /// @brief DMI read and write processing // /// @details /// This routine implements dmi based read and write operations // //===================================================================== void dmi_memory::operation ( tlm::tlm_generic_payload &gp , sc_core::sc_time &delay ///< transaction delay ) { std::ostringstream msg; msg.str(""); m_address = gp.get_address(); m_data = gp.get_data_ptr(); ///< data pointer m_length = gp.get_data_length(); ///< data length m_command = gp.get_command(); m_is_dmi_flag = false; gp.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE); if (is_address_dmi(gp) == false ) { msg << "Iniiator:" << m_ID << "A GP with an address not in the allowed DMI ranges has been received" << endl << " " << "Use check_status before passing a gp to operation"; REPORT_INFO(filename, __FUNCTION__, msg.str()); gp.set_response_status(tlm::TLM_COMMAND_ERROR_RESPONSE); // Need a different error } else { m_offset = m_address - m_dmi_base_address; switch (m_command) { case tlm::TLM_WRITE_COMMAND: { for (unsigned int i = 0; i < m_length; i++) { m_dmi_ptr[m_offset + i] = m_data[i]; } gp.set_response_status(tlm::TLM_OK_RESPONSE); delay = delay + m_dmi_write_latency; // update time report::print(m_ID, gp, filename); break; } case tlm::TLM_READ_COMMAND: { // clear read buffer for (unsigned int i = 0; i < m_length; i++) { m_data[i] = m_dmi_ptr [m_offset + i]; } gp.set_response_status(tlm::TLM_OK_RESPONSE); delay = delay + m_dmi_read_latency; // update time report::print(m_ID, gp, filename); break; } default: { msg << "Target: " << m_ID << " Unknown GP command that could be ignorable"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); gp.set_response_status(tlm::TLM_COMMAND_ERROR_RESPONSE); break; } }//end switch } return; //============================================================================== } // end memory_operation void dmi_memory::invalidate_dmi_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ) { std::ostringstream msg; msg.str(""); if ( ( start_range <= end_range ) && ( start_range >= m_dmi_base_address ) && ( end_range <= (m_dmi_base_address-m_dmi_size) ) ) { msg << "Initiator:" << m_ID << " DMI Pointer invalidated for " << "(" << start_range << ", " << end_range << ")"; m_start_address=1; m_end_address=0; } else { msg << "Initiator:" << m_ID << " DMI Pointer not invalidated for " << "(" << start_range << ", " << end_range << ")"; } REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================== void dmi_memory::load_dmi_ptr ( tlm::tlm_dmi &dmi_properties ) { report::print(m_ID,dmi_properties,filename); // m_dmi_properties = dmi_properties; m_dmi_ptr = dmi_properties.get_dmi_ptr(); m_dmi_read_latency = dmi_properties.get_read_latency(); m_dmi_write_latency = dmi_properties.get_write_latency(); m_dmi_base_address = dmi_properties.get_start_address(); m_dmi_size = dmi_properties.get_end_address() - m_dmi_base_address; m_granted_access = dmi_properties.get_granted_access(); return; } //============================================================================== bool dmi_memory::is_address_dmi ( tlm::tlm_generic_payload &gp ) { m_start_address = gp.get_address(); m_end_address = m_start_address + gp.get_data_length(); std::ostringstream msg; msg.str(""); msg << "Initiator:" << m_ID; bool return_status = false; if ( ( ( m_start_address < ( m_dmi_base_address ) ) || ( m_end_address > ( m_dmi_base_address + m_dmi_size ) ) ) ) { // address is outside of the DMI boundaries msg << " address is not a dmi address"; // msg << "m_start_address= " << m_start_address << " m_address= " << m_address // << endl << " " // << "m_end_address= " << m_end_address << " m_offset= " << m_offset << " m_dmi_size= "<< m_dmi_size; REPORT_INFO(filename, __FUNCTION__, msg.str()); } else if ( ( gp.get_command () == tlm::TLM_WRITE_COMMAND ) ) { if ( (m_granted_access != tlm::tlm_dmi::DMI_ACCESS_READ ) && ( m_granted_access != tlm::tlm_dmi::DMI_ACCESS_NONE)){ msg << " correct address and appropriate access for a GP Write Command "<read(); // get request from input fifo msg.str(""); m_delay = m_quantum_keeper.get_local_time(); msg << "Initiator: " << m_ID << " b_transport(GP, " << m_delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); initiator_socket->b_transport(*transaction_ptr, m_delay); gp_status = transaction_ptr->get_response_status(); if(gp_status == tlm::TLM_OK_RESPONSE) { msg.str(""); msg << "Initiator: " << m_ID << " b_transport returned delay = " << m_delay << " and quantum keeper to be set" << endl << " "; REPORT_INFO(filename, __FUNCTION__, msg.str()); m_quantum_keeper.set(m_delay); if(m_quantum_keeper.need_sync()) { msg.str(""); msg << "Initiator: " << m_ID << " the quantum keeper needs synching"; REPORT_INFO(filename, __FUNCTION__, msg.str()); m_quantum_keeper.sync(); msg.str(""); msg << "Initiator: " << m_ID << " return from quantum keeper synch"; REPORT_INFO(filename, __FUNCTION__, msg.str()); } } else { msg << "Initiator: " << m_ID << " Bad GP status returned = " << gp_status; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } response_out_port->write(transaction_ptr); // return txn to traffic gen } // end while true } // end initiator_thread systemc-2.3.4/examples/tlm/common/src/at_initiator_annotated.cpp0000644000175000017500000004307114342422106025012 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================= /// @file at_initiator_annotated.cpp /// @Details Implements a AT non-blocking initiator // //============================================================================= // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX //============================================================================= #include "reporting.h" // Reporting convenience macros #include "at_initiator_annotated.h" // Our header #include "tlm.h" // TLM headers using namespace sc_core; static const char *filename = "at_initiator_annotated.cpp"; /// filename for reporting //============================================================================= ///Constructor at_initiator_annotated::at_initiator_annotated // constructor ( sc_module_name name // module name , const unsigned int ID // initiator ID , sc_core::sc_time end_rsp_delay // delay ) : sc_module (name) /// init module name , initiator_socket ("initiator_socket") /// init socket name , m_send_end_rsp_PEQ ("send_end_rsp_PEQ") /// init PEQ name , m_ID (ID) /// init initiator ID , m_end_rsp_delay (end_rsp_delay) /// init end response delay { // bind initiator to the export initiator_socket (*this); // register thread process SC_THREAD(initiator_thread); // register method process SC_METHOD(send_end_rsp_method); sensitive << m_send_end_rsp_PEQ.get_event(); dont_initialize(); } //============================================================================= // // Initiator thread // //============================================================================= void at_initiator_annotated::initiator_thread(void) // initiator thread { tlm::tlm_generic_payload *transaction_ptr; // transaction pointer std::ostringstream msg; // log message while (true) { //============================================================================= // Read FIFO to Get new transaction GP from the traffic generator //============================================================================= transaction_ptr = request_in_port->read(); // get request from input fifo tlm::tlm_phase phase = tlm::BEGIN_REQ; // Create phase objects sc_time delay = SC_ZERO_TIME; // Create delay objects msg.str(""); msg << "Initiator: " << m_ID << " starting new transaction" << endl << " " << "Initiator: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Make the non-blocking call and decode returned status (tlm_sync_enum) //----------------------------------------------------------------------------- tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")" << endl; switch (return_value) { //----------------------------------------------------------------------------- // The target returned COMPLETED this is a 1 phase transaction // Wait the annotated delay // Return the transaction to the traffic generator // Make the next request //----------------------------------------------------------------------------- case tlm::TLM_COMPLETED: { wait(delay + m_end_rsp_delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " target returned COMPLETED with annotated time "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); response_out_port->write(transaction_ptr); // return txn to traffic gen break; }// end case TLM_COMPLETED //----------------------------------------------------------------------------- // Target returned UPDATED //----------------------------------------------------------------------------- case tlm::TLM_UPDATED: { //----------------------------------------------------------------------------- // Put poiter in waiting backware path map // Wait the annotated delay // Make the next request //----------------------------------------------------------------------------- if( phase == tlm::END_REQ) { m_waiting_bw_path_map.insert(make_pair(transaction_ptr ,Rcved_END_REQ_enum )); wait(delay); // wait the annotated delay msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); } //----------------------------------------------------------------------------- // Wait the annotated delay // Use payload event queue to schedule sending end response // Make the next request //----------------------------------------------------------------------------- else if( phase == tlm::BEGIN_RESP) { msg << " " << "Initiator: " << m_ID << " transaction moved to send-end-response PEQ " << endl; wait(delay); // wait the annotated delay m_send_end_rsp_PEQ.notify (*transaction_ptr, m_end_rsp_delay); msg << " " << "Initiator: " << m_ID << " " << " (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO (filename, __FUNCTION__, msg.str() ) } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- else { msg << " " << "Initiator: " << m_ID << " Unexpected phase for UPDATED return from target "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } break; } // end case TLM_UPDATED //----------------------------------------------------------------------------- // Target returned ACCEPTED this an explicit response // Add the transaction pointer to the waiting backward path map // END REQUEST RULE wait for the target to response //----------------------------------------------------------------------------- case tlm::TLM_ACCEPTED: { msg << " " << "Initiator: " << m_ID << " transaction waiting end-request on backward-path "; REPORT_INFO (filename, __FUNCTION__, msg.str() ); // use map to track transaction including current state information m_waiting_bw_path_map.insert (make_pair (transaction_ptr ,Rcved_ACCEPTED_enum )); wait (m_enable_next_request_event); // wait for the target to response break; } // end case TLM_ACCEPTED //----------------------------------------------------------------------------- // All case covered default //----------------------------------------------------------------------------- default: { msg << " " << "Initiator: " << m_ID << " Unexpected response to BEGIN_REQ "; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); break; } } // end case } // end while true } // end initiator_thread //============================================================================= /// @fn at_initiator_annotated::nb_transport_bw // /// @brief non-blocking transport from targets // //============================================================================= tlm::tlm_sync_enum at_initiator_annotated::nb_transport_bw // inbound nb_transport_bw ( tlm::tlm_generic_payload& transaction_ref // generic payload , tlm::tlm_phase& phase // tlm phase , sc_time& delay // delay ) { tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; // return status reject by default std::ostringstream msg; // log message //============================================================================= // Check waiting backward path map of valid transaction //============================================================================= waiting_bw_path_map::iterator transaction_inter; // create interator for map transaction_inter = m_waiting_bw_path_map.find(&transaction_ref); if (transaction_inter == m_waiting_bw_path_map.end() ) { //============================================================================= // The transaction pointer used by the backward path call does not belong // to this initiator, this is a major error //============================================================================= msg << " " << "Initiator: " << m_ID << " Received invalid transaction pointer"; REPORT_FATAL (filename, __FUNCTION__, msg.str() ); } //============================================================================= // Normal operation // Decode backward path phase //============================================================================= else { msg.str (""); msg << "Initiator: " << m_ID << " nb_transport_bw (GP, " << report::print(phase) << ", " << delay << ")" << endl; switch (phase) { //----------------------------------------------------------------------------- // Target has responded with END_REQ // notify enable next request event //----------------------------------------------------------------------------- case tlm::END_REQ: { msg << " " << "Initiator: " << m_ID << " transaction waiting begin-response on backward path" << endl; m_enable_next_request_event.notify(SC_ZERO_TIME); transaction_inter->second = Rcved_END_REQ_enum; status = tlm::TLM_ACCEPTED; msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } //----------------------------------------------------------------------------- // Target has responded with BEGIN_RESP // Use payload event queue to schedule sending end response // If there was no END REQUEST this ends the request phase notify // enable next request event //----------------------------------------------------------------------------- case tlm::BEGIN_RESP: { msg << " " << "Initiator: " << m_ID << " transaction moved to send-end-response PEQ " << endl; // check for a synthetic 3-phase transaction (BEGIN_RESP without END_REQ) ????? if (transaction_inter->second == Rcved_ACCEPTED_enum) { m_enable_next_request_event.notify(SC_ZERO_TIME); } m_waiting_bw_path_map.erase(&transaction_ref); // erase from map phase = tlm::END_RESP; // set appropriate return phase delay = m_end_rsp_delay; // wait for the response delay status = tlm::TLM_COMPLETED; // return status response_out_port->write(&transaction_ref); // transaction to rsp fifo port msg << " " << "Initiator: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")" ; REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } // end case BEGIN_RESP //----------------------------------------------------------------------------- // Invalid phase for backward path //----------------------------------------------------------------------------- case tlm::BEGIN_REQ: case tlm::END_RESP: { msg.str (""); msg << m_ID << " Illegal phase on backward path "; REPORT_FATAL(filename, __FUNCTION__, msg.str() ); break; } //----------------------------------------------------------------------------- // Unknown phase on backward path //----------------------------------------------------------------------------- default: { msg.str (""); msg << m_ID << " Unknown phase on the backward path "; REPORT_WARNING (filename, __FUNCTION__, msg.str() ); break; } } // end switch (phase) } return status; } // end backward nb transport //============================================================================= /// @fn at_initiator_annotated::send_end_rsp_method // /// @brief send end response method // /// @details This method is scheduled to send the end-response timing point. /// It is sensitive to the m_send_end_rsp_PEQ.get_event() event. // //============================================================================= void at_initiator_annotated::send_end_rsp_method(void) // send end response method { tlm::tlm_generic_payload* transaction_ptr; std::ostringstream msg; // log message //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_send_end_rsp_PEQ.get_next_transaction()) != NULL) { tlm::tlm_phase phase = tlm::END_RESP; // set the appropriate phase sc_time delay = SC_ZERO_TIME; msg.str(""); msg << "Initiator: " << m_ID << " starting send-end-response method" << endl << " " << "Initiator: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); // call begin response and then decode return status tlm::tlm_sync_enum return_value = initiator_socket->nb_transport_fw(*transaction_ptr, phase, delay); msg.str(""); msg << "Initiator: " << m_ID << " " << report::print(return_value) << " (GP, " << report::print(phase) << ", " << delay << ")"; switch (return_value) { case tlm::TLM_COMPLETED: // transaction complete { response_out_port->write(transaction_ptr); // send GP to output rsp fifo REPORT_INFO (filename, __FUNCTION__, msg.str() ); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: { msg << " " << "Initiator: " << m_ID << report::print(return_value) << " Invalid return value for END_RESP "; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } default: { msg << " " << "Initiator: " << m_ID << report::print(return_value) << " Unknown return value for END_RESP "; REPORT_FATAL(filename, __FUNCTION__, msg.str()); break; } } // end switch } // end while return; } // end send_end_rsp_method //============================================================================= /// @fn at_initiator_annotated::invalidate_direct_mem_ptr // /// @brief invalidate direct memory pointer Not implemented //============================================================================= void at_initiator_annotated::invalidate_direct_mem_ptr // invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ // start range , sc_dt::uint64 /*end_range*/ // end range ) { std::ostringstream msg; // log message msg.str (""); msg << m_ID << " invalidate_direct_mem_ptr: not implemented"; REPORT_INFO(filename, __FUNCTION__, msg.str()); } systemc-2.3.4/examples/tlm/common/src/at_target_2_phase.cpp0000644000175000017500000003232214342422106023637 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_2_phase.cpp // /// @brief Implements single phase AT target // //===================================================================== // Original Authors: // Charles Wilson, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_target_2_phase.h" // our header #include "reporting.h" // reporting macros using namespace std; static const char *filename = "at_target_2_phase.cpp"; ///< filename for reporting SC_HAS_PROCESS(at_target_2_phase); ///Constructor at_target_2_phase::at_target_2_phase ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_request_count (1) /// init request count , m_nb_trans_fw_prev_warning(false) , m_begin_resp_method_prev_warning(false) , m_trans_dbg_prev_warning(false) , m_get_dm_ptr_prev_warning(false) , m_response_PEQ ("response_PEQ") , m_target_memory /// init target's memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { /// Bind the socket's export to the interface m_memory_socket(*this); /// Register begin_reponse as an SC_METHOD /// Used to implement force synchronization multiple timing points SC_METHOD(begin_response_method); sensitive << m_response_PEQ.get_event(); dont_initialize(); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void at_target_2_phase::b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; // log message msg.str(""); sc_core::sc_time mem_op_time; m_target_memory.operation(payload,mem_op_time); msg << "Target: " << m_ID << " returned delay of " << delay_time << " + " << m_accept_delay << " + " << mem_op_time; delay_time = delay_time + m_accept_delay + mem_op_time; msg << " = " << delay_time; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================= // nb_transport_fw implementation calls from initiators // //============================================================================= tlm::tlm_sync_enum // synchronization state at_target_2_phase::nb_transport_fw // non-blocking transport call through Bus ( tlm::tlm_generic_payload &gp // generic payoad pointer , tlm::tlm_phase &phase // transaction phase , sc_core::sc_time &delay_time) // time it should take for transport { std::ostringstream msg; // log message msg.str(""); msg << "Target: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay_time << ")"; tlm::tlm_sync_enum return_status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // decode phase argument //----------------------------------------------------------------------------- switch (phase) { //============================================================================= case tlm::BEGIN_REQ: { //----------------------------------------------------------------------------- // Force synchronization multiple timing points by returning TLM_ACCEPTED // use a payload event queue to schedule BEGIN_RESP timing point //----------------------------------------------------------------------------- m_target_memory.get_delay(gp, delay_time); // get memory operation delay delay_time += m_accept_delay; m_response_PEQ.notify(gp, delay_time); // put transaction in the PEQ delay_time = m_accept_delay; phase = tlm::END_REQ; // advance txn state to end request return_status = tlm::TLM_UPDATED; // force synchronization msg << endl << " " << "Target: " << m_ID << " transaction moved to send-response PEQ "; msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } // end BEGIN_REQ //============================================================================= case tlm::END_RESP: { m_end_resp_rcvd_event.notify (sc_core::SC_ZERO_TIME); return_status = tlm::TLM_COMPLETED; // indicate end of transaction msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } //============================================================================= case tlm::END_REQ: case tlm::BEGIN_RESP: { msg << "Target: " << m_ID << " Illegal phase received by target -- END_REQ or BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_ACCEPTED; break; } //============================================================================= default: { return_status = tlm::TLM_ACCEPTED; if(!m_nb_trans_fw_prev_warning) { msg << "Target: " << m_ID << " default phase encountered"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_nb_trans_fw_prev_warning = true; break; } } return return_status; } //end nb_transport_fw //============================================================================= /// begin_response method function implementation // // This method is statically sensitive to m_response_PEQ.get_event // //============================================================================= void at_target_2_phase::begin_response_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer msg.str(""); tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_response_PEQ.get_next_transaction()) != NULL) { msg.str(""); msg << "Target: " << m_ID << " starting response method"; REPORT_INFO(filename, __FUNCTION__, msg.str()); sc_core::sc_time delay = sc_core::SC_ZERO_TIME; m_target_memory.operation(*transaction_ptr, delay); /// perform memory operation tlm::tlm_phase phase = tlm::BEGIN_RESP; delay = sc_core::SC_ZERO_TIME; msg.str(""); msg << "Target: " << m_ID << " nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME)"; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase BEGIN_RESP check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg.str(""); msg << "Target: " << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); switch (status) { //============================================================================= case tlm::TLM_COMPLETED: { next_trigger (delay); // honor the annotated delay return; break; } //============================================================================= case tlm::TLM_ACCEPTED: { next_trigger (m_end_resp_rcvd_event); // honor end-response rule return; break; } //============================================================================= case tlm::TLM_UPDATED: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to BEGIN_RESP"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } //============================================================================= default: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " undefined return status "; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } }// end switch } // end while next_trigger (m_response_PEQ.get_event()); } //end begin_response_queue_active //============================================================================== // Methods Required by Target Interface but not Implemented for this Example // Not implemented for this example but required by interface bool at_target_2_phase::get_direct_mem_ptr (tlm::tlm_generic_payload & /*payload*/, ///< address + extensions tlm::tlm_dmi & /*data*/ ///< dmi data ) { // THis is not a fatal, print first as warning std::ostringstream msg; msg.str(""); if(!m_get_dm_ptr_prev_warning) { msg << "Target: " << m_ID << " DMI not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_get_dm_ptr_prev_warning = true; return false; } // Not implemented for this example but required by interface unsigned int // result at_target_2_phase::transport_dbg ( tlm::tlm_generic_payload & /*payload*/ ///< debug payload ) { std::ostringstream msg; msg.str(""); if(!m_trans_dbg_prev_warning) { msg << "Target: " << m_ID << " DBG(debug) not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_trans_dbg_prev_warning = true; return false; } systemc-2.3.4/examples/tlm/lt/0000755000175000017500000000000014342422106016116 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/test.am0000644000175000017500000000514414342422106017420 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: lt ## %C%: lt examples_TESTS += lt/test lt_test_CPPFLAGS = \ -I$(srcdir)/lt/include \ $(CPPFLAGS_TLMTESTS) lt_test_SOURCES = \ $(lt_H_FILES) \ $(lt_CXX_FILES) examples_BUILD += \ $(lt_BUILD) examples_CLEAN += \ lt/run.log \ lt/expected_trimmed.log \ lt/run_trimmed.log \ lt/diff.log examples_FILES += \ $(lt_H_FILES) \ $(lt_CXX_FILES) \ $(lt_BUILD) \ $(lt_EXTRA) examples_DIRS += \ lt/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details lt_H_FILES = \ lt/include/initiator_top.h \ lt/include/lt_top.h lt_CXX_FILES = \ lt/src/initiator_top.cpp \ lt/src/lt.cpp \ lt/src/lt_top.cpp lt_BUILD = \ lt/results/expected.log lt_EXTRA = \ lt/README \ lt/CMakeLists.txt \ lt/build-msvc/Makefile \ lt/build-msvc/lt.sln \ lt/build-msvc/lt.vcxproj \ lt/build-unix/Makefile \ lt/docs/lt_example.pdf \ lt/docs/lt_example.ppt #lt_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/lt/build-msvc/0000755000175000017500000000000014342422106020163 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/build-msvc/lt.vcxproj0000644000175000017500000003141014342422106022216 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {8235921F-4E7D-455C-9C15-48B891B95573} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/lt/build-msvc/lt.sln0000644000175000017500000000231014342422106021314 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt", "lt.vcxproj", "{8235921F-4E7D-455C-9C15-48B891B95573}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|Win32.ActiveCfg = Debug|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|Win32.Build.0 = Debug|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|x64.ActiveCfg = Debug|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|x64.Build.0 = Debug|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|Win32.ActiveCfg = Release|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|Win32.Build.0 = Release|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|x64.ActiveCfg = Release|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/lt/build-msvc/Makefile0000644000175000017500000000060114342422106021620 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = lt OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\lt_initiator.obj \ \ $(OUTDIR)\at_target_1_phase.obj \ $(OUTDIR)\lt_target.obj \ $(OUTDIR)\initiator_top.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/lt/README0000644000175000017500000000041314342422106016774 0ustar carstencarstenThis directory contains an example of a simple TLM platform implemented on top of the blocking transport interface. The convenience API is the same as in the example lt_min_system. Using: * cd build-unix * set SYSTEMC_HOME environment variable * make * make run systemc-2.3.4/examples/tlm/lt/docs/0000755000175000017500000000000014342422106017046 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/docs/lt_example.ppt0000644000175000017500000076700014342422106021737 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`v( */ 0`DArialr Newman8x2 0x"D-3 00000ewman8x2 0x" DWingdingswman8x2 0x0DMonotype Sorts8x2 0x@DArial Narrows8x2 0x"PDTimes New Roman8x2 0x`DTahomaew Roman8x2 0x"pDCourier Newman8x2 0x1@.  @n?" dd@  @@`` !;      4 C / 9)?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8  <4dddd 0g4^d^d2 0ppp@ <4!d!d 0l8<4BdBd 0l8 NO ʚ;j8ʚ;1)___PPT12 %h___PPT2001D<4X___PPTMac11@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography ___PPT10D-3 00000ewllp2 0p"DCourier Newllp2 0p1 pp? O P!", / * # % 4605/pBm  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> @N( ԩة   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  NV?Rectangle 4P  T Click to edit Master title style! !.  HXV?Rectangle 5P0 V RClick to edit Master text styles Second level Third level Fourth level Fifth level!     Sv   N V?Rectangle 6"pjPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!v ` drs/shapexml.xmlVM6 x-h܅ޠǂjTI[ ):AQqC̛yzP)֕F'ǙԙK5g eLQ:^SW3lnZ'|}=v]pL-5 c+hNj/<U;J([+KVv[YV FgZT{/3$$n4ֵɈI&b ?˃iޢ>bZH;q!SR.c, =%FX/-G-q yءr09N7@DL.1E0#pzװQʃg-,p+ToL;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!v ` *drs/shapexml.xmlPK-!Zdrs/downrev.xmlPK_, V   hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS'#PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK! ,!drs/slideMasters/slideMaster1.xmlZ͎FG;>f0fi#Yrnp& jG+Di)9%oyyTgqvli5fCQnQ]_u] iEXGAsIzԧsy}%[HJ8SD8hMbo&|D4vx y f 1lޛ2\AOSbyvl{[ #dI-qbve/ cpשAKF/ɡ(f\A6 x+x[euxo2Tun4]oi,k}}8T)h"(# =5Rjk8Y3jEmn.AR%4qwOJ T[EM(tP{j-4 v_f+BKKwJRߨU9_MgQEgQ@1a` bmkpDL`&Th TO?oR,M17w~~o?ejVN:/ e(i<w6/mXݍƋѰ$:TcTU7M_ Wп<;TTyu-q'cmSgoyP;CvE4]Qi1ky*?PntJZMqjӳn-gv7IVS VNi`t8IU]]=-nk9mSeGË/+;z Y5A0 B7M 7)Fb؝@qܳ5")Lm`A 1r}k$8BJwNW:9 J{42lR->-͓SѰu tV͚-[рRP4lh' k)΍Y??[JZ\|&y/PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-! ,!drs/slideMasters/slideMaster1.xmlPK3PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] : !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKBPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlX]o6} qCmԨ]H Ei$;lk͋#{ov BP: &Sj2aPb 22r`0|u-Ayzţ7.AOo<pO2&# d2& 6=4_d)L1`4veyVqGv h#2W[ƍ{$JFb!՗"wR0{S`@l2|d AZp2Bn)f4C),م7`)i!78ĀB$" .rCˈ0qvtx0,gn!1~o柊iG#ۺx:nUwt0̆lw|#:]U %!B´WKhy,|{(V)+3`ۅ>[=CnLm HqBbqwn倮C "'<x# xt @<N$P<8]H(prP<8]2xМN ޴'I!6K9q+hx:mkk~r+BٷNcfHUt Go?\'Iw6%_rlIsWHNm)0oh c-N>xLj:fGp]N+<. cY޳<(W1t,eXzTN/]59Zʳ;s)HSMkWjڤ EΞpBUS< iIĽI,聦3g2{+%Vfԩ.=벣_UgRzp#ن]r]]ᐵHmj; " ﹺ҇VLVOps2O1Ηu+XSmCg[\H$2q ex&s=]i79Mto+)NݢޒKuߩ?_WIU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPK`ZPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{PPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!eiX<!drs/slideLayouts/slideLayout1.xmlXnF_`g,XUKUl{݌g>}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> 0t"(  t t A"??"system_c_title_9Picture 2system_c_title_9 t Npg?Rectangle 4P  T Click to edit Master title style! !. t HV?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB t s *޽h ? ̙3380___PPT10.YS'#PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK! ,!drs/slideMasters/slideMaster1.xmlZ͎FG;>f0fi#Yrnp& jG+Di)9%oyyTgqvli5fCQnQ]_u] iEXGAsIzԧsy}%[HJ8SD8hMbo&|D4vx y f 1lޛ2\AOSbyvl{[ #dI-qbve/ cpשAKF/ɡ(f\A6 x+x[euxo2Tun4]oi,k}}8T)h"(# =5Rjk8Y3jEmn.AR%4qwOJ T[EM(tP{j-4 v_f+BKKwJRߨU9_MgQEgQ@1a` bmkpDL`&Th TO?oR,M17w~~o?ejVN:/ e(i<w6/mXݍƋѰ$:TcTU7M_ Wп<;TTyu-q'cmSgoyP;CvE4]Qi1ky*?PntJZMqjӳn-gv7IVS VNi`t8IU]]=-nk9mSeGË/+;z Y5A0 B7M 7)Fb؝@qܳ5")Lm`A 1r}k$8BJwNW:9 J{42lR->-͓SѰu tV͚-[рRP4lh' k)΍Y??[JZ\|&y/PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-! ,!drs/slideMasters/slideMaster1.xmlPK3PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] : ~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b*}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn8}_`"MƨR$] 8E)H|PӢ(8˙33omZ#VڇLN^жpec2!*[*V?v \aeFu+iVEQu6GǯGj)ZtsORq{є{|q&U->1<-NhPK7˜bXԯRzF߄!{>m o{*}Ƿ "REv.=z^p%!ˀlEJ\S}t@AM7oM츪L[z"p5՛( |<a&kwt$ eңtZB$.ȝuw1Ǧ9{9"cmr Ӵx%PؒUjLyU!yd}lX[[ܸrKrH hvYWh@ R-99;c"0g/O'ooFRLF)xFsm.w{|VA{UğtJ0"n1&m̄TKNǼKzgx/4bKܤY8pB&NY .5A3.JV=| I%6*w0:C`b^Ąd`H]}]+Up([7{i_ՉZp\yE4XmӺ*ImO>-b`Nhfm`݂%)J&NrP'K4覡gs\E2ŗ~)R4>\yމ*еoh5TȪV>hfŭZ{UE:@ g7MHW_PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!3]drs/downrev.xmlPK.,  V   hdman`  Arial&Monotype Typography  `   ab0|ay>z/  4 `dVy˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!%zdrs/shapexml.xmlUn7}/ Z8|u`uZ@5A\ܒ\]=C$'6҃4s9sfMkJ-Ø3e}-ǓkBYU ?}즡cxlô+xc7lT+)VD*(E֌NQ+0eWnIOg*3+Zx}V1hP/˜9 C,RyF_>Co{n .TH)aq!*rD9(g :'+ DMc ;]__N8|LD&quzs5wWC,@rGP=JrYQsl)Gc58HȒVGm>TƯJ*Qhe$hl¼<>6,B--n]%%~A܅?|? 8 4A^qf~8ÙS}Lj$a%}Ňϵ3$)hSn NeܢnSq1q$$LYydbf2eFd[ r 4Ճl%PȓL!Cndi7ym@xN\_m+$@d/\ D Ǭx@+E a:<t \ƌdiVw7B'wuQM_G?ĶdNw~iyͅ :@ nizPK!gdrs/downrev.xmlDMK1E!z 4 H ?Rectangle 4  V  4 `%`y˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!k6gdrs/shapexml.xmlX_O#7`BA.\+PD89^komoU*uT(T}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn7}/ Z8!6꤀jfomEJ"g9j@S'EL,k$U̺-Mx %@ ŷ "R]me=z)NpզgӬlf_Wb}sl:d5t[-"&jr 1fC02TpBj"AzpA|cͰuƧp,Yn4ˌn>Tb߶J*Qhe$hl¼<>6,B//nn]%%~Aܓ(^%Yqf脫!q3|}cΙVJX-xY"ND>״"NmO>B{ɺN2bB-Ƒ$[+3fUbjo2%DCcdY rFS`DDo3"^Hug<[ 7y|d;)!]gO,o:ATImDa gIs$_cS;oғRÓAg Vd qouw+p{Se#n4-t7$S|y~@2Mn%X*6d-$ZFrq/mzNj!|Pmɜ^% u>d7!мPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,  `   hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 fy˼y˼?Rectangle 7"rlPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!w$) drs/shapexml.xmlVMo7 x-Iu VZ@5A˵[}Cd'6joaÙ7CNZWgR&+S?<[#Μ:ht͏?&b8ݤJjnt#KޘJjƖ>++^x\TU3hnU--Ҳ"Kug8L>1<)Ɇݘa,LuM,ĒYGyoIwɩf"s3mNjDJTt*K?jaoN#pCld jor[^1ypht9;&|4F>b"0¢U?# %f(j>T̝΂k$t<ϑ<4,Bdi&;k|TQ.tjc3g{+ G_4$1z`/3;;.gF} kלgJ^U)hx(lǃfmS(Wq!$NuIB=aBR,̨݆m,kA&SS蒬ȉ3Ȉᅚ)vC5Xhg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!w$) *drs/shapexml.xmlPK-!1[drs/downrev.xmlPKaq2 , `   hdman`  Arial&Monotype Typography  x*   ab0|ay>zB 4 s *ηo~ ? 3380___PPT10.1?[ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[ 'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!; ,!drs/slideMasters/slideMaster1.xmlKn0z,?!rP I@ӔEոGmyoW7Pƚ̷&%6\2{#ƙ3}8UTlq^u܉ެloz(YvY y fI~}kC+ ٢x f/@_xvK͎EzaUA=W_W?_INoLϤerz<3mDa48@y]$#PN<GClt:1<(^nS8L_rF߅9sʚ,$[ 9+(?T  {]}9U@V ήX*^@p׌^@Nq(es ֿyPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!; ,!drs/slideMasters/slideMaster1.xmlPK  0 y8#( #zSmM 8L 8 C dV0e0et?Rectangle 2D@  V h2TLM 2.0 Loosely Timed (LT) System Example - Simple33 8 C  V0e0et?Rectangle 3 @ P V =Jack Donovan, Anna Keist, Charles Wilson ESLX, Inc. June 2008>U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10." 0 &P@(  @ @  xAV0e0e?Rectangle 2P  V 8$AT System Example - Annotated Timing @  xo0e0e?Rectangle 3 V &The Goal is to Illustrate: Application of TLM 2.0 in a real system Annotated non-blocking (NB) option of the non-blocking style NB annotated timing has been referred to as "1 phase" Simplest version of non-blocking/AT Possible Applications: Architectural exploration Early software developmentbfZ5fZ  5 X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"7 0 ^7V7` H7(  H H  xr0e0e?Rectangle 2P   )Example Block Diagram H L?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H bn?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx' H h|$o?Rectangle 21p ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Target Module (lt_target)^ GG gG  V]8Xx H h@o?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router (SimpleBusLT)J G GG  V]8Xx/ H hto?Rectangle 23` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  !Initiator Module (initiator_top)^" GG gG  V]8Xxj  H hܑo?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)r! GG gGG  V]8Xx!   H hpo?Rectangle 25` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  !Target Module (at_1_phase_target)^" GGgG V]8Xxb  H bPÞ?AutoShape 26P@   hdman`  Arial&Monotype Typography  < V]8Xxb  H bh?AutoShape 27P`   hdman`  Arial&Monotype Typography  < V]8Xxb  H bŞ?AutoShape 28P    hdman`  Arial&Monotype Typography  < V]8Xxb  H b$?AutoShape 29P @   hdman`  Arial&Monotype Typography  < V]8Xx6 H S ޽h ? ̙3380___PPT10. "" 0 [SpP(  P P  x|ߞ0e0e?Rectangle 2P   3How to run this example (Linux) P  x0e0e?Rectangle 3P0  HSet SYSTEMC_HOME cd examples/tlm/lt/build-unix make clean make make run >IA A9A,V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0 zrT(  T T  x@0e0e?Rectangle 2P   2How to run this example (MSVC) T  x0e0e?Rectangle 3P0  VOpen a explorer window on examples/tlm/lt/build-windows Launch lt.sln Select  Property Manager from the  View menu Under  lt > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run,,ZA C A  $$ ((,,00 4488 <<      A $$88P# 7V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt" 0 ,$X(  X0 X  x0e0e?Rectangle 2P   dExpected Output (expected.log)* A^ X <$  `Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: report.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 80 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: report.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 80 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns"a`L  >L H    >L H  6 X S ޽h ? ̙3380___PPT10.ntDw;" 0 33\(  \ \  xY0e0e?Rectangle 3P   &Initiator Module yz P  \C ,Group 129"P     \C ,Group 130" & .\ P^?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /\C ,Group 132" > P  0\C ,Group 133" p 2\ d3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3\  ؉B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1\ T?Line 136      \C ,Group 137"  # (\ P,?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )\C ,Group 139"  > P  *\C ,Group 140"  p ,\ d쑘3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -\  B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +\ T?Line 143    \C ,Group 144"  $\ P@?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %\C ,Group 146" B &\ T?Line 147P P '\ d,ʘ>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p \C ,Group 149"P p  \ P՘?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !\C ,Group 151"P pB "\ T?Line 152P  #\ j%,>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ \ jTo?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx \ J?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx \ ^$?AutoShape 156p V q  \ ^ ?AutoShape 157  \ ^ ?AutoShape 158 P  \ ^$?AutoShape 159q Vq 6z P   \C ,Group 160" P  \ dD3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB \  HEB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   \ ^G?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  #TLM Interface Module (lt_initiator)6$ #GG  V]8Xx6z P   \C ,Group 164" P  \ d3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB \  B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  \ ^*?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx \ d->]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx \ dg>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx \ ds>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= \ dds?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> \ d]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ \ PȎs?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB \@ Z?Line 177   6 \ S ޽h ?o\\\\\\\\\\ \\\\\\\ ̙3380___PPT10. ""nF 0 EE1BdD(  d d  x8s0e0e?Rectangle 3P  s )TLM Interface Module  x   dC *Group 35" $ =d NȦs?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >dC *Group 37" 8 P  ?dC *Group 38" p Ad bs3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bd  sB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @d R?Line 41  x    dC *Group 42" ! 7d N}s?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8dC *Group 44"  8 P  9dC *Group 45"  p ;d b8s3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p dC *Group 54"P p 1d N(s?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2dC *Group 56"P pB 3d R?Line 57P  4d h%,fs>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx d fDso?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  d Fl?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  $TLM Interface Module (lt_initiator) J% 2G GG  V]8Xx  d@ Z$?AutoShape 6 v0x P   dAC *Group 59"`H  /d b]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   dC *Group 86"c B +d R?Line 87P P ,d b3>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx d \8c?AutoShape 90^XH  d@ \8c?AutoShape 92cH 7 !d PLt?Text Box 105[r0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   b_transport*     V]8XxB "d@ Z?Line 106M; %d Pt?Text Box 10970(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &d P8t?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'd Z?Line 111pvxB (d Z?Line 1125'o/= )d J+?Text Box 11350(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  simple_initiator_socket*  V]8XxB *d@ Z?Line 114[+6 d S ޽h ?O ddddd.ddd,dd ̙3380___PPT10. ""9 0 99'.hP8(  h h  x%0e0e?Rectangle 2P   PTarget Module (lt_target)  9v P  hC (Group 3"P  ~   hC (Group 4" " )h Lh+?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   *hC (Group 6" 2~ P  +hC (Group 7" p -h ` 3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB .h   B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB ,h R?Line 10      hC *Group 11"  ! #h N\?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    $hC *Group 13"  8 P  %hC *Group 14"  p 'h b$~3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB (h  $B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB &h R?Line 17    hC *Group 18"  h N,?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx    hC *Group 20" B !h R?Line 21P P "h b\>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p hC *Group 23"P p h N<?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p hC *Group 25"P pB h R?Line 26P  h h%,>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx h ho?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xxz h HL?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Target Module (lt_target) J 2G GG  V]8Xx h@ \$?AutoShape 30P-" h bD?AutoShape 31&    hdman`  Arial&Monotype Typography  w b_transport"   G  V]8Xx0x P  hC *Group 32"P h b(e3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB h  QB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx"2  h X<?Oval 36V0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8Xx  h \8c?AutoShape 40   h b8c?AutoShape 41 h h Ni?Text Box 43.(J___PPTMac11$   hnamd` Arial&Monotype Typography  <___PPT10R___PPT94,(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  $memory_socket (simple_target_socket):%  $  V]8XxB h X?Line 44K+6 h S ޽h ??`hhhh hh h h ̙3380___PPT10. ""R8 0 77@((6(     ~L0e0e?Rectangle 2P   6"Target Module (at_1_phase_target) {| P  S .Group 3"P     S .Group 4" "  Lcg?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxV   S .Group 6" 8 P  S .Group 7" p  ` P  S 0Group 14"  p  b| g3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB   gB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB  R?Line 17    S 0Group 18"   N g?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   S 0Group 20" B  R?Line 21P P  bd[g>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p S 0Group 23"P p  Ng?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p S 0Group 25"P pB  R?Line 26P   h%,Tf>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx  h<fo?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xx`  Hf?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_1_phase_target) J# 2GGG V]8Xx @ \$?AutoShape 30P-"  bf?AutoShape 31&    hdman`  Arial&Monotype Typography  w b_transport"   G  V]8Xx6~ P   S 0Group 32"P ! b@*f3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB "  P+fB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx"2 # X4>f?Oval 36V0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8Xx $ \8c?AutoShape 40  % b8c?AutoShape 41 7 & NNf?Text Box 43.}U0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB ' X?Line 44K+ ( HXfGQHM s mZ  ?AT code6  S ޽h ?Op"$#%( ̙3380___PPT10. "I 0 HH88lG( zSmM l l  xbf0e0e?Rectangle 2P  f &Router Component Gx P  lC *Group 56"P     !lC *Group 57" $ 3l Ngf?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   4lC *Group 59" 8 P  5lC *Group 60" p 7l btuf3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  < V]8XxB 8l  }fB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 62P    hdman`  Arial&Monotype Typography  < V]8XxB 6l R?Line 63      "lC *Group 64"  ! -l Npf?Text Box 65 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    .lC *Group 66"  8 P  /lC *Group 67"  p 1l bf3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  < V]8XxB 2l  fB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 69P    hdman`  Arial&Monotype Typography  < V]8XxB 0l R?Line 70    #lC *Group 71"  )l Nf?Text Box 72 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   *lC *Group 73" B +l R?Line 74P P ,l bf>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p $lC *Group 76"P p %l N0f?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p &lC *Group 78"P pB 'l R?Line 79P  (l h%,f>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8Xx(x   lC *Group 99" ^ l ffo?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx l F|f?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusLT<2,2>)L 0 P2GGG  V]8Xx l \$?AutoShape 13  P  l \$?AutoShape 17PPP   l \$?AutoShape 4601P   l \$?AutoShape 47ppP `  l N<`?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (2)" G V]8Xx  l V?AutoShape 51   l V?AutoShape 52@ c l N`?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx l V?AutoShape 54  l V?AutoShape 55   0  lC *Group 89" @P l b,`3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 84 0 0 B  l XjJ?Line 850 0   0  lC *Group 90"P l b`3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 87 0 B l XjJ?Line 88 0   0  lC *Group 91"P l bB`3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 93 0 B l XjJ?Line 94 0   0  lC *Group 95"P l bK`3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 97 0 0 B l XjJ?Line 980 0 6 l S ޽h ? llll l l l l l lllll ̙3380___PPT10. ""1 0 p'( zSmM p p  x|`0e0e?Rectangle 2P  ` #Expected TimingB p \Ԕ?Line 4"BB p \Ԕ?Line 5"B~~B p d8c?Line 20"}0 p N `?Text Box 22"_   hdman`  Arial&Monotype Typography  b_transport(GP, delay)  G   V]8XxD p T`?Text Box 42"5I0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  z lt_initiator$    V]8Xx p T^`?Text Box 53"s[T^___PPTMac1180   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography D___PPT10$b___PPT9D<(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  lt_target or at_1_phase_targetHK    V]8Xx6 p S ޽h ? ̙3380___PPT10.uk"! 0 <C(  <; < f| y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2   V <  xy˼y˼4?Rectangle 39 3  V N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0 D[(  D; D f`y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   C& D  x< y˼y˼4?Rectangle 39 3  C f- typical things   V]8Xx6 D S ηo~ ? 33" 0  La( zSmM L; L f6y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   3, L  x4y˼y˼4?Rectangle 39 3  3 l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33# 0 0`u( h `; ` fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z `  r0e0e4?Rectangle 2   C@ `  x`y˼y˼4?Rectangle 39 3   *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 ` S ηo~ ? 33rX0v~~D/3=:B= U|3\]dC* Oh+'0 0< ` l x AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne86Microsoft Office PowerPoint@?̍@ @ 8@ &sGhg  ,T%&" WMFCi <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesT'Current UserSummaryInformation(8PowerPoint Document(DocumentSummaryInformation8systemc-2.3.4/examples/tlm/lt/docs/lt_example.pdf0000644000175000017500000015550714342422106021710 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xSMo@ W10h(aHE6m PQO~ %A վB9~l*#.Į.=/_ہ"s ~}YWcG6F"kV*[%q~=w,H0_oێ#U-1T B-AF-D]C6Z[2hi= ԂZ7hkUCL[ƫ"|JY}Bտ(G.bmpPEe9KmE Q8}VzN*?IsJ٨)Xdv>h߉f~%W 4pn?2XݢHKz!7[p"q5?ȋRjEjh !OԣO[gm* g(H&x{Q@74]Bg$GA^5(as3zw #CcB1CAT6jd̑&J/|JZ@ rNRiD ,n*a:";xUuGa6X9OhR>~H(X?S3·CcK_WzNIendstream endobj 6 0 obj 614 endobj 14 0 obj <> stream xWKo7F{_A Go6j-ڠN-[%ٖӦCC+-X g΄$<~21_u7UlߡG%YwE&s=/׻ 4ΒF)&ɰ~=gF--z]7߽dN9Pwfbf] քY ()Z>ٓB9z WlY3 tϤo" \E7eePEӖig. f@Y!CY[5 @}"!9["GB<~tGCJ UC7i! w^Z00#=p9`AXcIXZl!(Yd,,F( i B !=,{CY済QfYu=!|ꄲ2B=^Yؚ񪲒m?3̃?p7lQ$ ULy&aV?ae<[7Jf~cUy5%ȦMdlTcm 1*\NL*rbhxo$=%'hOO֯KH u8.j+qۺPk,OOl=V2ضD-hm_I++B␂p&!9qn+Useq(?qzv Wݘ5PXC`O9zN]uUknaCWsUY`Pzaa^T0rf2%b|A[Dzq/6&:endstream endobj 15 0 obj 1347 endobj 27 0 obj <> stream xWKo7 F5-ns*R(]x0\'vEKif43c{0j^|+"E~$hڤWו5NqV[xRN˷EQ7<<66uN|G2OPfb+W'r*h~rh]^oD1bhf^W h ѩl٪VBJ3L:nȪ6F0X*nHa$<+{N[G޼-,E^;,^V/9)h cHȚ#AhՇ kYQc !@POEqL},n`O'DiCyXCaLMHPg (11A SVw, Uh#R޵LL9>B)"h(U|Am=CМ\-rIfO+8fG]>OrgBث/Hhe"p ,}iŖzL_"Xg ZJu5X7D)ʶ>NVvHG?v>t[w1uq^},މVN+Jrޢ)`feFA*ism3in!M H|NYPKw <_Thuh},KsIc7JgBud "`8b񃥇tO1/JyAWB0klNmv\nA_ Z4OJײ'+[/Y.oҔ|.sPӶMhky˾M2+ٶ[꿧ȓjڸie& \l(hXY;7wn ڲ].ՄfQRoN%#I<0P3 8tKZR>Y 9Ad7L藅[!7N 5 X(tf xoN ˢ/ nzLvFYO7Ǐr!qK^Q N8 Y*\k]t<{351h\HӅ|30{>DL&i)?:l3f b"?y> stream xUn@/@EP%(B!Ii N|f؍RT%bΜ9g,RQL*"ZU\- ;8[.Z\cSzFnXцqPH^IOޥBs؈Νiz3"IE_V\Z@B@+ZV+(]a*EcBr50\ %w®R֐Ԋmps IDֻ*x6ϻ1qmkBq} ll*4=-vs!f>6NkDXvVz*"K+AVd(6 gE@e=x&d!Rˆ PiKmf_uk%s]*kĵ7g] ԨpKSESRL |h׶ƈ*woQ30CD=DYx=e4la;9lOg2(67==FcE m!dJ Hedmk9Nי9Y#t< O7endstream endobj 37 0 obj 602 endobj 42 0 obj <> stream xXn7E_+q׀h//}(bEDzc|$@~eȕnVnkƈpf+9 gPwH6.ߐ[xW. QZMTs^\G_o!wegqIm|~uzD-jGEXUnӤ&)lRIu9b8>|SLynj4#ɪS]j8`(pY )՚&Zce3+emv&y-S.S+qW4 o[wz޻*n5hC,@:ƴꤑ 4N]]#_? R`iKɭ/MIctRöQ>XOAT>;ӄJ z"Wnmq! 7ٜHfu5jeVrAef#r0e&C Z3Pc]"̤EmmKD+D1}YLbC ]K$I%隤sPH}Vogjs"{IJƊ(IzOkF>++ d+dp~1q".IT,0&\\lJ]–L }F%YWtT!}#ݟZG sJԎ mJeDl)$Vk u'QUK4b-+e6)j@u͞~{ϡYa.! 1F$%&= ZN!XQee+Bt'l AA$4o{IC:K2j+xy 'Vw{blKtwB D\Qci84Q566D;mc@k8m8 T>`tmG<Aॵ͖!vqig3bOAS٢ۇ[F3#AW=4lGܚ#nGB_mRվE[B]zŃ7wxLoMsLҔޞ/h쐤)0ɠǨn5FѶehL6^" |<;N[ ؘ 8vMF^czY&-Qnpendstream endobj 43 0 obj 1347 endobj 48 0 obj <> stream xZYo6~ׯࣔvYG:#߯A'RP6swx8`%d}VVl8ΫFP+/c ۞l}uèzX5TY r~u5JUQ[\}ӭ *G=x7q.2x_-a5*$z^Y'  f/"zAEtX;GIӛ,$Rޒ]Ӭ^0'\B&C8"0kGCYI ,3.|}| 2fG2,K^F/r&iy1x!<&<Kf\:Y7xd(R/l`9ht (EG1=*cdӴ;QEu=XfL:#rtcULt}:U@:uK-% |Nz a;W4 (WJg.p[#ƂBACXLdU6E\Xw}I/d:#L a89Pr}^@7dR-{8^G׸`y|?2;iOj;Լ)u- bmG 02%Lw,/iXJ;ϢBA^1I3Yru)CB*6Hi<]Jì`Ş 3u>`baHgMRd>XxϞqqX/VC*Qg{奿_C=rwG7`!endstream endobj 49 0 obj 1193 endobj 54 0 obj <> stream xX[o\5!8 ܯy<+!*M$EQiI *?rNv*:73yϙ=Oy N+rtO;g8U9~݃ǽn~q_$Cahlgjh;7\h_q/c@hj`c$=΂q.&wï``V)JPq]Ir4LYSYy }puݣQ3t$8sQ(IܽtC;PyN[qqdN8CYqN+hQ~.Y֭9REE;pgY:到-%0a7ܣ2`kKĺL/:G^܋"|5w*S'>2@$IxӭtIZ-=u2z}l,s3ЁdiI*׫qӁedwu5 R@`es\ߩԓKCؚ\`Cu S < /DJܮu>2}Z_^r[ R@p\wW/'G@%f ue3ۜ&[]D> C̱YXTO> 1JcuCxs3/t#\r6N`ͼ&' S5 F0 L`bs{w\X ,%Eὑ*7ަq[$PJ ? BZ9|8>~Ι2ʝbE:`(HMqi+7=O5ӡ<>wNT!a HBн$Dz=L6Rt +FL +Y`keӶN^U̠z3[yBЈ=!:S\f+oU*^8`zq!C*qqE4҃/LiѺP="3X%L P/0|Z9\.^Z Ζ(x!$pw0|p ҹj _q[Ť*t-oݴ]4^]B<@3v)d߶uP/DmTer,q& c;7Mo-%YpRyM&\jjr~GrdJzeNM"8z_Hף i f;<@wݐa-h&?.sZ+9eQQgAJ<,JYfYyYgE\mS&e_[#ffd`'fȀy~2oLobLTS4ۢ ә'O amWQK뷈g-$@i2+C{ܣVJUAbtºp,`͸.\8n)϶hى3nug-n+*>k׫Y/ p9FQ`x X,b++`:J).C."SK(E)7Fk_ m(J "> (=Wx!OL^)1FiVХq\(وe=iX*H4,YC^'o k)dG0eELz,e I~([4/=D+Ug5m VtCendstream endobj 55 0 obj 1698 endobj 60 0 obj <> stream xXKoEC ^yAsCW@Ė8$: |U=kO$%]]]]crޙ3{ǧ5?]t pъ:}u^ 8Yݿgqލ7|K&grQ -"v{U^ `;_`嗺ǧЕ;˃q}Jې\c;<]i o+nm2>Ú ɻZH*tdCbmf ZʶqE'u9o=+î3D]8~[yG 7xEݥ.yix)t$wBݭ藊5kS|tYU]4wLOZKgVIEO h;%0&=謢4BstfJmi;KIܘ$|Ej)lKE81[ɝk%?+zԿ&urׅJ*!i“ir&0;01+#3lM ]O՘#]0&p<'@R3 QRbY@+!' C4l07$;74$W!367,/J\S&mؔBs;#mo7`ll1VM7p !jdQ,׿VGߞ.zlD")־ "{0z47mV;+\=1G 029950h9%h/#b`u,'JQ+׼4װy԰lglo=eݩG7yr+ԨtGcnT[ Z{/9 (3a PIj9gŮpDNRI׵GIW`M=_|9ƹ07uDJ8a]E͋;..l1,mm'u׆M OT8 q:N?(RP~P@p9C^ F'3b_ʃ"I"xgӯp3eDEe"7` _2ɼ:=3EPwmq,#ucgY`qs^tN-8ͽFr@(l:0Pr> stream xXKoE /sMW@H9$!FeƱ|=k;Fl걹"|t]tF^7yl |xQ/_^D]YNw/;㢟,upP=Tw^xE5->V +mGLJk_gQnH{NFV3\Z1𸮞Uh7ЏNq7lg,Z9 e0)5抑n8d=hn0xۋٹu>vo]mu{?r?ޅ b8-LNI׌-,Gqm*:iEu.ʢwRѶWesƼʊ^4VkEgmG0Q(oPH(Ls)y $s${*O%}bv0U({A#tV0N%hU {e=W,KY7n~bA;$+Tt܄cF']&M\z/h`h]\?hSHs%B/k\AVh0mi@|OpĂ`+z^yE-Y+շ OSl y+sCysjݴo$=yUGEϛ7ĥN0vHd9}j,LL XzoIO\Hb3 s57 9'n֐KP $N%2N$FްUDlθ"}vx\!6u2G+Ox-_p {S 8zC-?uO0$lU+&d^XW~κFȖsEީ{yסЂ6:3R"ؖv6B^d]-*)`f* +KzL) aq=l(cKTIÂeWFbKt'nI]Vd[AWrrȷɻ S|oSoHR e< D/r>T&ۚl9n#@A _"K(M>6oX$,9Y^{O74Me.!'}ׯ`)G6? stpRWDHc]#t?#ՌIYs9jnWvVro>Nas>*[ݵaJgVRLkcbSёnFKuTq4+lb-.NOvgsՐ󲼞n[UKB6r~NFd1~ɹ[_mo2c fR2&"ƻ ]E 8 ('i_3;? T i>g-I]n_Zڹ k"|@ RzSgTNO2u˲ĞC*̓Ʌ'NQnE3&щ vQwXKR(7 NOff`sW*rwMx Cendstream endobj 67 0 obj 1510 endobj 72 0 obj <> stream xZKo^I|xI,BFBi[bAy<1/N0sGR>:U9&X vpvؽ9c&;(rbǏ;;a \x~4ǫyퟱW8la |bt%be:<%tri>%F8eI.zo:j|A4$!%" ~9aM::z6uMo!J- ;Dݦ]㍸T[kK@ܧ*54< bdƂVDj4Ckv coE3}nL_ǑfFx?8[w>?z'}vTI3l{0;~L4Q͕2EY,}M\ގ3Ē$>beδP 8j3/Ika &I}L"KDHwke;#䘳?B%yQ^d~b$Kd!mrGH t:OVC>onpoxeºm?%~l}@bM7_{s۞ =oVHeib.džLnܻ{;8IapZ .U8E]Å&ͪ/Lqmli~GoOcvZLY]qAF6Zp[=ᔶ>n [C㐘qG%.8~vS|I耫YxLCxvgb0L46k"l1wl78یbCTq`O\*nj>,.֘Ú jHlxxQJTT`3ؘBcLM66Eu{ NJtK.eAis\1+L8_`BƸX";'\vյtc~Otڊ[q}.ܣ.l$:2$))t]QCdt*ܣSv\p{>WcϣJ-6+E +1R/WBاtRҒ (w{`{ac@+0c$C@ʩ9%"&ɗsXׅ`GuCl$%=$=Ɗ AC"D"6OGFʦ"b4)S̵s\/C=~i=aP425<թ"nC^'jB)9oDeeY Ī6ݪlsҜ)|q"Us@p7IU pUR (p ȇyNF2V2A;-kJÐڎ:`偬g%O~ir4G{pm $piЃjǵ@EvH*MڰE ASλ? 9hL}ݨL&szArV)>-G{SkбO> stream xW[E~0iEҏiNA|!vsq&lПwճ/;MչU:$);=o# >~ۿdϟgUW:?Nv{>[\E+8)2ߟ*g#؃. iu~RO5l^$t>>+N~ީux8Hh& a4p<n81ꡇ%3vTPu#0MK5ct+rm}+TȫYKAi*6m+z\ы^5c+ܓ.i;o|7u,y-^qE#xKfL2`$xaB"(dF,&g+&^fxigR 2V ؓ˃t:;A(/ $^x7Ix7m+zܤ'=<ۛJ{SZھ)[`W)}+4_Akt. edr̂l.JF+z]iE ٙ7S0.m"՜>,yNNۚ>cvWҶo({"ŵsvq;ϊ^7ĹO.0J.HdY6CvՁYI="#dX`Z: l;T`lpdm )r$ \~r$ pz9msFӽ++G @r5>Y,lj~s˙D hgTk8+Q nʡfۣ T9~eYQދqe&'paȽ{Y+WJ7?ձuaQ+B>/s6Z $PZ+wVX$JE3XJSu2IGɬ;q$uj9&vk\%R;9|0 2vqnx_ ֠Hln(9tRi/!@2k| [ZXI w{ZGC-R zTmo{c瀱x84f+҂현JX2 _n:`I_.5NGj@1X33&aL M1Vݬ1iu84$Z6zpwMܰᐘ:sη'<xr`f(2Y u}aWR4QMXxH4Pj,ހ8ڂIUrrb5h 9X83P-l%F&*9ID]WrX33v|4]"nw&'.X%JNI!w益6~-e'*2pD'ϿI*T77^}KaHՙk|](o/y6Ru&6k|eJc oS|?Σendstream endobj 79 0 obj 1455 endobj 84 0 obj <> stream xSKkA1 DSO`ڮGu_ xK\Bn]zfwrpWT+[8\4Y[O7oTV5ևnq[7'R3v}EFvD(_<6RN}YM2zjB!WVjv`2RʪR45)ql|;-׿[6K 1"> +ZW5dF%h,SzV|0u:Jqrm09}~}lvf`~ bVJ$=o> '>0v9x 9G ol@YlI}ɧ[P\4.yJZBHe{a^p𢟷3!Dlh9d}PgmR/ڎMAH:|]̉D6[mMJE?i`PDݱ.8,&e׏jbt*?.60o{Ӄ%tG N2AZ?ʌٰ6} U'`2ZHUFlE@;!(#B^,FS`VI;qv`Ie0.WiMνgJs]e$8~ŨZ &O =iH<0endstream endobj 85 0 obj 671 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 77 0 obj <> /Contents 78 0 R >> endobj 83 0 obj <> /Contents 84 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R 77 0 R 83 0 R ] /Count 12 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 91 0 obj <>stream x]Mn@ F`O`&H7&VU `"DȢ.%?r޷%^> endobj 31 0 obj <> endobj 9 0 obj <> endobj 92 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 93 0 obj <> endobj 30 0 obj <> endobj 89 0 obj <>stream x|{|TչZ5=Wɐd&IBI2@&@ /%VOUzc9@#J9jjEzr[$Y{{@!d@}E[=朁U;{\ubսk6Ne:>$BB ׬ۋ6 :Ѳfxbk0!m|v r?mKHDh샱w]vGh2=9 a+4݁@FoOFQ .Z{?z E3:^ c2Dz#߅<:Mj8185LS)2ٗQ35tk:߀ڂ=Eѷ[a?t#B?otQ z}-CJA piC_Or 1bRl!|+9Cp@ը )HNt 96C9_C*t{[4_лw8{] PzrCh-Hʥ@Ay?_ED7i5S*cHEyYixJIq`r~ޤ`nz.nZ̢hJ9\m{ܪ7(ϞSl@ Y.jR/=g9gy^ R2~ YSؖB+:tJt&֥]У!(S *t=:m}[[Rhu{ptL11uԆ%bOI7wl›_!薁2SB}JE_:Sf"Zw::=Km%tLұ֟`pzB?$Hkz}m=Tkn {S'RPj&y)/۟pݗM| v ܟ€0Xb}L.)c=NgbnNmX Z'ή:yJouI ]RhhnZVO v6xet(5Pȼ f)* -h B*rB1WP wG>SAcGXʠ_ ijMtWA7{S;SbZ<hO$qA[0ggNP@Em^S[D@p SΛ%R}~;pA g7}7;}:$:SS7^wS6˴e צ! B)1ۆ~ poa%mD5L;+DkfN$Tfx 4׹@j<A:LPe[&~5c .#.i;ֶ3u{&~$ZːZRI5)`ԴP} j#ZajLu\':rƨq!ȹkOPVM^(A9 Pdk (;pcx@Vv,V (||Z^>חu{ח}@i-U% @ f Sc>Vh 1((Rl? =q-)}-s۹Wg E%2&V:Á[`-@v/\0 v_z' z 8 @݀Z#>tQ`ڀ\Ò]_*p5Ư`]Z\AX|Gqgc6wpŀ**)̘#;)v=Wp{_?W{نg{Ҙc-/a8 H 8pr@;qj<>3^l3cH& a=x~x kMP!aat1j*}&2Ǚ3rzC5UL5Fy<S&Zb/ۣ)5}NIi_vڀ_N[Sjb)Bp\ܒb)!3%$F`(ʘHl 6-6e 6 M<` P ]c : 5t$r e.#oB`gkUgW}cB'C}^J9.Z6 l) b%&Vbr g Wzu)$6`L>s NT(/+I+3fRYamdؿ2ekfOtq~vץsS}[0O1[vYdžZ,Q+Xݚ|k}&iߦf[0Ĺ$N'Ԑ"0 ].U0U,39?raa?{s:}i~ 3_k]s=}фxz |gR^1QT$,fjg 2 󀄖@NH}rnpYetcy?F\-+YQi4/apWدp R!.,ԣVlz"z&AZka`lCEbS48#.b >^ '  $|ʥr&{ps)Beۯ ?EpA( p5 "i.OFVg2ڛ %AR8B4CrhC|L4bMme#TT*́hL) -_ս|)/.ߜ2%X'=Ofw\'ڇWwXMQ링ܜPw72 VspKa?t_$*\`l9V3GL(lԾ$dt@ᯬ+. xf.v7bYH( ,ed lR,9R>:Rt)-/+ )ZaFoСCLݡCws?/VlxfãEb5o}Pq6p}䣘LLGudJ,e.ijd:#`` s={G'^&;|S$b-b;;|VCH HXDn`^˰p\kZ+8'qJaJX>̄`H ClP!"BOX9 ɜ}Km4^KF!WtU***QdU6.L0)Z9Q6^Kؗ87A3bsMoߖq[y]sϰUz*qxmjv){mږvGJTXJhYLlPG585ZQ:)]PnMJF -< Q:uM_q}(Z6`LJ ris_Gop X7n; Us'撫bFcԌZYNpbvRQn7Įyŋ%/wi]#|;`4~<&~wCY >9VZcewӿOT_e;N5͝ߦ\J/R4?aJd3Zx*nkϾ]0UUNa$BL]El7AOj 6Kl } zB_` ,VjngĜ7z#ݣTFԚx. 7׎q( rD ֋ŝw}}ΛﭞRZԻcn* 2GS{(~`F?9BNh ;(PRRNQEj^ŠBtBM> !uR3i_1KEGnArX( p=fS=$R7E=`Nz>J_1v: il1D!y& Fab7⾙~@!=@zYe^Iq7d"Ɛcl͏O31UP҈ H+bU*M_@d|7JAWEpqqD6r 3|*N?Hr+(pWN!wHAB0'JSJ}a&Sq>fluqqꬫTNxoz5Pau&ʰhIcaMM9τ Ca:8Bh݊U`̄oi榺]?>=&SY}_{@I~D"Ofj4b\dD3rȎ#)7#Xh*⠩HMETR] .VN¹cU̎TKgqy%o;H+]LM:W:C(DܠhHb +cGk+(;M L(dQS-u.!%*xjh 0 W'-uuܼz-^2y}m{{.5=s֬qkgDr_6;m9o?ڗ y )7 lI鴹PNà_j"lg%*Ni F`9bI1.06FicYƌ%5 &ŒY9~SERܩ-kTFX` + jV ?&QS)2Hd읬;?h_tS ¼Թ̷r=ozD>(pR#Tk4iwamt 0ɀOC %!#!VKRb-4͡)n],[R<.iXwT$u~#]L%)ajs#sM?a+at!b3RFnGOBpQ}i$^CFQf YNd)kb%N 8),$3#eȪ6k!fc8烵kk<:ҊF.rre݌?'i]Xlf\_+Iΐa$2lޔ_T\*b&l`+BrN\vv3N7y3oPk4ȨSLdyD-T&Q>ҘHDe0L7,GXaJ\Ijնj3E0LaK?E΃ods" )gJFSKD#,R>^;Z+1Lp;b'q" P&{yݸ2}|hǎt;9gqO/TD?)=qj"rR><٪ 6"qCo/ [fs_:rj N),ܐXYYX{M旞MJ8FDV;9_A'묜c,k}N1D5~S)arLa5Pyn$ҝ3c~\jŢks|Fƿ$rECL'c} Wǃڿ%Sz!'fhmjS\E@05%АB!@#jEs ٪5.f.#KI#ɋ銀5ƈ8 bA1 z/RSj*>Y^:'UPjқ>7@nJg2Tz&ly$1Cv1I@ K~ϰw~}z3%~E±oƫt&ŕ +4fꌜJF7O_ Y蜪22ȸZWhhGMW*&5zd/76ȡ0 3H. I[QI^M^MtF-/P/WRDyQf\-%,ٯCpO__?g]m4~" ]UE~U7NFtȏ~'ʂNfM7MƬ&3f%9ϩ5fEGHfJ لSޞp}IzTVՔj*j*j]M5L*j.{39}(C8%"~9_pϊC̘Hr7"Wtw1.⮷f/\z`kyAo${%/25&vpAk56lY K&YmzT="/fB  u-],kk:-]ɒ R3$d,4 -[7\M,KT{6w+zUfp(țqn:F9YF%e2,OЬ-p4cz3dL3q5Wu$HZyJK{\p0SU0 _;jc}%0[}}+pB[VlN[(4͡)Nwĩ~R[FcOGe23-Wetgf]5c!mW]71ٍ]g0/A)/[_sMתxGx6v!X]&ёFtZ@2z#<*,+t(@nt%/K4(O֎!Q֖$IGd`ȯYd(p#;v %yƔV]t+3҇Y j~f2z~3]H \ 'cNL~ Jx2z=Fx>e|N(*4@ y /bG}7c}_ 1J$8%ɁIרWtn`h>PɓK n ʢ,p*O.c !2'qό-ȽWG~Uq`^5[<гRC cXdjUu*V!}xTj=˹+DI>4F5…#ONT e8ѳ f9yN+[ٵ5iIӄ5+4=SsdR充D0M& JND*0fώ>ܳ_U%ϩKdk܀NLWVr{w MAڍ:aƸո2'7/1?oc+SG/Kyt^:/Kyt~>yoJi@eU4,33ZtheͳZG6%晖5_Wt.i |xZ¨hfGE5Eh.G LԆZQP3QjEQ-DM(! x$ڹgc'&ޅx;RE8 Šh9l-G 9#9~.n0)޲|RrMT.j([MN endstream endobj 21 0 obj <> endobj 90 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T18:43:04+02:00 2012-04-30T18:43:04+02:00 PDFCreator Version 1.2.3 TLM 2.0 Loosely Timed (LT) System Example - SimpleJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 95 0000000000 65535 f 0000019434 00000 n 0000053309 00000 n 0000019297 00000 n 0000016947 00000 n 0000000015 00000 n 0000000699 00000 n 0000019499 00000 n 0000022434 00000 n 0000037962 00000 n 0000022374 00000 n 0000022404 00000 n 0000025429 00000 n 0000017141 00000 n 0000000718 00000 n 0000002137 00000 n 0000025459 00000 n 0000033331 00000 n 0000028369 00000 n 0000031382 00000 n 0000038121 00000 n 0000048513 00000 n 0000038259 00000 n 0000031296 00000 n 0000031339 00000 n 0000035717 00000 n 0000017337 00000 n 0000002158 00000 n 0000003490 00000 n 0000037613 00000 n 0000038400 00000 n 0000037894 00000 n 0000035769 00000 n 0000035812 00000 n 0000035855 00000 n 0000017533 00000 n 0000003511 00000 n 0000004185 00000 n 0000035907 00000 n 0000035950 00000 n 0000035993 00000 n 0000017729 00000 n 0000004205 00000 n 0000005624 00000 n 0000036056 00000 n 0000036099 00000 n 0000036142 00000 n 0000017925 00000 n 0000005645 00000 n 0000006910 00000 n 0000036205 00000 n 0000036248 00000 n 0000036291 00000 n 0000018121 00000 n 0000006931 00000 n 0000008701 00000 n 0000036343 00000 n 0000036386 00000 n 0000036429 00000 n 0000018317 00000 n 0000008722 00000 n 0000010605 00000 n 0000036481 00000 n 0000036524 00000 n 0000036567 00000 n 0000018513 00000 n 0000010626 00000 n 0000012208 00000 n 0000036619 00000 n 0000036662 00000 n 0000036705 00000 n 0000018709 00000 n 0000012229 00000 n 0000014615 00000 n 0000036768 00000 n 0000036811 00000 n 0000036854 00000 n 0000018905 00000 n 0000014636 00000 n 0000016163 00000 n 0000036917 00000 n 0000036960 00000 n 0000037003 00000 n 0000019101 00000 n 0000016184 00000 n 0000016927 00000 n 0000037055 00000 n 0000037098 00000 n 0000037141 00000 n 0000038615 00000 n 0000048710 00000 n 0000037193 00000 n 0000038047 00000 n 0000038340 00000 n 0000051388 00000 n trailer << /Size 95 /Root 1 0 R /Info 2 0 R /ID [<946E440A312A459DD4D1248C7684BCF3><946E440A312A459DD4D1248C7684BCF3>] >> startxref 54081 %%EOF systemc-2.3.4/examples/tlm/lt/CMakeLists.txt0000644000175000017500000000514614342422106020664 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/lt/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (lt src/lt.cpp include/lt_top.h src/lt_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/lt_initiator.h ../common/src/lt_initiator.cpp ../common/include/at_target_1_phase.h ../common/src/at_target_1_phase.cpp ../common/include/lt_target.h ../common/src/lt_target.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp) target_include_directories (lt PRIVATE include ../common/include) target_link_libraries (lt SystemC::systemc) configure_and_add_test (lt) systemc-2.3.4/examples/tlm/lt/include/0000755000175000017500000000000014342422106017541 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/include/lt_top.h0000644000175000017500000000472514342422106021223 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_top.h // /// @brief Top level interconnect and instantiation for lt example // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #ifndef __LT_TOP_H__ #define __LT_TOP_H__ #include "tlm.h" // TLM header #include "lt_target.h" // lt memory target #include "at_target_1_phase.h" // at and lt memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusLT.h" // Bus/Router Implementation /// Top wrapper Module class lt_top // Declare SC_MODULE : public sc_core::sc_module { public: /// Constructor lt_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusLT<2, 2> m_bus; ///< simple bus at_target_1_phase m_at_and_lt_target_1; ///< combined blocking/non-blocking lt_target m_lt_target_2; ///< blocking with convenienece socket initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __LT_TOP_H__ */ systemc-2.3.4/examples/tlm/lt/include/initiator_top.h0000644000175000017500000000740114342422106022600 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file initiator_top.h // /// @brief Top for Initiator and traffic generator combination // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // //============================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "lt_initiator.h" // LT/blocking initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // inherit from TLM 2.0 interface { public: //Member Methods ============================================================== //============================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //============================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); /// Required and unused virtual methods required for hierarchical connectivity void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); public: //Member Variables/Objects ==================================================== tlm::tlm_initiator_socket< > top_initiator_socket; private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID lt_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/lt/src/0000755000175000017500000000000014342422106016705 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/src/initiator_top.cpp0000644000175000017500000001167614342422106022310 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file initiator_top.cpp // /// @brief Instantiates initiator and traffic_generator // /// @details /// This module performs: /// 1. Instantiation of the traffic_generator and the lt_initiator /// and the interconnecting sc_fifo's /// 2. Binding of the Interconnect for the components // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "initiator_top.h" // this header file #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 ) :sc_module (name) // module instance name ,top_initiator_socket // Init the socket ("top_initiator_socket") ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator" ,ID // ID for reporting ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID // ID for reporting ,base_address_1 // first base address ,base_address_2 // second base address ,4 ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(top_initiator_socket); } //============================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr // /// @brief Mandatory virtual implementation // /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Not Used or Implemented in this example // //============================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //============================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Mandatory virtual implementation // /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Not Used or Implemented in this example // //============================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/lt/src/lt_top.cpp0000644000175000017500000001126014342422106020712 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_top.cpp // /// @brief Very basic Loosely Timed (blocking) example // /// @details This class instantiates components that compose the lt /// example system. A demonstration of the blocking interface for /// TLM 2.0. The same (or similar) block diagram is created /// for additional examples, but with different components. /// See the constructore for companents instatntiated for this example. // //============================================================================== // // Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "lt_top.h" // example system top header //============================================================================== /// @fn lt_top::lt_top // /// @brief Constructor for the top module for a basic LT example // /// @details /// The construcor method /// 1. initializes the instantiated components /// 2. calls the bind methods to connect the example components // //============================================================================== lt_top::lt_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_at_and_lt_target_1 /// Initiatlize at/lt target ( "m_at_and_lt_target_1" // module instance name , 201 // 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(20, sc_core::SC_NS) // accept delay , sc_core::sc_time(100, sc_core::SC_NS) // read response delay , sc_core::sc_time(60, sc_core::SC_NS) // write response delay ) , m_lt_target_2 /// initialize lt only target ( "m_lt_target_2" // module instance name , 202 // 2nd Target ID is 202 , "memory_socket_2" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of LT initiator ( "m_initiator_1" // module instance name , 101 // 1st Initiator ID is 101 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module instance name , 102 // 2nd Initiator ID is 102 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.top_initiator_socket(m_bus.target_socket[0]); m_initiator_2.top_initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_and_lt_target_1.m_memory_socket); m_bus.initiator_socket[1](m_lt_target_2.m_memory_socket); } systemc-2.3.4/examples/tlm/lt/src/lt.cpp0000644000175000017500000000443314342422106020034 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_top.h" // top module #include "tlm.h" // TLM header #define REPORT_DEFINE_GLOBALS // reporting overhead #include "reporting.h" //============================================================================== /// @fn sc_main // /// @brief sc_main for lt with dmi example // /// @details /// This is the SystemC entry point for an example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the example traffic generator will run to /// completion, ending the simulation. // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== int // return status sc_main // SystemC entry point (int /*argc*/ // argument count ,char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); lt_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/lt/build-unix/0000755000175000017500000000000014342422106020176 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/build-unix/Makefile0000644000175000017500000000057314342422106021643 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = lt VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ lt_initiator.o \ \ at_target_1_phase.o \ lt_target.o \ initiator_top.o \ memory.o \ report.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/lt/results/0000755000175000017500000000000014342422106017617 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt/results/expected.log0000644000175000017500000015704014342422106022132 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: at_target_1_phase.cpp: 0 s - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: at_target_1_phase.cpp: 0 s - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 80 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 80 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 160 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: at_target_1_phase.cpp: 160 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 160 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: at_target_1_phase.cpp: 160 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 240 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: at_target_1_phase.cpp: 240 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 240 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: at_target_1_phase.cpp: 240 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 320 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: at_target_1_phase.cpp: 320 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 320 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: at_target_1_phase.cpp: 320 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: at_target_1_phase.cpp: 400 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: at_target_1_phase.cpp: 400 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 480 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: at_target_1_phase.cpp: 480 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 480 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: at_target_1_phase.cpp: 480 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 560 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: at_target_1_phase.cpp: 560 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 560 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: at_target_1_phase.cpp: 560 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 640 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: at_target_1_phase.cpp: 640 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 640 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: at_target_1_phase.cpp: 640 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 720 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: at_target_1_phase.cpp: 720 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 720 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: at_target_1_phase.cpp: 720 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: at_target_1_phase.cpp: 800 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: at_target_1_phase.cpp: 800 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 880 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: at_target_1_phase.cpp: 880 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 880 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: at_target_1_phase.cpp: 880 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 960 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: at_target_1_phase.cpp: 960 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 960 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: at_target_1_phase.cpp: 960 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1040 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: at_target_1_phase.cpp: 1040 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1040 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: at_target_1_phase.cpp: 1040 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1120 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: at_target_1_phase.cpp: 1120 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1120 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: at_target_1_phase.cpp: 1120 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: at_target_1_phase.cpp: 1200 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: at_target_1_phase.cpp: 1200 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 60 ns = 80 ns Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 102 b_transport returned delay = 80 ns Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1280 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: at_target_1_phase.cpp: 1280 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1280 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: at_target_1_phase.cpp: 1280 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1400 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 1400 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1400 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: at_target_1_phase.cpp: 1400 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1520 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: at_target_1_phase.cpp: 1520 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1520 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: at_target_1_phase.cpp: 1520 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1640 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: at_target_1_phase.cpp: 1640 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1640 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: at_target_1_phase.cpp: 1640 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: at_target_1_phase.cpp: 1760 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: at_target_1_phase.cpp: 1760 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1880 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: at_target_1_phase.cpp: 1880 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1880 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: at_target_1_phase.cpp: 1880 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2 us - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: at_target_1_phase.cpp: 2 us - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2 us - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: at_target_1_phase.cpp: 2 us - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2120 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: at_target_1_phase.cpp: 2120 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2120 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: at_target_1_phase.cpp: 2120 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2240 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: at_target_1_phase.cpp: 2240 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2240 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: at_target_1_phase.cpp: 2240 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2360 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: at_target_1_phase.cpp: 2360 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2360 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: at_target_1_phase.cpp: 2360 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2480 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: at_target_1_phase.cpp: 2480 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2480 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: at_target_1_phase.cpp: 2480 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2600 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: at_target_1_phase.cpp: 2600 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2600 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: at_target_1_phase.cpp: 2600 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2720 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: at_target_1_phase.cpp: 2720 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2720 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: at_target_1_phase.cpp: 2720 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2840 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: at_target_1_phase.cpp: 2840 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2840 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: at_target_1_phase.cpp: 2840 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2960 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: at_target_1_phase.cpp: 2960 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2960 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: at_target_1_phase.cpp: 2960 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: at_target_1_phase.cpp: 3080 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: at_target_1_phase.cpp: 3080 ns - b_transport Target: 201 returned delay of 0 s + 20 ns + 100 ns = 120 ns Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 102 b_transport returned delay = 120 ns Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3240 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3240 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3280 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3280 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3280 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3280 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3320 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 3320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3320 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 3320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3360 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 3360 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3360 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 3360 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3400 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 3400 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3400 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 3400 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 3440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 3440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3480 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 3480 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3480 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 3480 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3560 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 3560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3560 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 3560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3600 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 3600 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3600 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 3600 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3640 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 3640 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3640 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 3640 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3680 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 3680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3680 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 3680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3720 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 3720 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3720 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 3720 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3760 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 3760 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3760 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 3760 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3800 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 3800 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3800 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 3800 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3840 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3840 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3840 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3840 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3900 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3900 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3900 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3900 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3960 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3960 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3960 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3960 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4080 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 4080 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4080 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 4080 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4140 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 4140 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4140 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 4140 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4200 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 4200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4200 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 4200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4260 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 4260 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4260 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 4260 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4320 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 4320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4320 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 4320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4380 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 4380 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4380 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 4380 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 4440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 4440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4560 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 4560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4560 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 4560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4620 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 4620 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4620 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 4620 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4680 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 4680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4680 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 4680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4740 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 4740 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4740 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 4740 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: traffic_generator.cpp: 4800 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: traffic_generator.cpp: 4800 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### systemc-2.3.4/examples/tlm/at_4_phase/0000755000175000017500000000000014342422106017506 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/test.am0000644000175000017500000000565714342422106021021 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_4_phase ## %C%: at_4_phase examples_TESTS += at_4_phase/test at_4_phase_test_CPPFLAGS = \ -I$(srcdir)/at_4_phase/include \ $(CPPFLAGS_TLMTESTS) at_4_phase_test_SOURCES = \ $(at_4_phase_H_FILES) \ $(at_4_phase_CXX_FILES) examples_BUILD += \ $(at_4_phase_BUILD) examples_CLEAN += \ at_4_phase/run.log \ at_4_phase/expected_trimmed.log \ at_4_phase/run_trimmed.log \ at_4_phase/diff.log examples_FILES += \ $(at_4_phase_H_FILES) \ $(at_4_phase_CXX_FILES) \ $(at_4_phase_BUILD) \ $(at_4_phase_EXTRA) examples_DIRS += \ at_4_phase/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_4_phase_H_FILES = \ at_4_phase/include/at_4_phase_top.h \ at_4_phase/include/initiator_top.h at_4_phase_CXX_FILES = \ at_4_phase/src/at_4_phase.cpp \ at_4_phase/src/at_4_phase_top.cpp \ at_4_phase/src/initiator_top.cpp at_4_phase_BUILD = \ at_4_phase/results/expected.log at_4_phase_EXTRA = \ at_4_phase/CMakeLists.txt \ at_4_phase/build-msvc/Makefile \ at_4_phase/build-msvc/at_4_phase.sln \ at_4_phase/build-msvc/at_4_phase.vcxproj \ at_4_phase/build-unix/Makefile \ at_4_phase/docs/at_4_phase_example.pdf \ at_4_phase/docs/at_4_phase_example.ppt #at_4_phase_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/at_4_phase/build-msvc/0000755000175000017500000000000014342422106021553 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/build-msvc/at_4_phase.sln0000644000175000017500000000233014342422106024276 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_4_phase", "at_4_phase.vcxproj", "{AF208CA8-8FAC-48C9-8220-6B6CDE50A003}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|Win32.ActiveCfg = Debug|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|Win32.Build.0 = Debug|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|x64.ActiveCfg = Debug|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|x64.Build.0 = Debug|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|Win32.ActiveCfg = Release|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|Win32.Build.0 = Release|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|x64.ActiveCfg = Release|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_4_phase/build-msvc/at_4_phase.vcxproj0000644000175000017500000003115114342422106025200 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_4_phase/build-msvc/Makefile0000644000175000017500000000056214342422106023216 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = at_4_phase OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_4_phase.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/at_4_phase/docs/0000755000175000017500000000000014342422106020436 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/docs/at_4_phase_example.pdf0000644000175000017500000021727214342422106024666 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xSn1 }cb HT$*ۋv ~řKEtG3{gWfh\7&<#m.C"=kl2lAstX;2pq8gXAL9!5O9x gNA_-ŋ#G53E)MAEDl>ʾe1߶GR$D(HECK&zφ*>F(F i7Y9+Wg\2p|cG*o;v&>uv"xJ+.ۤs:_9ތy یv]N9$:͑E{t<G4*j*$v`ըtD72dCW!*LĻ)>EwcD.WEqg3tZ$JD >u/}a xoq3NRr΄/ë(ȼg,LȖ/ #ã7;-nH TA3j1bӂ6AZlsiv:"ff5ofS ==X#1R9N.YhMendstream endobj 6 0 obj 667 endobj 14 0 obj <> stream xXn7F{ܧ r ?h8Cуc˖ZK-M^rfZ0&g|3ÏJj#TT|6V)Q~׽uҞwWh|QWuh.7{h[1zgHՁmxn[B݄ZNAixp&I[~p|-,ʉ%kNYtY4ßID+_ڗ^{gB; |$w[|ʮmTݡt9 .] c޶˜N:Q=/ 0)׃m3 bhϩn?V7htJknqM)t1?hWh"ps[timu a0NHhod"(گoɼO6k:9O{LDY=t!$* ".e t=T5 @ Jb(|`E!EYǗTg?[p ]:;k4Cvƾ l1F?=F>2C`U.t0Y'|_APP$Ȫe9Ԃ>hׂvj\DRܢ J˰5,`[JXB%cG~HLI1^\Jhh< L.0a| L)rd5[Jne@[h~n#; LGph/;bXm'YQBS\$Se%p-Jjлf{&䜠[d^ ²aeB .:× lm\ΌqRA^V#h>jP5jbv0MU<꓉]YYM4\H!Ȭ =Y;YP@[BKJ_6tJ,0󨞠-ܴÆuM?d tSe\LR[I48#{6Gu.*(jQUGݐpy(KLօ6o+Mq([h7Yb6.)~ c%|onEpendstream endobj 15 0 obj 1349 endobj 27 0 obj <> stream xXYo6FZԽG*!c} 5;E;$JZk׻@Pϣ97áoVB/h-gK_ +goOe".OkyR~Rlw]ze3z^?gZ&?ekOj#DiM }b1F1F҂VCfQbb0A#*`kJy¬U[? ۅU)t&GNǔԔ*< !(įl{Fp7@÷NXچ%.x}13V]&1",f:8t4RLmkG\@ĺU5ۗyEjrwU=*HqAХ0wTt-vF3&Fs7XX.&[kAh,4 1dvmA/YP9eA)ޑ^³"㼛[CEuqGp9ߥTm()t0k(;K-Z.!A Lv~I\whQuA__+DQݽM}?%ד ;y‡_Vkk䃼qp`!]קD5pr[f]R9];6 ɃrVxmn]ٺ]ZAzi.)rBv;l3V^,.`~y˺3wt]w43H|letǎ^c ^%adQ@ĸdmy;r0uky|\oqK[WC3qi !ӥ3vbHwfg\.ٶSg5Keetz5W %6.\7Ns,ؠI8xc];*t6>D}^qlmr}X˶ŲmO}GgV=Pp1}P endstream endobj 28 0 obj 1285 endobj 36 0 obj <> stream xUj@}\mh( ũq괖c;1wv)F))ƶ8ٙ3#" Ix0U8'_'dm^h3Ȣ$^럘M p[O۳brX &^ Gǃ0:rبȝ[.UgeUx/Iœ+%פd8>x)&IU_EəFKKK40j-)덦fT0(p(x z )tE',p!%eoL;fmZJ n3⎎ե>-]"|?ZkK SBI+:6, 버~UAdɉ,؎ʍз*_yFJ R H`[*nR`BDBt ih{{F0 D]"cA;]i`ah'(M90Q.>xCD25"d{6/mKZ=UHH ^whX,PWY:@oݞnmN͎6ubY]9Ѹ#$9{$2Hv LL}Оmp;Ĩ endstream endobj 37 0 obj 621 endobj 42 0 obj <> stream xXn7E_+q׀h|CEu8(p,9raYp '/R:Imc8&Cr!75g j~8W7RnwpVݫ#U:su;ï7uqpd ~~&";cՀn熃6~߸1Дl^?/_K8|=0?]m%x^ko9Ӡ0UY|sJ[`8V1Qh{5n\s#)u. 脻, gf#m f!nSBV?p&c.{߄ze} ׈[;esG12*h޷-n[k7EpSlAcrpoՋqLiHפNtoLq]~lG@ourvWnb6Oc4ns6͑`*e16(K{45-h$4zZrmam&.ZM }0!(x.H$tJhN%)V.RCW !}BܓFc)H5IV0iK ޯwyLsfdgW /G~;ǭcHX4+/C,;r`Bh-~1-"*>2's'}ӝNw4ԟ {<2l;QpP"ۮ3Bt/ bMtP

z+!fLK<خo?REAVV?P̎]{FҺ"]Ц\eb]q^YuX 놴endstream endobj 43 0 obj 1411 endobj 48 0 obj <> stream x[[o6~УoeokSn a&vmq?CI$lRbwq:hRṟmF ul> J3g^j$Ҹ^~9ȮG,s.^YFGvq51_3޸:ebjeAۑ!TghLpBe69͌Pʌjd>5S0R+O'Zhd>辠[-|UDM2,$aR?T_q{%Dz9=%1P.5垌N~|R Z%sL 6m1c͊1 HgWM M(jVDsFk$g :8™D_yuқI4Fg-njdZr_sLJɀA31) xe {»b *CK(ƜXi"8=yWE8t' TxD3,>>=foJ&~m3R-!%UV4"0K&xvɭ< HRuiiԫO $~Rk.&t(e*h)&t;R'|`Re!Q!H5^ѽe7ko:2oim:dVӮQ!gP1lY"e\ _$6A?Mn(wGYXgj&yNɎcҥM @do0 2Q(P ہʐmfσ2MSupWԄ5wHy7}&Z5MO58ywS7%I3LJ*]%+v7vӝeX %Y۶ANaAtd]_҉%zW =&Am}<=?ޥ7-> ̱=X7MGQkBYy7}"Bsbzi4z1A(GQKOfH^iYK9 |Ƚ7νA/q}ndFs4M%endstream endobj 49 0 obj 1661 endobj 54 0 obj <> stream xZn7}߯]~[Aԉyh $eĕ +mXxfH@Le!(-ϼ8+];svŵRyv W'^q4^Rb o`j|L|7| ؎rMҢ<~l,,u r\)8bF(e֕ Z' ̋?e՜aDu#ZFꦦ;ij"YتJhdGmurJBj1 AsջMV F-}rLf` ,r f"R'u+,H-qSݩ%ɻ5CXchl}p3[w:s`\ἠeЙфiT.yۤVR2PDͬʅ_FN\).P78 7q ⼪T1$j#e%LJF }ԇWבZʶʇ5*?MIEbKNC<{1t>"6Yާsxe伍FC sXf& slTeHRS3yn5ҋ6 @W4G=k> stream xYYo7 FhǙJZ(  ) ñ'^ovҌٕmmGRE˙(-Frg$C6(>k~מ7Wi2g}ܜk9.aE|6 b&pl:{hO8o%0,v!hR_]k%v &Ӫ;G;M3J(aj4Vk/dwP'=5S\_Avgq#@ s>nP[C9mQjnj90pQZ& II:/t*FvIJv[sIQ^$8IW=†H{e„^ pD uy 'b]Ƶ#_UBlGQF8D|V0"$Foς 27 YI:(1JIZGz=:02]&] `M0) 6 50gh߇`´v@Af %IIzUI KD@Iak(Lr֛Vk/HT ;;"qN"11P HnY9sNف."ZD96 I^ga1[0p1:g1SL,1N%q"5t(3ZkF/>G?`gEvteBaKn6/F ;=nFt=(v_FǙI<ƠʸtQ!T] ɴ;=M=Oim~Գ<#c:Tgݧ 1TA6sBbEb`%EX PTX!^5@4*w 8g]qtjwcU<eZ,ըd}&+OB頥2DW>kTC/dN;B0T0ݻB㊴!riKRcur;DfiݷTd31C=ejtVo0R` `tD ᙵ=]J.bVs'K @1{5Huz<ڧxk :]į"-F*op69?s@祬:T[B5BLOzR賋ƘG魥/)+(R=],I Ƌ, 9mN9fTĵK}g\HsO$&z/!/9 w] api;Iʓ 4U.Z5Es4XU[K=tkr> =!%5~hα=gċ;.v-u%#.>c^\ty33Nk<:;pӝ>Ժ-rt ٿg (i5oZZ@X7 8{Ucm0^}g IJZuІRXp1Ca!⣩ Q: x7 ljl|3 a0PiMiz2eW=ox b0|<_ba㝈xO3ɎdeC/h>ʊdeXGGYl `Q> stream x[Y]qF!t>fqk`ðK@@{~a<`FׇbE p}{xu-QƏC㋃goL w>y89^2hTJ'/1Ф%^ kFfu.u KDwk9ݘTKǿxoO?6T\m*swۉLD/o.;ӉNef~3kf=Yu SIk-Lj- i-/uo ~KǯK5_A.?Z>|3\sO>yB-DD$Q,D=Ycm ܹ 7۪AH n]5Ohܷ>o)G ϻj@&(] l_J(LD/'z=whߝ}agҜ $GlNTl_%})߽m?&ƣ5lOO%R%:e9CVSC[i?&6jdN臛+a]?0]4ʭ 﫦mf L2[m*rZ^m.n5WU1|2S.?| +@U"鮩ӟisҭ:BMjͧʦݗ󕪐ͅk#N0qx_|BQKs\>q뢹Ȝ\ ߮U =_w{\*YK,A[tC9l_.R@0˿͉Zʐ8)q.Km{_4 H ] ǤH"Mꈮj4(b !ZŪ FK ^AH^DJ1#^կga?.E,.}~[Mn,wfָl#El1E`}À9I@U="z+ i!DXPbt|Wy_e[pFX{ߞiK MwJ_M$Lx${ɿd9ᯯ@HG^ZXƁoM k{l3pT3. NsCcmOR?p*uq{'jwr) ^Stl*g,%dF*cmi=\w݌$+ԏXcu30uz,|K]-ja9o\Ӣ4R6I_-zg;Y.#oijWW}𵃟/o@qɷp6,L׉Qز$1|goom_)8Ck2QXoT4B~q^2Zh!(]㛡?qV4="lHeniI6<`g ]%LwL*Dռ#*b{ŤDv~+zZ=Y:x8' Rb#`7c40s|N\X㳧N )WgO^+CX{& RF;# /b@R2[3=5f'8cC) àsEd"1xT+za=T$3k0Q*"eŤ8)H) ),QxP Tw ^TYB/az`"7C]VX1KZn%D88c[xO۞61xcqg2-[awYLJjoqf`pfafmGA <4(yROQ|YHÄi{| (4&`XSv6e%PYl%+Q.=9Z 4pԄa,R#.* =$VʵD8;BWAHg{@;* T2B ŤfGˉ<](Y;8C"LVط1! ,,RN7u}2J"ܥfOdwqb@ZE;WCaCo Α`n>XS~dڃ( YLJ-k]08{X̌&C^_,Ӽ sMbE2};16X*HG1<31CyCJjU+We͐)Pd6Y.Ir ^ fk90g,-%-s_ 3! d!!^N|,+iGXCozRD6Tbg%tej<;v&Q,&%O6>1E!YFgHΐg%G6&!ed9~:St\qWvO v&?hn32) )=[S9cޏTP4;*,F˛t#SxŤW8J908ë^]XAECPgVtKqĜYSm7 Ҳ%처׈EXAb]k7&kX֪_{yӈnj3uq #~C^֠6_wY(% #YQ&*N*xjwɱbf#6qƘ;|2ߚZW>/t;‹兩gqWۘdhmjG{c O.qhЬfopitr^5C{ Oi/;b)߱V{sKxB!\WteuລbMq:A^ |Ej2M.!$A֦ i|s\=-qw0ǧeXv~٫;/%!#EICp9 ]m5{`4ǃO\p1 ܋uQՔ eFtg>9ESendstream endobj 67 0 obj 5067 endobj 72 0 obj <> stream xZi]G@bx{!EcK|dCfx !sN]f9[[]]{{7w;]tnB]R >ӝޔIߋǻݻ~xϰL?F ]Y7{;;yq>WYG`ari09sӎ۾)\|xpS)Xk<8)J:|}lo]=:A?ɻ#AHg x s?|gP,rcށJCM诰F %;=\tC\fт^-tϖg/6{o_.ό%8_G zWG8ȳv|={;^\x^гX,ZgU, D^FM!E_͇FTSY̗uf;4)C/P3kAoߜ4y?7g~jt fxUI!w< S_P[+ćao}o0kޥ+/I~V VDvecSZb,8۲|̧V|7M._3L3py\~+kڧq(׀K脘U~,S^r줐T)ާ |p)"ٸiG`^̸@J--w6 Jc\9hSRn??cMO9sśe"h3#c#}qa5\Sz-~9YZe;Cu;s7ۙߊU,@  Mh8Gv04z_X't _05ek8AqJ)h0hQPZ׃&P۱ynOƸ~%6QYJhKu"ŜCÀ3pKӥdz<4GWKtΜөx<ղϐA!"| ).|6tC)aP 3}lBxUv岿u#׻aJqqc| /BpxV8C!g|u9UFixmX5{NK}Ml^<"{ړg׵%y&lg+|zvѸ{{km&9*:) A#! @ӛFAF K+*WUnPHRPONka!Q2k]LձGq m`T.*tuR%ӤSUyÒjy54] JS'{Iw&).O! sV5tNۇ}JaP= axCOyˆ|} iyoz6{߃2oLUcf6ؓm0<??pD }e;ȇiw)w`X+颼-hfh ~"Vc-peѳ5+󴙩&erZJ ɍ#Eau`uL3F9Bi QPFHoٓ4jݘ2:.=w%=Uz g)B4 DMD8SFJ\(qB0[@r)mi-!r9qg4eȍvkUhC$MoO>qose:͋Y' mZӔw֜68n)UO#lBN9W OAܸx]hq.FlMirؾiRnX:V~Ե|]TR ĪhF*ø eR# #쀽U2``4&c66%բ)no:6qp:e~,: '}Ƨ)rlBoڊs?嬽*W-&oBU!&t1- +G5J`&6"]$&TqDYY]-I"ue᪣(L>M(!j.M$ї3jI]b?$t9XΔ;_lԵCٓwp| oFRW.O`;wvdK4K(A/0G:> stream xWY\E~0%B^ "!Cf|P !d{&3?v{zfZ\몳U:$)ٺ;=# ~~Пt |u۽Y-.ՁtYw$K+B7c-gŭiup [W4 /,'!BӀwj~~F1i4t5ͤ/ ]Fr /, 8{9.. woVVMulYQ+B>r6Z $PZ+wVX$JE3XJSu2IGʬۋq$uj9&v{\%R;97. 2vqnxСv5h:a;[,).wN&A*9IP>PpҦ%}jlq4yn8j"% ?kO RN7|{Bc* f,SPo葺0xYnH&fLL52P@M[pDRX :Mh*< + q +ƶ~+7M373>n37Q֕3֌]&3o䯈[oŝK%VIrSRܼF7ߡsLugESf|rzX7Ru&2|)K֍T=2|GWƷ)wʭfendstream endobj 79 0 obj 1455 endobj 84 0 obj <> stream x[$Y@n!Bĥk߮DDH'#(8c'df#oӵhF1ΈD-[kkWZݽ{>=C}^>|xi{P?|Nʩ'u꫏=v߶OO->l;yZi'}G楾a{>e}aG/O|ֶ2}a˺KwߺaZzK K.y׶d&ϯѝ>CluڭPe=N쾕]%1:?-۶4Ա<Vڭ+wSR%O!..L?|Y;1=5zd!.TjlIPwԥOo>,Ӷ,ksYmOYnY}:mgkYm۟tGk8G\u]9FK#A^#`5D,VLȳ&XM0j&XU'YUXUeUaUa"UU„\eJeJe SVXVXVrȪD, FFX0j*ÄsaabUnUnVjy &bYZa" &UV e'znڞXmO=sDͲBsZZd=DͲr=FD+G„'ڞYVVYVh{&Lj{퉞eBͲB3`BVmO,znނ&d=DͲ*BͲBs YmO=sFXfY&TmL@ʹ =+h{fYBͲBc Ym=sXfY1ÄYV3s@j{큞eznXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+P ^s3 ^s3 ^s^e,+b=7 m/YVh{Aj{A zn^s,+fY=mKe֜}yIO}2Lv*6}sm/m!z1cӴ,.0n߾mŴ-Zmwya2/5kסmaⴶO8q^Umд5οߩ,o7K -`?k7vmٵ 6e91//0VZ?iwiR۸؞}ζ[[VmeJSA:m7V;d[ۨq+RA[ }S Û؞-J{@tZοM}l[3wW}42W.[ly?آ>PGqFicmt~S}37{ߋrL>GS.}j`纴Euޫf?i~粯5ݖS3ڧ~xy{{Q_mmw_u:"u0"cD)ZX1b&XM0j**LIJ0˪ªD,UD,UD,UD,UD,UD,UD, LIJ**0jFX0j1r;r;L̴01Ӫ%}=F&fYZa" &bYZa"&bY-Z`"&bY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞ih{fZ蹙VznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞iUiUiUe,+fY=7 m/YVh{AͲB zn^se,+fY=7 m/YVh{AͲB zn[K漏ȸϷ-mu.s823e_ c}V8Թ+_)8,1X&2Lzܹ\smdj;boc1Cg۩MgG{5}T϶Evy =NCKW;cX,k;lå9[_ro[܎uYYۆ^/3=FWlG6S]֡ ߿y?yo_}V[e龕(ó{J{ug[gܯۮ߻ ?;v}7=$>y~,6~cmGy8ڹrcq=m۝_3 }ϟr!m~~cY۾wzN[;u\}73}8gݼm/h|:*^L}}/g{}7K%ž>`kܶUcDƱnQvk:Lj VLIJ`5D, V&IVV&bYUXUeUa0!WY%&bY%&bY%&U*`"U*`"U**0˪D,&"V#LIJa5D,jO y_>"*L3r +&V+LIJZaD,V LȫX-0jX0!/B=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{b=DͲB=7 mj{큞ih{fZXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB zN=7Ӫ=7Ӫ=m/YVh{AͲB z.V ^se\fY=7 m/Xm/h{AͲB zn^s^e|1߶ޖKD1-~OIoBt\oiة+uY%yʸV\8a_Rpo;>U>l\3\uz=Xԯ g{\Oqg׊5ןok1c-rY1=8#`5D,V3LIJ`5D, VLIJ`5D, **LIJ0*a0*a0*a0*`0*`0*`0˪D, LIJa5D,V#LIJa5DL3r;r;L̴w_,V+LIJZaD,V+LIJZ`D,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7*@ʹ =s3m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7Ӫ=7Ӫ=7Ӫ=7 m/YVh{AͲB zn^se,+fY=7 m/YVh{AͲB zn^sj}d>ͱ3iwuܯ'un8ӾeD)ԧ\eZ矆}\w/}aLöJKPWz飌گ}s$>q?;u/zOb!͗CI EA+endstream endobj 85 0 obj 4426 endobj 90 0 obj <> stream xm$Y@.M/3w\<]oNVFrq7U=Ne'YlOUϹ=3g;ʵƩ?ONi}o?s䡞Ɵ~|;1>{;}~}|zz~'c߯~:>n^7 n{}sm_˧5!}_)ZӋz-鱎;?Ӓ8xO]국tK\\o}<]_6>klӲ[봴>Gz>uym}/?m+%%:?o۶'vJy{鷾]N}J-KO).q|r&hOq@\Ɠ=?2|Ҷm.xX;ǷQ"njOԜOygu{GO?~!"WϜ1_}Gϣtqmy9f,k9f1΀X0!/a5D,V3LIJa`Be``"UUXV VLMV&e5jXV&IV XV XV 9e e e0!**LIJ0˪ª\eU`U`"UUXV>>#*9dZvXviVX7YZa"ڞYV+s*+=e'zn+\ m&bY퉞e5 =ϲB۳D,+=ssqڞLIJB=7jz.dgD,+=sV8egD,+=sV8dgXVh{fYUX*+= LIJB=7 mj{큞ih{fZXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB+zN=7Ӫ=7Ӫ=mYVh{EͲB+z.V+^seW\WfY=7 mh{}}XI+UPc;|⽮/=o-߾LVp~c^[[ۗv-[;ti'1ܖzK^yƵK5>oO/}h25K֜Qww6ӬK>OƑfcGxɵZp?2QpѶkô}[̼˿7K:S>gXo-=}X*}_ jO4O U/,:^>D>ixiIH>^7^ۨm31~orhy /3r>fD9Fs X0!/a5D,V3LIJa`Be``"UUXV VLMV&e5jXV&IV XV XV 9e e e0!**LIJ0˪ª\eU`U`"UUXV0!c3Zqiat1L.vX"oZaD,V+LIJB=퉶'znڞYVh{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB='h{fZ蹙Vz.Vm,+=s@j{큞eznXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=sCmh{Eʹh{Eʹh{Ej{E+zn^sW,+fY=mYVh{EͲB+z.V+^sUYc\e|~[m:}V} -pWE߽4K5㞛^Ʀ/Z~uX~ZyּK:h?5w7<{χ<ݺuzl׹K+X,k?lK.[{zY`\L[ίV~u;|~qD2so﷾̷O;ǂ2s*EPo@c3us㸟k8Q9m߯yi$Q7^+MX^>}T[S=F13r"DŽ3fe5jXV3fe``"UUXV V &bYM`" &bYM`"U*a"U*a"U*a"U*`"U*`"U*`"UUXVV&bYUXUeU`U`"UUXVV&bZvXviaabUYV+VejXV+Ve'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞ih{fZ蹙VznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞iUiUiUeW,+fY=7 mYVh{EͲB+zn^seW,+fY=7߭ v_oot@^ɀcyiLcIen\_9߰?r\븖k7_\?R>*i^`%mڹmi~q}W<=i9fX(&bY-Z`" &bYͰa" &bY5X5e``"UUXV&e5jXV&eJeJeJe e e eUaUa"UUXVV&bYXeU`U`"UUVV&fZvXvi5CYV+Ve'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞ蹙VznU큞ih{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞ezn蹙Vm蹙Vm蹙VmYVh{EͲB+zn^seW,+fY=7 mYVh{Ew?Of_{ke}^cWoa5}UnӂWuηUߺa{+miK򫰏u|eI_qw߼ 7ոV2sץ&'{yܮmN{wzF~o×]^ǵmjƿ엫.x6釷KاǦ7T?'~Ln>g;MFp l,'FS=7+.endstream endobj 91 0 obj 4279 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 77 0 obj <> /Contents 78 0 R >> endobj 83 0 obj <> /Contents 84 0 R >> endobj 89 0 obj <> /Contents 90 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R 77 0 R 83 0 R 89 0 R ] /Count 13 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 97 0 obj <>stream x]=n0~O,ߓDyӸH$V  33/"~ޛ6fYc͵ɼ>q{ .Ko{= 6׏}1noRy^rPJ$]Au۲vkW"k_"u\"XI.~*R"iЋIz-4S'%rZK$zR"i{ x?g-+ D3+ +&oV̕8(p&` 8p 80sa 8 `fIg\ ȕV(U̼؁s.48$@ %auy;` Ib걡#+.oTV.8QX]ގV޶7xy> endobj 31 0 obj <> endobj 9 0 obj <> endobj 98 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 99 0 obj <> endobj 30 0 obj <> endobj 95 0 obj <>stream x|{|ս9fMټ7汛7#<.$@@P[Qի>h"m"TV->gzl~sf6~~033gfs6#hbь١2D8]z]wr4BK78Qx![ֿsDH[eJ{ }='w xTVA}tipwݺyj՚u+>{cҷ^=闫 m~o.}B`'\=7Vbc'ދrᙻ:^@m=CFoCyxt?-xތvch?:~%BflX_9o߅7AY5 2S(y6TjM0aS0zoCޞcGO7?èWkvtQa'o>j=AL'f#y.Gol" ]qbl!|;C]wBP+!3-[w?ȶיz-{ChZo"<]hq65`Ppƥ-F3<G_Cס:jk*+"ҒPqQa ?/7';+y3ƢxJ0d72. o;KwGo cIȪ@8.45q;vuЌt =ks}n xl"_Sog Fx+Z0OsSO7;\+|rޙcgg :)/5BEʘTt$\MٴҷsW/뭴iSjsgSO^y{C\'Ա`> SRj+n5t,Q>Vӥ@ES`* [ꋣYдzΥUyq8mv~+pk!)"`sk怯ygmK>s`֝M]û<[;>\'ٖ3xWrs$Wǎvr?nmzNb<,tA3p^p'@=u>4@}M;Ǹ@QGJX=ݷS%_]:;p± һۖ[4Ǜ?{;-_uti?I ~_O;f/ߎ f;e|ɴ!\j%\>琌6zz FNLatQ:8Nud+"q!M'(o I<43A"Ȍd4PVxu^>Ou/oLܯՑ~{{FlKlvP;+ ,U)F t'ށ +PttwUTUTFr^#%F~-3+Q˯~'+ 9mo{_Z*Oa匁 o@1?m`@|Ł7tHk Kss90UOx<xCvoxSvC{KGYOs̚ݸxlۋђKrw7c^[{!;Oʼ})Plo-U{ lV>cNg3{5x /X$V}=Lzu^7Ym)6߆eۤ $` _G?'x$%BQ14:(鴕^XseFY`jƨzxJ+j[1gӖ[=&t[zm.w;"QDAnX7Mq;.o &ra/,q7oP w ~ն~ @:CԼ+( =)0"%tPZ-p6}A)hU9&ؐM#h1kuC)FAA,5s>BXFKKpr9.R9cy6;uS'`Z~Kn[oN_$l7MгكgB-Bvn9l5>Oon4R0gHr[cދG_uzPKƊib3 D***+R"a&7''7RHa<;8e„AϙĿ% O~w-ӟ͛5N$i_tAD.A&&4:u B 'ܐ0JAcxcc5,+"Nc!20X>9@n& }QBCHՙG, |6` `rK߂%nKΞbF/`G z2\}s@"CP}^bJDQ D"z$U֠zq :lG:6cZo0g 5Xcccn&rjML mb BD'VY>LѮTA2x QVm^2`,TՄn +'.tG~'/D392Rrۀ;B8[!P]bk)̵lJ R, ҷ$fdh"[ֈaO)D,͐Xa6 (HBzI hsS4vDF먄3H P S"rD(iG/ _s2 U%#y$izϨ)hUc9K> >ugZ( zybU6-Z/1chYw$>+wPQNsКeo_ ߭y?i Z⡐4chwz 6kFv\jy͕a;#J9E,qqn *q4[0 yyjV+c)* #!+-.b),>@&(o@#Pp &xDN @NqaY|>YnQP<&NLjE=sɨmNw|ٹd{Z^U[jvϪyͽrS*7qϒn9KX޳a<޼mmm->$ _rbBAɨR*NroUPqy6q,UbWƌcdڿ>9}p}oc1=fr 2Z8+T78hm]b6D$xTˍZJ %GE&Q 1\KUSݯ=G/F0o'㉾+q* >i(AɍeV:VnG.l!0WwZ1/"|jŊP4 \*00@3ţ+` ,P|> eR\ƤQiI'|^.-I"Dq"8|fVRtd *ܰ .ZuݜcnRw߂WoXPugLZʩһ,YG%+V)b_J7Or[` Kc <Pnbue+X[E2Byz L=4%~Rq1G0xK/{u6ٻYp-P7D2F6,vll|زҒNpa-r<0rȑ{sg?hAY:t4 'zI=g)U -o!ngx>?+op윫UL_[ìt[|NKH^ WhvnݠżKuprGqQӳ!J0Ҙ5VѺ:V+Z95QNIz^A'.B~ɏS56msDP*|Ly=>J ʨVBc!JW#\Cӄi/>cx7OHEhK*-ݏNh>{daiL>y4h%Uey:~6//+3V+S{v]UeXJ7y'ɀ$z ! гNdl:ce6 ꩑ǀW2 Z|6X )D%a33W)v3q$ ~9%WUXӓ:Kosxc΢NϴU.Kl.iK1kağ;:T2-Rgʽo3tFSq!Apn-kJMF6I 2kaF&dXċ;xFa3!X6 ~A~F']O?I64ϑd'{6 |:5.L!qyӈkA;`w%Fyo۶=:}‡n[V\R?csv#qdZy|=Ks*XG6ثH@iOu:p7er Gu=C+ %)Qo9EEQ藏8#+.'ܿ%m/Wq^Jy+ȓԑLf`ְmĕrQd5heX!BѰkd5T*SFD0 !)Ƴ`nhFC9IP/α#_ck_A\4zt.b ~ϐ7"g_ P3ۈ ߙ.eI>PruV:N݌1°YsŜnB"^TA0 r&YEEU&@D'J$fRAPVU^6Ua34P,ܰ!i[IP{ 'H%s O^  Ƥ\J_Ꮈ%ٙ@^YSj6+S͠295TiJ]T:5NTUAoH.j)/K'8N&;*)$%rkUyig<%|p<ںdU_sZVYisbEݕW9)>_~f G'[q`:Z22!ŝoo]㒠_̪pJOKYY;Vp1W*؀sUO.9]XuYxȘ4HF E`4z3\+'H }Lک Q6۽*s8 ciI\ߪN\ aa .7TZq47mYzK}'RM1Rã̡LyZ/tHZvio_ALȬ>xY!)-hFW,)Mۧv{JMzT7MhmӉ;KS/r.uմv MMmϮ z[(we~q5̒S;_:=ixcoսd֚$ZЯg@JRQS`sg1iszAD?بtc3MZ 894)y~mc6&˔Ԥ&S^4)qQSnP O v/Yk̼)MfDd/kcB݈8Sڏ,v=&J m`2QseOрU":ȕRRZ=3T(V/a£;67 5t_r%6mj˫߹Sgg3.2tzٓ ]qQ JGdB.Wx0kL:~d.ΘM0&'SF)0h"ʠb)X*[l Mdٕ4kQ@]"1cGQ-Rԙ}aNCZ~OHJ]\b+#R܀SSn fj=%4@kE8h2+Dc6KR,%-_-ќ 1bISmYP!*C3R-ob:nI\4*xoo]|G'XRVv2ZW 7.vl u|[~B7%3l꜂¢`ᵓAO ȅS)wڑ4"(j$ޭG,zeQ:RŤ,B0Yo`~LNGgBAuƌ}EW I,ōLfĚ(Md> ( IF2Yu5B3F܉N"# Li]{qe֭<维ko͹b}ϝk|$:3 y*<_u5Vba,f`A i|j+M3@狄/1/rЉ& aPiĩ-xKV.!IRN4 ݅nBH', )gi<>JeeemONB'Th坎c ;.MF"D11EWYn13t |cmnu#Ǭ-2};V?#*}>:-8f:z,c0W5-4J9%3gGA"v9NSikԛz+gX4 ϩ#ʏdʘ]:<]N!8UK*Λr^rޒT'vEeVof#T1nDB44P Zd Nk\l093ҶF:u&&iJzDi)62j[Ι~6$ٝ&7oPǃ r yf# &Q2A1-*ףt'!UE{ ,R\%$+Z$@cW̬hkKuX]WG]1%M3$ksbw/eP%ZɘoEZnys~xʆ¢R[Ӿ3իڋG料 /^RTV~ #~k_?VַgĻx6cH[W_zSf=\)<.h iyjEe<[c&f蝚$k1)I j=r_צ79}LX'9?SaDv$mmu7p.aCF=.ݪ&HPL(ڧSI\txDʫ"ťHyU*E*a͋uyt2X_Z%8*//TWffݷ&>zPڻm{݉ڄKySg\%9Ԩq\ e2>c3h%rq רx8-L{+M͠uH۠qk Xf_ԍ*]Px^kPW~~"%gV:TbCR s;[=sb*DcKI6bWuAH&*BcprI!!ӹT[ě ]wH~%OplUV5dԭ܁ZBjwԾ@K˧ُ5ȐloiopGѹ07d@ h`kd]: E@ 짐 y.׈F}RcFnptHi s8z)~pH\DRo?Oy\UTҍ~Nz>jVvqjSr,1Zp'?O-+Wj{t737p &:M\Ě\5a dx^$:jZ{%B&5EM]&NPV(/,N%0((rlO%y,q\lÞߤ[`~u_ݯW~u_ݯWW22j$k ȿrC ysZ8g0͜U8y~HGit)4"gBYV-nFϹswIpP ̎ P9jDP=ZDQ+h264Bh2TԌ"QZ# R*PPJd#}/:\Mw#ڮhw'š*(-¬r\J6|?|Ժ|b3\j)nWI endstream endobj 21 0 obj <> endobj 96 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T18:30:19+02:00 2012-04-30T18:30:19+02:00 PDFCreator Version 1.2.3 TLM 2.0 Approximately Time (AT) System Example - 4 Timing PointsJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 101 0000000000 65535 f 0000033063 00000 n 0000070384 00000 n 0000032919 00000 n 0000030373 00000 n 0000000015 00000 n 0000000752 00000 n 0000033129 00000 n 0000036064 00000 n 0000051851 00000 n 0000036004 00000 n 0000036034 00000 n 0000039059 00000 n 0000030567 00000 n 0000000771 00000 n 0000002192 00000 n 0000039089 00000 n 0000046961 00000 n 0000041999 00000 n 0000045012 00000 n 0000052034 00000 n 0000065552 00000 n 0000052172 00000 n 0000044926 00000 n 0000044969 00000 n 0000049347 00000 n 0000030763 00000 n 0000002213 00000 n 0000003570 00000 n 0000051446 00000 n 0000052326 00000 n 0000051783 00000 n 0000049399 00000 n 0000049442 00000 n 0000049485 00000 n 0000030959 00000 n 0000003591 00000 n 0000004284 00000 n 0000049537 00000 n 0000049580 00000 n 0000049623 00000 n 0000031155 00000 n 0000004304 00000 n 0000005787 00000 n 0000049686 00000 n 0000049729 00000 n 0000049772 00000 n 0000031351 00000 n 0000005808 00000 n 0000007541 00000 n 0000049835 00000 n 0000049878 00000 n 0000049921 00000 n 0000031547 00000 n 0000007562 00000 n 0000008985 00000 n 0000049962 00000 n 0000050005 00000 n 0000050048 00000 n 0000031743 00000 n 0000009006 00000 n 0000010788 00000 n 0000050089 00000 n 0000050132 00000 n 0000050175 00000 n 0000031939 00000 n 0000010809 00000 n 0000015948 00000 n 0000050227 00000 n 0000050270 00000 n 0000050313 00000 n 0000032135 00000 n 0000015969 00000 n 0000019913 00000 n 0000050376 00000 n 0000050419 00000 n 0000050462 00000 n 0000032331 00000 n 0000019934 00000 n 0000021461 00000 n 0000050525 00000 n 0000050568 00000 n 0000050611 00000 n 0000032527 00000 n 0000021482 00000 n 0000025980 00000 n 0000050663 00000 n 0000050706 00000 n 0000050749 00000 n 0000032723 00000 n 0000026001 00000 n 0000030352 00000 n 0000050801 00000 n 0000050844 00000 n 0000050887 00000 n 0000052541 00000 n 0000065749 00000 n 0000050939 00000 n 0000051936 00000 n 0000052253 00000 n 0000068427 00000 n trailer << /Size 101 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 71226 %%EOF systemc-2.3.4/examples/tlm/at_4_phase/docs/at_4_phase_example.ppt0000644000175000017500000104500014342422106024705 0ustar carstencarstenࡱ> " !n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`*( v/ 0DArialicawmanPPؖ2 0ؖD-3 00000wmanPPؖ2 0ؖ DWingdingswmanPPؖ2 0ؖ0DMonotype SortsPPؖ2 0ؖ@DArial NarrowsPPؖ2 0ؖPDTimes New RomanPPؖ2 0ؖ`DTahomaew RomanPPؖ2 0ؖpDCourier NewmanPPؖ2 0ؖDHelveticawmanPPؖ2 0ؖ@.  @n?" dd@  @@`` | ^     4C59?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @81<4dddd 0 g4dddd2 0Bppp@ <4!d!d 0P<4BdBd 0P ʚ;ʚ; )___PPT12 %___PPT10D-3 00000ew̕̕PPЕ2 0ЕDCourier New̕̕PPЕ2 0Е ? O l!8, / * 7 # %4056/p<4X@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> a(     A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  N?Rectangle 4P  T Click to edit Master title style! !.  H?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   Nx?Rectangle 6"qkPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!` drs/shapexml.xmlVMo7 x-}Dm!4* .ښKnI>\ (( ͊C̛yRl++NxM331KΜ:ht?'fجݤNzl#+ޘZjV>vk+^xTw덻(5QzWl]YV FgZT{/3$$n0ٓk_Ln~E)}4 kn#EojJ5t*_6{N_^ZZ ZC,fr o [[c!`p9:.a1{2+ ToLKh0 U3UV DPibt\(U@ܴ5aB@Rb"9P4jc3g;+@ GC-9S5q11><̞+fFz ԄEsDgZ^9au;8#4덨O aCkx I8kX!64,=*sdQΔe[$Ǩ)X8RH$ƖB -.}T jg<haDTL6-P q !zKS M@7y]&evCShdu|ėZ"cc*/}ع:{])i>fbQgi;1}"C]bR<}_޾\zNn8\ f0/pvJ`SS ^ ioeѥIFt 3:X=IKn h蟦^H S%'5 /rEQAB87Ĵ>F tGb!sU  +/ :_ +Hx;uֵMځa'אfr/PK!drs/downrev.xmlDQK0Co.mpE!;}mMRe>;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!` *drs/shapexml.xmlPK-![drs/downrev.xmlPK`,    hdman`  Arial&Monotype Typography  ^*"G  B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!o!drs/slideLayouts/slideLayout1.xmlX͎6;:x mp6F gZת)J%)c["]1QHW F= 2M0vGn YhwB_dh2-h331.op%XåXrQz~G81`$BA,{%w^^802-{ōAZp2Bn)r5CՑ)<مwˤ`*y$֩\ .K(຀%aN# EA&MȺĤ6`5o9"`]{=ۺ^,3*ORDd <ٮ,Flu::Q KBicw\g(Xv<΀o'l] >ȗ8 鞸Mc@#.k*v+;t (8q ^u+<cAx^$P<`8H(pPBpNH(pX\NpP<$4G%CB5AxbRnO}?w?}vu><)2TY:Ĝr}G>P 5+I8&9w0ch7Z9b#ZJJ 瑂n8C|Pۍ5T*P/xPxPxPxPxP~x_}}uw4=;D}w׾e'M]Gw#+޺_+Nc(C )ɴ2!3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!o!drs/slideLayouts/slideLayout1.xmlPK1PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> |"(  | | A"??"system_c_title_9Picture 2system_c_title_9 | N?Rectangle 4P  T Click to edit Master title style! !. | H|?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB | s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0plan#H 0 4343( 0!;A 4  4 H'?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!U drs/shapexml.xmlUMo8/Hmg1I.FDEZS_7lAX>#qyMJ9XlS&=ޝ|2%ikT&WN`.ut4EZm *Z xuO)L@F-5F^(ZtsVq;єc|q&QT OZS9-~BKh!1mh9?#(A5@XZmu@s&-{Yzd+W[bn*cJl2Rn 4U |<|ca9({4eҡt1;Z|`!8wǦsc:pBOnS$/Ӕ%PWGbָߒƖ[BJ]vQںg)֎hrrvń5#{\1}{kul$2Nd"o,>vff츓;nNdNJ?7)ha1q$%񬕞p* Xc xqOx)Y񅇢NM%4&S5Pw6zB]& 0'{!&5A-Y h doLMOK)_(!ޅʚpYt9sʉvżɾ3c{i_qYc!OcN(2)ۦ4T,ʜ|[%*K3iog,!cђb,FQp;ldVͳ+2=͝ی/ͱ O7[ad^tλ֜(J ?\wSA즻PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!U *drs/shapexml.xmlPK-!3]drs/downrev.xmlPKP ,     hdman`  Arial&Monotype Typography  V    V]8Xx  4 HT?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!G ѕ& drs/shapexml.xmlU]o6|/@wSI\ pkUSJR_YRPb?Ȥg#VڇB> Vυtt)EdK2Bnt_s;6B.blǃAP PZmV9P?Z"5fp<Vv5kGa5. y28RZóDĩe`)=}dnl{T~o )ci"nZ,>8G}}u_Ei|sh*')62pu KW!NYa*8!~`<7*ѥi5 IܧtZ|C/:;>K3sSG텩B<2mB"&QBPX[[\ߺr r~\hW)^< ?y-BWS(&IҌ;gR#Uص<\RY8p+wm/>قZ#$LobB l@J^+3f% gE[L?AU.WP/xL]ӄQ/V:ʻ(Q*R0_ZSS49Q-%&%m*t<Rږ4QdO4%(x؞S`1=GPUS3]VG}얻ЪM'_w8ɧujy7{ Qn[y?sƁpOÞm9%OeԍΤBg VYbNϮInFR,K(u]WgS?ҔI75_imꝫxqgqз޺b؞ۤ#{)[ T=@l[M{/PK!gdrs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!~r'8drs/shapexml.xmlXQO#7~`BBrCGz!Z/~ ^UD7ͬyLZWMΤNMV賄:9sЙPF˄_J~ͻj* OKZnl))zըn Mz_%.`Ig)N{֚qn+pUS2Yˉ.Ur2G$޸FuM.> E ynU!;&He»[BF0b 瞥Xu'KI6=!:Abd( x:NBU!A*vN/8= )f(R|E ,9GԫE c>*DQEj> H+.3ULAn%M}2y.SXM,wT}qN? [5QGf<r# dD9?+B2yO6Cf8:C PgʊL'b2Fk >jK1֒@A&3rS.R8g B NEY(h7Pvzwn?Ѧv^Ʝ0ؘ=N%k#)5E[b g&ddH2+Pf`RYIղ_~W5{D{-f2:kҡIG᳒.t6=-nkM5^糒']w1ˬYfu_uxx^p PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!fᰜ+ drs/shapexml.xmlUn7}/ 8!6ⴀj>s\ܒ\]=C$҃43g |4ق> 9SVJx?,Da+aUߪ^K; -a&m1 ȅjDZeW;߈^eԘpx>hWռyj普 yxV4$0<w'`L\?X*/H_0u=2![ ޭJTFA·j -Pу ?q!ۀYU8.lj!>J-tD&uzu1Al|$y>E(dQ!κ{m̱ɧ=.tgdFI%|UrBl#Acu5꾬uՖrO0 P/@Kҳa W3(&E gNzv͝3%gټX\ӊ8VNvOo{DHUOMr4%&ybhIIkeFԬJL_hH`:+X^n4FMt68+uZЈTwƳ/q'/9iXlZZ^4ڠ_On!|Pk 1a2l\~F%Ȳ~*1~0)3^'QL c~MjlIGJHtD9sCIܶr&c&vԁ[UqZyؽeJ>mRϗeo#Og?<$׉zVTLxAYvnOI ɏy~_XN]-[n,ΖNbdڹwf_h_iIM/}ڛyj _cAlз DK7=WIox9{D2ِໝFkPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!fᰜ+ *drs/shapexml.xmlPK-!ndrs/downrev.xmlPK_P,     hdman`  Arial&Monotype Typography  V    V]8Xx  4 N?Rectangle 7"uoPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!fb drs/shapexml.xmlVMo6 x-bpzq{,hUSJRoH{\9μb;i]at»:IЏ 0o9s^L(eŸn~}5qMo&K7^nl)<]YR{ΰ]BһUdweE3-Jz/S$vHcaҭkr%̊= * GJ868MN5qn;wLU#Sʥ0T!K^ KQ!¼P8[3""&ܖVDqL35+Ξ>=بGLQwASx#'3!:Qb( y:Nyԥ4 'zcf!rYL%P'J#΂6 T:`(U_F4c&{PErO1Oaf8w֯wt]Ό :EԄ9cEgJ^U)9Eت3'q0P?A=.$ک.QVG&.Bmd²u bO%ZQgTр)vCԚ7^ ʩ"TLm!gU\q[@$?28& Q1h7P G%?{XBTY q ~ Ay= ȄYX_p4}D9F(`[G`'*x;W/_ɇC ^=98-p6'&ODj48-&]׸7Vg>nk?"+TQSf#u͝ ̩B_ o~'z;fDW]g Q]M/"PK!1drs/downrev.xmlDN0DHHܨ VʥR[moћ/H>hg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!fb *drs/shapexml.xmlPK-!1^drs/downrev.xmlPKd_ ,    hdman`  Arial&Monotype Typography  n*    V]8XxB 4 s *޽h ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>x.lM0Yn+eQhr%E:Gwstt|%*\mz<.N[F5#B+%xQs"B٘$8s.ҌIbtΔK3C>zRv{HCurjLq~6z!$1E̽)-K ^WGjIN:u`KBB $͕6d*F(f)9ç , ů0'ʕl6 VB;ճeX"'1` L˲j) 3Y(`89=ai՚P uݝ[WX~!Kf ]Zkg\Y]u r˜zcÉ?uNb͈֠<>Yݮ>߮Kͨv"XksR !y^X겧 |-U*ΚRvz{`OPv0=`kĢN=Ib"6t"oE^ [YbT]ҬJB rpd(`?Td PhXh6Tv:ͼlU*k f{*nXn_PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U> >V] 8@X`x6 8 S ޽h ? ̙3380___PPT10." 0 SK@( j @ @  xll0e0e?Rectangle 2P  s J$AT System Example - Annotated Timing % @  x0e0e?Rectangle 3 l /The Goal is to Illustrate: Application of TLM 2.0 in a real system option of the non-blocking style This style has been previously referred to as "4 phase" Most complex version of non-blocking/AT style Possible Applications: Architectural Verification Software Verification Early Performance ValidationbJfNJf  N 0 X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"9 0 88  H8( ption;K H H  xds0e0e?Rectangle 2P  s ;Example Block Diagram   H Ls?Text Box 9     hdman`  Arial&Monotype Typography  lTLM 2 GP"   G  V]8Xxb H b%s?AutoShape 20    hdman`  Arial&Monotype Typography  N  V]8XxM  H h42so?Rectangle 21p ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_4_phase (m_at_target_4_phase_1)p* GGG g G * V]8Xx H hXso?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   SimpleBusAT (m_bus)J GGG  V]8Xx H h^so?Rectangle 23` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_1)^ GG gG  V]8XxW  H hPsso?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_2)r GG gGG  V]8XxM   H hso?Rectangle 25` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_4_phase (m_at_target_4_phase_2)p* GGG g G * V]8Xxb  H b,s?AutoShape 26P@   hdman`  Arial&Monotype Typography  N  V]8Xxb  H b@s?AutoShape 27P`   hdman`  Arial&Monotype Typography  N  V]8Xxb  H bs?AutoShape 28P    hdman`  Arial&Monotype Typography  N  V]8Xxb  H b8s?AutoShape 29P @   hdman`  Arial&Monotype Typography  N  V]8Xx6 H S ޽h ? ̙3380___PPT10. "" 0 e]@P( A P P  xs0e0e?Rectangle 2P   EHow to run this example (Linux)  P  x0s0e0e?Rectangle 3P0 s PSet SYSTEMC_HOME cd examples/tlm/at_4_phase/build-unix make clean make make run >QA AAA>V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt"& 0 ~PT(( X T T  xs0e0e?Rectangle 2P  s 2How to run this example (MSVC) T  x0e0e?Rectangle 3P0 s Open a explorer window on examples/tlm/at_4_phase/build-windows Launch at_4_phase.sln Select  Property Manager from the  View menu Under  at_4_phase > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run,DZ%A C A  $$ ((,,00 4488 <<      A $$88,oV] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"= 0 `X?(  XY X  xL0e0e?Rectangle 2P   %Expected Output (expected.log) 1 of 2*& A     X T6?Rectangle 1028   hdman`  Arial&Monotype Typography  Z Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path & Info: at_target_4_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) & Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s)  ..G L-Xk{97 G V]8Xx6 X S ޽h ? ̙3380___PPT10.ntDw;"  0 W O p\ ( zSmM \M \  xM0e0e?Rectangle 2P   %Expected Output (expected.log) 2 of 2*& A   l  \ NLc?Rectangle 4RN    hdman`  Arial&Monotype Typography  Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) & Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s)  JJG %{:7  M 5 V]8Xx6 \ S ޽h ? ̙3380___PPT10.ntDw;" 0  33`(  F ` `  xh0e0e?Rectangle 3P   &Initiator Module yz P  `C ,Group 129"P     `C ,Group 130" & .` P?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /`C ,Group 132" > P  0`C ,Group 133" p 2` d43fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3`  $B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1` T?Line 136      `C ,Group 137"  # (` P?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )`C ,Group 139"  > P  *`C ,Group 140"  p ,` d3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -`  lB`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +` T?Line 143    `C ,Group 144"  $` P?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %`C ,Group 146" B &` T?Line 147P P '` d >]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p `C ,Group 149"P p  ` P?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !`C ,Group 151"P pB "` T?Line 152P  #` j%,>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ ` jLo?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx ` J:?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx ` ^$?AutoShape 156p V q  ` ^ ?AutoShape 157  ` ^ ?AutoShape 158 P  ` ^$?AutoShape 159q Vq 6z P   `C ,Group 160" P  ` d:3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB `  :B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   ` ^>:?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   `C ,Group 164" P  ` d$A:3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB `  O:B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  ` ^a:?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx ` d{:>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx ` d܄:>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx ` d:>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= ` d:?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> ` dX:?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx ` ^ ?AutoShape 173  ` ^ ?AutoShape 174P ` d:>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ ` P:?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB `@ Z?Line 177   6 ` S ޽h ?o`````````` ``````` ̙3380___PPT10. ""|b 0 aaBBh_(  h h  x:0e0e?Rectangle 3P  = )TLM Interface Module  x   hC *Group 35" $ =h N=?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >hC *Group 37" 8 P  ?hC *Group 38" p Ah bd=3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bh  )=B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @h R?Line 41  x    hC *Group 42" ! 7h N3=?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8hC *Group 44"  8 P  9hC *Group 45"  p ;h bB=3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB =>]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p hC *Group 54"P p 1h N8o=?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2hC *Group 56"P pB 3h R?Line 57P  4h h%,|=>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx h fD=o?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  h F=?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  h@ Z$?AutoShape 6 v/"  h `t=?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   hAC *Group 59"`H  /h b$=3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0h  =B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  h b=?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ h b=?Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" h b0=?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM h b=?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx h \8c?AutoShape 80*3  h \8c?AutoShape 81   h \8c?AutoShape 82b  x   hC *Group 83"eB -h R?Line 84P P .h b<>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   hC *Group 86"c=B +h R?Line 87P P ,h b <>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx h@ \8c?AutoShape 90*eD + h \8c?AutoShape 91c  h@ \8c?AutoShape 92*D M h \8c?AutoShape 93 s  h@ \>?AutoShape 94: <  h \>?AutoShape 95g: : : h \>?AutoShape 96&: < P  h \>?AutoShape 97* < @ T B h  0<BC+DEFQRUVW8c?u+ @  +Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE h P+<?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  h Z?Line 101Dc; !h PH:<?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB "h@ Z?Line 106; #h PH<?Text Box 107a O 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB $h Z?Line 108(  ; %h P|K<?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &h PL<?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'h Z?Line 111vkB (h Z?Line 112;-u54 )h PHg<?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  |Initiator_socket*   V]8XxB *h@ Z?Line 114[+6 h S ޽h ? hhhh hhhh hhh.hh h,hhh,hh h,hh hhh h hh hhh h hh ̙3380___PPT10. ""[P 0 OO44l5N( NΘ@ l l  xLx<0e0e?Rectangle 2P  < 4Target Module  v P  lC (Group 3"P  ~   lC (Group 4"  /l Lz<?Text Box 5 p   hdman`  Arial&Monotype Typography  rtlm_initiator_socketC  V]8Xxn~   0lC (Group 6" V~ P  1lC (Group 7" p  3l `܊<3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  N  V]8XxB 4l  Ԓ<B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 9P    hdman`  Arial&Monotype Typography  N  V]8XxB 2l R?Line 10 '     lC *Group 11"   )l NX<?Text Box 12 p   hdman`  Arial&Monotype Typography  otlm_target_socketC  V]8Xxv    *lC *Group 13"  \ P  +lC *Group 14"  p  -l bȬ<3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  N  V]8XxB .l  ش<B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 16P    hdman`  Arial&Monotype Typography  N  V]8XxB ,l R?Line 17    lC *Group 18"  %l N\<?Text Box 19 y   hdman`  Arial&Monotype Typography  esc_portC  V]8Xx&   &lC *Group 20" B 'l R?Line 21P P  (l b8<>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  N  V]8Xx P p  lC *Group 23"P p !l N<?Text Box 24 ps   hdman`  Arial&Monotype Typography  g sc_export  C  V]8Xx, P p "lC *Group 25"P pB #l R?Line 26P  $l h%,<>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  N  V]8Xx l hp<o?Rectangle 28    hdman`  Arial&Monotype Typography  T  V]8Xxr l H>?Text Box 29D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_4_phase_target) J# 2GGG # V]8Xx l@ \$?AutoShape 30P)" l bh >?AutoShape 31a    hdman`  Arial&Monotype Typography  snb_transport_fw" G  V]8XxTx P  lC *Group 32"P  l b>3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  N  V]8XxB l  | >B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 34P    hdman`  Arial&Monotype Typography  N  V]8XxW"  l b,!>?AutoShape 35 z 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG  V]8Xx42  l XF>?Oval 36;4 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  tmemory,  V]8Xx>  l bM>?Rectangle 37   0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  t response_PEQ&    V]8Xx  l \8c?AutoShape 40a   l b8c?AutoShape 41) l \8c?AutoShape 42 a / l Na>?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  y memory_socket*    V]8XxB l X?Line 44K+1 l N2>?Text Box 45 Q 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  {nb_transport_bw*   V]8XxB l X?Line 46 v  l@ \8c?AutoShape 40 ~ T" l bw>?AutoShape 35 )p0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_request_method6 GG  V]8XxA l b>?Rectangle 37Z J0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  wend_request_PEQ&  V]8Xx l `8c?AutoShape 1073{ Z l `8c?AutoShape 1074J  l@ `8c?AutoShape 1075p b l lG38c?AutoShape 1076za 5 l N>?Text Box 43n f 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_resp_rcvd_event*   V]8Xx6 l S ޽h ? llll ll l l lll l lllllllll ll l ll ̙3380___PPT10. ""iJ 0 II88pcH( 러zSmM p p  x̢>0e0e?Rectangle 2P   8Router Component  x P  pC *Group 56"P *    !pC *Group 57"  3p N`>?Text Box 58 p   hdman`  Arial&Monotype Typography  rtlm_initiator_socketC  V]8Xxv   4pC *Group 59" \ P  5pC *Group 60" p  7p bL>3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  N  V]8XxB 8p  ؼ>B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 62P    hdman`  Arial&Monotype Typography  N  V]8XxB 6p R?Line 63 '     "pC *Group 64"   -p N\>?Text Box 65 p   hdman`  Arial&Monotype Typography  otlm_target_socketC  V]8Xxv    .pC *Group 66"  \ P  /pC *Group 67"  p  1p b@>3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  N  V]8XxB 2p  >B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 69P    hdman`  Arial&Monotype Typography  N  V]8XxB 0p R?Line 70    #pC *Group 71"  )p NP>?Text Box 72 y   hdman`  Arial&Monotype Typography  esc_portC  V]8Xx&   *pC *Group 73" B +p R?Line 74P P  ,p b,>>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  N  V]8Xx P p $pC *Group 76"P p %p N`@?Text Box 77 ps   hdman`  Arial&Monotype Typography  g sc_export  C  V]8Xx, P p &pC *Group 78"P pB 'p R?Line 79P  (p h%,@>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  N  V]8Xx(x   pC *Group 99" p p fD@o?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  \" G  V]8Xx p F87@?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,2>)L 0 P2GGG  V]8Xx p \$?AutoShape 13  P  p \$?AutoShape 17PPP   p \$?AutoShape 4601P   p \$?AutoShape 47ppP r  p N2@?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  vtarget sockets (2)" G  V]8Xx  p V?AutoShape 51   p V?AutoShape 52@ u p N8I@?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yinitiator sockets (2)" G  V]8Xx p V?AutoShape 54  p V?AutoShape 55   0  pC *Group 89" @P  p bY@3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  N  V]8XxB p XjJ?Line 84 0 0 B  p XjJ?Line 850 0   0  pC *Group 90"P  p bhU@3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  N  V]8XxB p XjJ?Line 87 0 B p XjJ?Line 88 0   0  pC *Group 91"P  p bb@3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  N  V]8XxB p XjJ?Line 93 0 B p XjJ?Line 94 0   0  pC *Group 95"P  p b{@3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  N  V]8XxB p XjJ?Line 97 0 0 B p XjJ?Line 980 0 6 p S ޽h ? pppp p p p p p ppppp ̙3380___PPT10. ""4) 0 ((t6(( zSmM t  t  x@0e0e?Rectangle 2P   >Expected Timing (1 of 2) ~B t VԔ?Line 42<< ~B t VԔ?Line 52 B t ^8c?Line 20FB t@ d8c?Line 21F) t Ht@?Text Box 22 :`    hdman`  Arial&Monotype Typography  +nb_transport_fw(GP, END_RESP, SC_ZERO_TIME) , ,G  , V]8Xx t H@?Text Box 23]   hdman`  Arial&Monotype Typography  zTLM_ACCEPTED (GP, X, T1)  G   V]8XxB  t ^8c?Line 25DB  t@ d8c?Line 26 D +  t H(@?Text Box 274   hdman`  Arial&Monotype Typography  -nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) . .G  . V]8Xx  t H܎@?Text Box 28    hdman`  Arial&Monotype Typography  zTLM_ACCEPTED (GP, X, T3)  G   V]8Xx,  t N@?Text Box 41 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  v& & & & & ..&  V]8XxN t N,@?Text Box 42b /0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  2select_initiator (enable_targeting_tracking=true)$32 3 V]8Xx' t N@?Text Box 53I2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  q SimpleBusAT$    V]8XxB t ^8c?Line 25&8&B t@ d8c?Line 26Z8Z( t H4@?Text Box 27o   hdman`  Arial&Monotype Typography  *nb_transport_bw(GP, END_REQ, SC_ZERO_TIME) + +G  + V]8Xx t H,@?Text Box 288    hdman`  Arial&Monotype Typography  zTLM_ACCEPTED (GP, X, T2)  G   V]8Xx, t NPA?Text Box 41 X0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  v& & & & & ..&  V]8XxB t ^8c?Line 20p Rp B t@ d8c?Line 21 R  t HHA?Text Box 23 :    hdman`  Arial&Monotype Typography  {TLM_COMPLETED (GP, X, T4)  G   V]8Xx, t N4 A?Text Box 41* , 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  v& & & & & ..&  V]8Xx* t H4A?Text Box 22   hdman`  Arial&Monotype Typography  ,nb_transport_fw(GP, BEGIN_REQ, SC_ZERO_TIME) - -G  - V]8Xx6 t S ޽h ? ̙3380___PPT10.uk") 0 g(_(x (( zSmM x x  x@0e0e?Rectangle 2P  A >Expected Timing (2 of 2) ~B x VԔ?Line 4: ~B x VԔ?Line 5: B x ^8c?Line 20 B x@ d8c?Line 21+ +) x H0A?Text Box 22 2    hdman`  Arial&Monotype Typography  +nb_transport_fw(GP, END_RESP, SC_ZERO_TIME) , ,G  , V]8Xx x H?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    #Root EntrydO)PicturesT'Current UserSummaryInformation(8PowerPoint Document(#EDocumentSummaryInformation8 systemc-2.3.4/examples/tlm/at_4_phase/CMakeLists.txt0000644000175000017500000000527614342422106022260 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_4_phase/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_4_phase src/at_4_phase.cpp include/at_4_phase_top.h src/at_4_phase_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/at_target_4_phase.h ../common/src/at_target_4_phase.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp) target_include_directories (at_4_phase PRIVATE include ../common/include) target_link_libraries (at_4_phase SystemC::systemc) configure_and_add_test (at_4_phase) systemc-2.3.4/examples/tlm/at_4_phase/include/0000755000175000017500000000000014342422106021131 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/include/at_4_phase_top.h0000644000175000017500000000464514342422106024204 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.h /// @brief This class instantiates components that compose the TLM2 /// example system //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __EXAMPLE_SYSTEM_TOP_H__ #define __EXAMPLE_SYSTEM_TOP_H__ #include "tlm.h" // TLM header #include "at_target_4_phase.h" // at memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: /// Constructor example_system_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusAT<2, 2> m_bus; ///< simple bus at_target_4_phase m_at_target_4_phase_1; ///< instance 1 target at_target_4_phase m_at_target_4_phase_2; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __EXAMPLE_SYSTEM_TOP_H__ */ systemc-2.3.4/examples/tlm/at_4_phase/include/initiator_top.h0000644000175000017500000000746414342422106024201 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_4_phase/src/0000755000175000017500000000000014342422106020275 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/src/at_4_phase_top.cpp0000644000175000017500000001101714342422106023672 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.cpp // /// @brief This class instantiates components that compose the TLM2 /// example system. The same block diagram is instantiated /// for each version, but with different components // //===================================================================== // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_4_phase_top.h" // example system top header //===================================================================== /// @fn example_system_top::example_system_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== example_system_top::example_system_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_at_target_4_phase_1 /// Init intance 1 of AT target ( "m_at_target_4_phase_1" // module name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_4_phase_2 /// Init instance 2 of AT target ( "m_at_target_4_phase_2" // module name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of AT initiator ( "m_initiator_1" // module name , 101 /// 1st Initiator ID is 101 , 0x0000000000000100 // fitst base address , 0x0000000010000100 // second base address , 2 // active transactions ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module name , 102 /// 2nd Initiator ID is 102 , 0x0000000000000200 // fitst base address , 0x0000000010000200 // second base address , 2 // active transactions ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_target_4_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_4_phase_2.m_memory_socket); } systemc-2.3.4/examples/tlm/at_4_phase/src/initiator_top.cpp0000644000175000017500000001140114342422106023662 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_4_phase/src/at_4_phase.cpp0000644000175000017500000000516214342422106023014 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and call /// sc_start() /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "reporting.h" // reporting utilities #include "at_4_phase_top.h" // top module #include "tlm.h" // TLM header //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); // REPORT_DISABLE_INFO_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_4_phase/build-unix/0000755000175000017500000000000014342422106021566 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/build-unix/Makefile0000644000175000017500000000057014342422106023230 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_4_phase VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_4_phase.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_4_phase/results/0000755000175000017500000000000014342422106021207 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_4_phase/results/expected.log0000644000175000017500000101214614342422106023520 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 20 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 50 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 57 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 57 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 67 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 67 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 67 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 87 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 97 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 104 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 104 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 114 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 114 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 114 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 134 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 134 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 144 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 151 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 151 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 161 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 161 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 161 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 181 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 181 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 191 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 198 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 198 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 208 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 208 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 208 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 228 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 228 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 238 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 245 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 245 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 255 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 255 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 255 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 275 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 275 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 285 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 292 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 292 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 302 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 302 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 302 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 322 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 322 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 332 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 339 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 339 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 349 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 349 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 349 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 369 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 369 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 379 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 386 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 386 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 396 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 396 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 396 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 416 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 416 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 426 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 433 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 433 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 443 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 443 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 443 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 463 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 463 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 473 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 480 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 480 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 490 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 490 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 490 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 510 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 510 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 520 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 527 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 527 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 537 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 537 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 537 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 557 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 557 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 567 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 574 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 574 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 584 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 584 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 604 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 614 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 621 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 621 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 631 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 631 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 631 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 651 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 651 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 661 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 668 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 668 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 678 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 678 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 678 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 698 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 698 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 708 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 715 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 715 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 725 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 725 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 725 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 745 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 745 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 755 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 762 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 762 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 772 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 772 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 772 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 812 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 812 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 822 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 829 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 829 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 839 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 839 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 839 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 879 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 879 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 889 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 896 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 896 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 906 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 906 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 906 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 946 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 946 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 956 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 963 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 963 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 973 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 973 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 973 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1013 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1013 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1023 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1030 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1030 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1040 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1040 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1040 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1080 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1090 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1097 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1097 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1107 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1107 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1107 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1147 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1147 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1157 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1164 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1164 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1174 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1174 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1174 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1214 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1224 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1231 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1231 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1241 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1241 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1241 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1281 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1281 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1291 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1298 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1298 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1308 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1308 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1308 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1348 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1348 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1358 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1365 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1365 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1375 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1375 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1375 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1415 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1415 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1425 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1432 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1432 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1442 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1442 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1442 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1482 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1482 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1492 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1499 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1499 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1509 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1509 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1509 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1549 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1549 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1559 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1566 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1566 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1576 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1576 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1576 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1616 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1616 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1626 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1633 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1633 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1643 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1643 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1643 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1683 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1683 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1693 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1700 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1700 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1710 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1710 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1750 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1750 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1767 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1767 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1777 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1777 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1777 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1817 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1817 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1824 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1827 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1834 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1834 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1834 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1844 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1844 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1844 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1864 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1864 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_4_phase.cpp: 1864 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1864 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1864 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1874 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1874 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_4_phase.cpp: 1874 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1874 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1874 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1874 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1881 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1881 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1881 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1891 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1891 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1891 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1911 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1911 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_4_phase.cpp: 1911 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1911 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1911 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1918 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1921 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1921 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_4_phase.cpp: 1921 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1921 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1921 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1921 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1928 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1928 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1928 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1938 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1938 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1938 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1958 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1958 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_4_phase.cpp: 1958 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1958 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1958 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1965 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1968 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1968 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_4_phase.cpp: 1968 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1968 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1968 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1968 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1975 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1975 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1975 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1985 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1985 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1985 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2005 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2005 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_4_phase.cpp: 2005 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2005 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2005 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2012 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2015 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2015 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_4_phase.cpp: 2015 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2015 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2015 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2015 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2022 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2022 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2022 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2032 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2032 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2032 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2052 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2052 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_4_phase.cpp: 2052 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2052 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2052 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2059 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2062 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2062 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_4_phase.cpp: 2062 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2062 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2062 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2062 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2069 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2069 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2069 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2079 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2079 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2079 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2099 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2099 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_4_phase.cpp: 2099 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2099 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2099 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2106 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2109 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2109 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_4_phase.cpp: 2109 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2109 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2109 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2109 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2116 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2116 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2116 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2126 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2126 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2126 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2146 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2146 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_4_phase.cpp: 2146 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2146 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2146 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2153 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2156 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2156 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_4_phase.cpp: 2156 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2156 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2156 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2156 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2163 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2163 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2163 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2173 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2173 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2173 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2193 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2193 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_4_phase.cpp: 2193 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2193 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2193 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2203 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2203 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_4_phase.cpp: 2203 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2203 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2203 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2203 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2210 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2210 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2210 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2220 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2220 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2220 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2240 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_4_phase.cpp: 2240 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2240 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2240 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2247 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2250 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2250 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_4_phase.cpp: 2250 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2250 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2250 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2250 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2257 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2257 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2257 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2267 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2267 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2267 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2287 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2287 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_4_phase.cpp: 2287 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2287 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2287 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2294 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2297 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2297 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_4_phase.cpp: 2297 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2297 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2297 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2297 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2304 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2304 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2304 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2314 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2314 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2314 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2334 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2334 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_4_phase.cpp: 2334 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2334 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2334 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2341 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2344 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2344 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_4_phase.cpp: 2344 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2344 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2344 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2344 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2351 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2351 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2351 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2361 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2361 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2361 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2381 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2381 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_4_phase.cpp: 2381 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2381 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2381 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2388 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2391 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2391 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_4_phase.cpp: 2391 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2391 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2391 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2391 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2398 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2398 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2398 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2408 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2408 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2408 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2428 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2428 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_4_phase.cpp: 2428 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2428 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2428 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2435 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2438 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2438 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_4_phase.cpp: 2438 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2438 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2438 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2438 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2445 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2445 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2445 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2455 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2455 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2455 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2475 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2475 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_4_phase.cpp: 2475 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2475 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2475 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2482 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2485 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2485 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_4_phase.cpp: 2485 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2485 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2485 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2485 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2492 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2492 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2492 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2502 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2502 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2502 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2522 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2522 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_4_phase.cpp: 2522 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2522 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2522 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2529 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2532 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2532 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_4_phase.cpp: 2532 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2532 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2532 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2532 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2539 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2539 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2539 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2549 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2549 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2549 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2569 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2569 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_4_phase.cpp: 2569 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2569 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2569 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2576 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2579 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2579 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_4_phase.cpp: 2579 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2579 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2579 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2579 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2586 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2586 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2596 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2596 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2596 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2636 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2636 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_4_phase.cpp: 2636 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2636 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2636 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2646 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2646 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_4_phase.cpp: 2646 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2646 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2646 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2646 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2653 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2653 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2653 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2663 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2663 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2663 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2703 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2703 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_4_phase.cpp: 2703 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2703 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2703 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2713 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2713 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_4_phase.cpp: 2713 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2713 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2713 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2713 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2720 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2720 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2720 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2730 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2730 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2730 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2770 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2770 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_4_phase.cpp: 2770 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2770 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2770 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2777 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2780 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2780 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_4_phase.cpp: 2780 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2780 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2780 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2780 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2787 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2787 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2797 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2797 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2797 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2837 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2837 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_4_phase.cpp: 2837 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2837 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2837 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2847 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2847 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_4_phase.cpp: 2847 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2847 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2847 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2847 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2854 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2854 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2854 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2864 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2864 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2904 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2904 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_4_phase.cpp: 2904 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2904 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2904 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2911 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2914 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2914 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_4_phase.cpp: 2914 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2914 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2914 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2914 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2921 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2921 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2921 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2931 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2931 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2931 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2971 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2971 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_4_phase.cpp: 2971 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2971 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2971 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2978 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2981 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2981 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_4_phase.cpp: 2981 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2981 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2981 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2981 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2988 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2988 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2988 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2998 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2998 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2998 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3038 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3038 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_4_phase.cpp: 3038 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3038 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3038 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3045 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3048 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3048 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_4_phase.cpp: 3048 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3048 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3048 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3048 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3055 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3055 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3055 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3065 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3065 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3065 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3105 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3105 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_4_phase.cpp: 3105 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3105 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3105 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3112 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3115 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3115 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_4_phase.cpp: 3115 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3115 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3115 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3115 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3122 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3122 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3122 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3132 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3132 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3132 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3172 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3172 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_4_phase.cpp: 3172 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3172 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3172 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3179 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3182 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3182 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_4_phase.cpp: 3182 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3182 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3182 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3182 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3189 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3189 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3189 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3199 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3199 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3199 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3239 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3239 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_4_phase.cpp: 3239 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3239 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3239 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3249 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3249 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_4_phase.cpp: 3249 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3249 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3249 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3249 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3256 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3256 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3256 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3266 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3266 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3266 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3306 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3306 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_4_phase.cpp: 3306 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3306 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3306 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3313 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3316 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3316 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_4_phase.cpp: 3316 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3316 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3316 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3316 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3323 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3323 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3323 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3333 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3333 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3333 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3373 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3373 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_4_phase.cpp: 3373 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3373 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3373 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3383 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3383 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_4_phase.cpp: 3383 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3383 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3383 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3383 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3390 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3390 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3400 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3400 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3440 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_4_phase.cpp: 3440 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3440 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3440 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3447 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3450 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3450 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_4_phase.cpp: 3450 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3450 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3450 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3450 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3457 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3457 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3457 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3467 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3467 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3467 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3507 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3507 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_4_phase.cpp: 3507 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3507 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3507 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3517 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3517 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_4_phase.cpp: 3517 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3517 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3524 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3524 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3524 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3534 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3534 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3534 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3574 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3574 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_4_phase.cpp: 3574 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3574 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3574 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3581 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3584 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3584 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_4_phase.cpp: 3584 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3584 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3584 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3591 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3591 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3591 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 3601 ns - end_request_method Target: 202 starting end-request method Target: 202 transaction moved to send-response PEQ Target: 202 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3601 ns - end_request_method Target: 202 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3601 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3641 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3641 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_4_phase.cpp: 3641 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3641 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3641 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3648 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: at_target_4_phase.cpp: 3651 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3651 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_4_phase.cpp: 3651 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3651 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3651 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3658 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### systemc-2.3.4/examples/tlm/Makefile.am0000644000175000017500000000700014342422106017530 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Alan Fitch, Doulos, 2012-03-10 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: Philipp Hartmann, OFFIS, 2013-05-20 ## Description of Modification: Rewritten for (mostly) non-recursive build. ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.examples # override package string for TLM tests PACKAGE_STRING = "TLM $(TLM_PACKAGE_VERSION)" SUBDIRS = \ common \ . all: @echo "To compile and run the examples type" @echo " make check " ## use a wrapper script to check expected outputs TESTS = $(check_SCRIPTS) check_SCRIPTS = $(examples_TESTS:=.sh) check_PROGRAMS = $(examples_TESTS) ## ************************************************************************ ## additional data for installation tlmexamplesdir = $(examplesdir)/tlm examples_FILES = \ README.txt ## ************************************************************************ TLM_EXAMPLE_SUBDIRS = {build-msvc,build-unix,docs,include,src,results,} ## shared build setup for TLM examples CPPFLAGS_TLMTESTS = -I$(srcdir)/common/include $(AM_CPPFLAGS) LDADD += common/libtlm20examples.la examples_INPUT =results/input.txt examples_GOLDEN=results/expected.log ## filled later examples_BUILD = examples_CLEAN = examples_TESTS = examples_DIRS = ## ## list of TLM examples ## include at_1_phase/test.am include at_2_phase/test.am include at_4_phase/test.am include at_extension_optional/test.am include at_mixed_targets/test.am include at_ooo/test.am include lt/test.am include lt_dmi/test.am include lt_extension_mandatory/test.am include lt_mixed_endian/test.am include lt_temporal_decouple/test.am examples_DIRS += common/include/models examples_DIRS += common/include examples_DIRS += common/src examples_DIRS += common ## ************************************************************************ # install examples? if SEPARATE_INSTALL_TREE nobase_tlmexamples_DATA = \ $(examples_FILES) uninstall-hook: test ! -d "$(tlmexamplesdir)" || ( set -e ; cd "$(tlmexamplesdir)" ; \ for dir in $(examples_DIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir "$(tlmexamplesdir)" ) endif # SEPARATE_INSTALL_TREE EXTRA_DIST += \ $(examples_FILES) \ CMakeLists.txt CLEANFILES += \ $(examples_CLEAN) \ $(check_SCRIPTS) ## Taf! systemc-2.3.4/examples/tlm/at_mixed_targets/0000755000175000017500000000000014342422106021022 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/test.am0000644000175000017500000000626014342422106022324 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_mixed_targets ## %C%: at_mixed_targets examples_TESTS += at_mixed_targets/test at_mixed_targets_test_CPPFLAGS = \ -I$(srcdir)/at_mixed_targets/include \ $(CPPFLAGS_TLMTESTS) at_mixed_targets_test_SOURCES = \ $(at_mixed_targets_H_FILES) \ $(at_mixed_targets_CXX_FILES) examples_BUILD += \ $(at_mixed_targets_BUILD) examples_CLEAN += \ at_mixed_targets/run.log \ at_mixed_targets/expected_trimmed.log \ at_mixed_targets/run_trimmed.log \ at_mixed_targets/diff.log examples_FILES += \ $(at_mixed_targets_H_FILES) \ $(at_mixed_targets_CXX_FILES) \ $(at_mixed_targets_BUILD) \ $(at_mixed_targets_EXTRA) examples_DIRS += \ at_mixed_targets/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_mixed_targets_H_FILES = \ at_mixed_targets/include/at_mixed_targets_top.h \ at_mixed_targets/include/initiator_top.h at_mixed_targets_CXX_FILES = \ at_mixed_targets/src/at_mixed_targets.cpp \ at_mixed_targets/src/at_mixed_targets_top.cpp \ at_mixed_targets/src/initiator_top.cpp at_mixed_targets_BUILD = \ at_mixed_targets/results/expected.log at_mixed_targets_EXTRA = \ at_mixed_targets/CMakeLists.txt \ at_mixed_targets/build-msvc/Makefile \ at_mixed_targets/build-msvc/at_mixed_targets.sln \ at_mixed_targets/build-msvc/at_mixed_targets.vcxproj \ at_mixed_targets/build-unix/Makefile \ at_mixed_targets/docs/at_mixed_targets_example.pdf \ at_mixed_targets/docs/at_mixed_targets_example.ppt #at_mixed_targets_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/tlm/at_mixed_targets/build-msvc/0000755000175000017500000000000014342422106023067 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/build-msvc/at_mixed_targets.vcxproj0000644000175000017500000003140414342422106030031 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_mixed_targets/build-msvc/at_mixed_targets.sln0000644000175000017500000000234414342422106027133 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_mixed_targets", "at_mixed_targets.vcxproj", "{57CAD649-9C8D-4F60-B366-C6573D00EB5C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|Win32.ActiveCfg = Debug|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|Win32.Build.0 = Debug|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|x64.ActiveCfg = Debug|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|x64.Build.0 = Debug|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|Win32.ActiveCfg = Release|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|Win32.Build.0 = Release|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|x64.ActiveCfg = Release|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_mixed_targets/build-msvc/Makefile0000644000175000017500000000067614342422106024540 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT=at_mixed_targets OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_1_phase.obj \ $(OUTDIR)\at_target_2_phase.obj \ $(OUTDIR)\at_target_4_phase.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/at_mixed_targets/docs/0000755000175000017500000000000014342422106021752 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/docs/at_mixed_targets_example.pdf0000644000175000017500000021511514342422106027510 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xSMo13 Qʡt"Q(M[DҴ #^a["U$;Ͻ Pz7Fk~Qzl4+qۀHuε.k~7ժ9}>4 1\Aޱi3vb$SMe #YSM + ʤ`A;g*bfPZCT" G5d߲EI[T΃)B@vERR`؁cAiE]DVpis\_G~;%|dDHAnv~cH`ِrh3*qx`qڻUM(/}{1ۮhI;$@t\Lcf-QԘh|Hwh C3,=p42{ʦIi294Oﭲyir/s5wr+W8C6Ng.[&`C%36r'=K܋(큑P.P$rc$vOZ,I:0/ޜ) EUI0yZ_1> stream xWn7F{ doik)ZNPؖBmif]ئl˜pf^  $\lNKهm(|m:tOI~}:Շ: %իq3 98ctsʐ߽y7sBZ.ٖ5rJH*8/oQ  Q "5,ir_X2j+pÈBr^p5=lGkQ2"p+,M`pgͤ}&{`ARġn4Rzk|v6& [*}by\tlp=+RJ(•R _?e@(i5K2ppgBqJ$ o8#H$SK5\ȢkHCC4ZXPcmVTRC@iA9V aFJoFN[(ǜ.r; ;J9?b0Y9 4d2)dVZ: E\P9FvYGϡv I7P&h2l"eE~O\왍8 X93,bXtYe9 } P=\YQ}pSyIa\8њ[2E%mv|!28K*M<>fxZUdWFaޔs8kfq2?#2.KUu{.|rK_PZA8 7gd0KTVs+P*NQ8sݔhNV= #9< va3_%&raXSk|f˚a:q]wnqESφXqm6t5q_rƁ y3;hϸT&7u s@M"|: C"'?͓րq 5P񺡲I*VVS>^gU%fpGKSإ*EVY>ɡ/IBx g7VӮ~hmxT#Şj_IxvPփ,/謱 4W$Z\WSlSӣ@bMvߗ:To=5oDhA[(6gŏendstream endobj 15 0 obj 1174 endobj 27 0 obj <> stream xXoFW?h[~~n3;EJH}NCE)^ۇ/U(_cwYV:~N2EEqwYZ/[bUfuowb׽Uv ,g@ jSWu;ػe/U4NrjI}k-RX1k!z4ɿ`>~k`8&jm\64'3AK^4/9N]S٭'gchTlv6Cs4YBm$_{C'}} Ԥ(L5- c V]kW(5ڕ5c|(K kɲ-LG-ea\C=Ž;&5# CBf2Q!{Ti{zгS*zyG@e.Y@CrmҌ`b')jA>g&c>ߢ`?@#pɛH5h:~|\!:ST=XLSZn>jcy4bѽޮȐhE% %/U0)&Nx_G@aT[fc_6OaF'rhj{#ĂbeFtLlQ 2;y,NeMdh$sŋ_-ٌ`Ir>+1Ϋ%SR;tSoEaZ:zk(廨O-.1X}QH 8BN zYЋ U*观GBf!ʣyNϏM9c~5[8rrG9l~+"keiS((a&BU:muuW@!I+Eiyl ٮ|C2=yB:H xoG[ ^'ڡNd'2q#ib۳.&151gC*U| xlBfgl gi"{M! lJ@K6$7)V݁L[~lB :y=t {=erNo ,pw:9SO\ޛ65 B]) !'-IHOҙkX.RMB$t B, A=I[X.6Ɍ^W`=`tI | ۍ ku5]*Жě^' ܲq,xP*t6Әr1r/xLy4iLl[Cl1d40)϶<_ <dz}кm š<7n⬃v%g{8PKޓ$zd8)i?lƒb(lb`H`bAm4t6=ud4Wendstream endobj 28 0 obj 1391 endobj 36 0 obj <> stream xUj@}\mh( ũq괖c;1wv)F))ƶ8ٙ3#" Ix0U8'_'dm^h3Ȣ$^럘M p[O۳brX &^ Gǃ0:rبȝ[.UgeUx/Iœ+%פd8>x)&IU_EəFKKK40j-)덦fT0(p(x z )tE',p!%eoL;fmZJ n3⎎ե>-]"|?ZkK SBI+:6, 버~UAdɉ,؎ʍз*_yFJ R H`[*nR`BDBt ih{{F0 D]"cA;]i`ah'(M90Q.>xCD25"d{6/mKZ=UHH ^whX,PWY:@oݞnmN͎6ubY]9Ѹ#$9{$2Hv LL}Оmp;Ĩ endstream endobj 37 0 obj 621 endobj 42 0 obj <> stream xXn7E_+q׀h|CEu8(p,9raEp'/R:Imc8&Cr!75g j~8W7RnwpV٫U:su;.7uqpd~~&";cՀ̎n熃6~߸1Д|^?/_K8|=0?]m%x^mo9Ӡ0uY|J[`8V1Qh{5n\s#)u. 脻, gˮ5LYG`۴J]C6gDL$Wc.{ׄze}skDح9ȣÃe4P̛")1l9784kR'7ϸ.s?#\PNH|ȷ:nC Bu;+71pmyGܱW9\H0mdyFKcLåJډXL4f=R-9Ƕnp{֦K>Vj $~:#4'$tEhT~ձ6FHhE!)O %}BwEPR mqDB .F$<$gìMazqͨT.VOE]z% f< 23N f_GB`Of s=]1jOi1Lᮐ"u$2E|?!.[rn"!$P2 !"r {#s1wBwAItGH8#ö)5ܶ$fс7Ȝ4ݷXk2"_o^:"IG?C`#jZj ͓V=3vl,r{㼶N6} s> ,[/bP>cѲ/xjvywOp%4ۑ.w/)ˁKcDflw zuARD>9Љ3LDŽzAmês&'"!ajb#4d,P"d9ꑨcfG >#]/i2Cg!ⒽOiCnXendstream endobj 43 0 obj 1406 endobj 48 0 obj <> stream xZnF}W4\dž"Mb@PdnY v?H C]TlhvwvvܸԵ+Ed\;樬EyϽr\ص*6ӥw3uf{p]{\JHoRjxld%rډS˵L=(܍B![@Hd; ̦i$B;zG~ ,Wޣ4J#o9IEzӒ%Sob;_0WiGX;/Wj*JXy}%4w 3V W{޽ % $ǩ +1i{P+k,욱ƏDz3VzRz4To51TόE 0MRby[sTP2 A#>r, P+0 \Y]Yj2ű e[ʭLfК14-53˼ HRnyKhA7+f*#Osbg.18yKkQ"SaF55FaY|Eid\{[cg^"l>FHA=1hx_%бTSiMBwwmT!(zuڪ*v6_ᔟ;s7Ĝ:öa̖a!beig.@l0j]:uT+p_x"VO lX.iEe ]k|9ar?ϙ (|}l~"E9#K0<OCVת=U-ZLibьxK~^$M"N'lG\F}oZou!0œr՟ j>BP.N >!Ҽe{6ٴ5@3vt2F s(nhL9[PR,< Kاam]fT(ƓϘE@#`InsBvݮ!ɨ!lJU 7녌RB_?yl-5{W`i9=yXWP-(e@޻Zvz%{u! MO Ԥ\"@w;2eYȟ8Q}HC?#{cxK%/ը>ATmi~~V'{#bnsk;< ;Xhw`way0nޗ0J*x2.[*{}oU_Yh3 6 @<-쪙5Kxtgހmeߜ{f:fM7'swpŻszoݱѭsH^YnnG5tmՙF2iI/F˧ >p)2\ t<fޣ[dIqi/ < 4ěOɔgz8huO@Mhf wNTendstream endobj 49 0 obj 1486 endobj 54 0 obj <> stream x[r6}WT(+8xqK46lv&˱~oAJ.ră,b/g}KB_wERſ?ykOޗ5S~w|fI1\wZƟqfjWBv\`X>MwJ]ˍET)U(2fR*}U,j?D._,ʢP԰ FŜcۚ8Mo*,1N32:^,TKܕ.B=&5 ]/T*qN2diFB3Ҍ{ȓ>|F@֙\y|Mӛ8U^tP2 ,r̵:V*,BlfEJc©0*^_ $q\YmH89'uHݿ116inxLݢ$f22bXyM⻬Z~bͅO;1S`tl0'= _ő_ N<tCS#e*v^AMHAPL2j1AKyżBhZx9h;>afx('JsԠK%1D,d߯ LDG&h!pA̠!{B="ㆸa[MdODd[>m1kB>P/:HʐQ֦HQujQyܳ^$䋴E;@rjB~jov]$*1b޳BPȬrFN(ٜjޱ~gVZyFI03p$`mDs&Q*9Z@ ~_p.UTч0=)2&}ELGPq&y΋B Z {PZض:e.3\JUPJu7 p@,qVvA[vaj= A۠FVWF ]fQ2b#9FLlHP3GH3,}@DGGnKt&W jUKJp<`9ˇy:U]u up7og7o[6[\U-^N3' \r!3NK$2 |K~RJu ׁܿrq,j Y806#!>z1k]Gzѽ])"(Ͽ:] o"9zӾZGwd\0{B 9-`t9:sf wT00/ѣ 9|K.G@-ntK+/TҋfWyP=pF`pl6 x:NbvP0R`_e,xScEbVeX_OtW\xgl> stream xZ_o6קޤbb%(R [:$8q ;J摒hGM:"/w<E^Z2Nt]gR~5:/eƈ<ǶR9q ,gٳxM}\Q|x0̐崑 1ۈg5eJ EwuV&9y>]^RIgИʒsZ"FٯaJUY,xiP!QO Zr+.Q wڴ0UN ])TȒKʵ%yT>Pfe(_1#:f, QZe9%l]em~I#YW T%ӀhV@D n/tlJjM^`V1I DI )b\gAz0ڼ) X%gv*CCb&hE%3D D{Ho  W~@hS[!-wȽhIKk-FxZh p{%eH " j s5*FRHQwV I ( mBEM`, WRT\g| 0i^<- 9qR#-+p ]Vrk|s CDĊ$&iM[%&[Wv.!IBK& -߳S}PBGN#W=ؼ"c2\C|ex$8 qTsk?󺝣*^[/l zuS}W x Bڷ=iQ[5j9ĥ4~[==E-7&o*D(Ct̢޶HLpOR~Gt(-Pi#DWQ /L̊ K?OnsĶJ=rX[3;h W.6vڹ]u1jxB"JS 4D@oS nSn8,mב<':$lI!oi[z}lm.>_6I__d#ˌ~~P1t<TnBRfM@h3S0D0>O0EM<:'FܛN <g[cȗ7k{E*F?hlC]4*'v } ūNoH! }-a #1M>I, )e\Nt \R++$␰a*4aτO){Am !;kz{!;~Pt)z)po@/pkn?I[v*`'.OP.ߐwibjWoos}EI}eG[q>\{7}y̼yoĿBqM{틆"u_Q$|GOIZn=iݩ[ppMGO/OKUW`W1~&ҲT VSۼ5(yZn)%iK1Aӌ+訡JTaiVIjeӾFƂdk,j@\8$QSRY=%W.c%oǺ!]d?0/Khpob맥A j1nEEJև5=ϵ)sR(J @\cHKHA! 5jd,RmKkǶm_U1 Ȋ[qyZ??zendstream endobj 61 0 obj 1839 endobj 66 0 obj <> stream xZn8}WQ j.IQ6N,ڦIt8uQbm{J+ rph1LȀ& <%JpowĪskv9nwAmqXEqѽ]RR;T;OH889hq)C4xS[yKUP\ɂq.< hn:f2(p?,r>EXISc2'g2W:7Ҕ)j8E ,VJef*Mz ;-JBĵDsYi q:X1x3b'} v. _k<<42D(D[*ƙF3ak_j,Y "?hK$SLfU#OLYV)eŌkn4!UxARoΗ(2Y>eRYJEiAuܛP3C0crb}^yxlq+| |8!~uVu]j?#J@ =#DiWq8t=a> stream xY[o\5!8}@T\vN5@J}h(Mڴl *?gɞm4;_fE˙(-Frg$C6(>k~מ7Wi2g}ܜk9.aE|6 b&pl:{hO8o%0,v!hR_]k%v &Ӫ;G;M3J(aj4Vk/dwP'=5S\_Avgq#@ s>nP[C9mQjnj90pQZ& II:/t*FvIJv[sIQ^$8IW=†H{e„^ pD uy 'b]Ƶ#_UBlGQF8D|V0"$Foς 27 YI:(1JIZGz=:02]&] `M0) 6 50gh߇`´v@Af %IIzUI KD@Iak(Lr֛Vk/HT ;;"qN"11P HnY9sNف."ZD96 I^ga1[0p1:g1SL,1N%q"5t(3ZkF/>G?`gEvteBaKn6/F ;=nFt=(v_FǙI<ƠʸtQ!T] ɴ;=M=Oim~Գ<#c:Tgݧ 1TA6sBbEb`%EX PTX!^5@4*w 8g]qtjwcU<eZ,ըd}&+OB頥2DW>kTC/dN;B0T0ݻB㊴!riKRcur;DfiݷTd31C=ejtVo0R` `tD ᙵ=]J.bVs'K @1{5Huz<ڧxk :]į"-F*op69?s@祬:T[B5BLOzR賋ƘG魥/)+(R=],I Ƌ, 9mN9fTĵK}g\HsO$&z/!/9 w] api;Iʓ 4U.Z5Es4XU[K=tkr> =!%5 sfJ;.v-u%#.>c^\ty33Nk<:;pӝ>Ժ-rt ٿg (i5oZZ@X7 8{Ucm0^}g IJZuІRXp1Ca!⣩ Q: x7 ljl|3 a0PiMiz2eW=ox b0|<_ba㝈xO3ɎdeC/h>ʊdeXGGYl `Q> stream x[ۏqG<'hzArNᝯE"Aԑ>4 %ͮd]R~C㮎U/~q8s6G\^sGK=lÿ G{ȝx'O}c:vWd~ rh/5#`3NR_u.u K?=V^s,sRJ0h_뱄,[6qQ\S<[9nN%VBI6]EԚ]9]Ol#9q_ >Dk9ݘTKǿxoO?6T\m*swۉLD/o.;ӉNef~3kf7=Yu SIk-Lj- i-/uo ~KǯK5_A.?Z>|3\sO>yB-DD$Q,D=Ycm ܹ 7۪A̿O n]5Ohܷ>o)G ϻj@&(] l_J(LD/'z=whߝ}agҜ $GlNTl_%})߽m?&ƣ lMO%R%:e9CVSC[i?&6jdN臛+a]0]4ʭ 﫦mf L2[m*rZ^m.n5WU1|2S.?| N*t]5K9Z& We󕪐ͅ?jIk/Gt'`p)"k(q#!ߎN|gPU$|sEs97]/{)zfUܳkY:Vls \ V]`0_Vr9f!qSX+F;]—چhVɽITE]iPz/C Uc+-F6 Hc yȠV;;6/>Q…^w[ćO~A'39z_LA8BDMkKw,)|gN%TEà:T$vQ9S=ϣU ! )"_ ]tތBBeHyt.Z^UHi1bd4ːc\Hcկga?.EtKq8_&MnOWzһWZk\Z"j"D>Ka$UH4j`J (x1 Q}>jɗGη~ M8͏c[8COET\~p`čuЏ(lYMlXvU37t]7y5ڨJ7 j!?W8n -v.e8+ F@ T6E\Sq iG0\3rͮvA;e^a"jft bR";Hn~=j۬q<q~)ˑs xMap^rFd>'RvYGR'gQ'g|/@Tcx)#xl1} xB)}-Ȏ˞xzaP"RB2k *zQpbRfKsPkRO[wOD0)I B q`FCAG,6J劕(A؞-bbD[fzY8[wXjCCJ)zocXHY+Z"S c_LFaL*نubRB Pta&Q9@f78.IGw PhHGaR# c`10yWuvZVɁ9e1)h.¡wqG|ykvкsp8"cl@:ĴєR:b;iLL zw9(Ykv } RBB3)&/RD68Xjq!!?,&ebõzB%9lR`ۘ8d#>%L^sƉ3)Y/"n,6b] 1)18Gx80b Sʁ{N'R9 G݈Ⱥ5g%DZl17Eb처^v)gɃ;NwO >R ^p-vCZpqpljmm,2w|>WEGv^ꉥ6?w|bmk}FuhX',&%ms"լ]už%e6]J.w ^Uj3h',9G+}bRrs3m ʵ!rK&gZcȡ{6E<+ W*¼i'--+ۘRFJ)'ƉV>%R3Ό'R2 P靚RB^<(V1L@ZQpUJ90/ HeXkUxm81xjqq p"m0!ewз  Dfk7W,g?2@hAW\,&ϖ5.=s,pfF!/i^[ {y">ׇsU,C أYvd1)!w pZbPe 2"&U@6wKcY匋`0uaC7̼1o@X,~qΰ 9#)1xq6wdt8 r_ŤRڝ%Ua~w:޺-C_6.0"/&%j==?~jRJX4viӓwh5ׄ\Z>MBڔӫXJ6UfMYr\W>}*w)wncZr V v"فURäζ`YzRI]C YPC>j1{̛[-|tξ.?YwOڋl܆;4{7ǯǗwP}}=ܡ3I,X  0m E #x1g1|4b2n;>>T7DdwA\TvyO|\ 'j,4}\k:1 Mz4*>zÞB4džM-. Nhz/wb.ݷ=`] EⷺLؿN ^^?|wNKFݦv'1A gQVzkF;*U1 h.#v kl0'uEW\: [j0(,݄!5 W*&SDBb4`mК?7٢1_w||zɭ]։--nmog ZsBi_22\4 ןVCjX A|<H] \MpA\kD>HwZendstream endobj 79 0 obj 5066 endobj 84 0 obj <> stream xYk]&4MMЦpH_ ܓ߯%`0ԑ I"Yu%[VIs앎=3;X3#qg NwkL'vuq.bՆ:}:/ݜm?<9xMj|MfOe*[Eɦ<vmg&V~մtrgy4;>2PݖdӌSne< OlRp|5hp? :_ِrnu#m,w8ǭOcH[H,vTϊ5+>"*w]n=毯ZKӊWtV2KG9{B}dMtOa0o7{ ?*d֬5˻3،s5j=u&,V lHSI/+Ut҄cFO+)͒k\rZKAipWYBh oйOh0)4BG؉%.ц))Tn*-Y.VgGY N‡$ .Pa[H:f+ wV*zԿ&.ur TG҄#|3>6 #22`)br:rI4Ӑ Ps3Qsb]B,A=$ C4A{n$[ÖRr/-!ۿ;hsac ֞RA{/m6X2',S!j巃M7kRg'Yj~P|t-RЗ)55yJG&ɊZeGMQ;s„c#c2>tK FeEkBuQFNW-G\veŰ+; h[AMSy`͖䋍E@(9>"Y|jQ64n2-{Z5Jd |IF]lF|НmL<etDR<Ѭ5˻!:GLi%@RʅFsBK$2te_MքQI|(!3cԖ"pWP egj$f&LS6} Amm7g{dIc`/fSKj*{Nxc9;IܐǴޫ3l8~^n-=B GB8H gF.L"T$> RU>ƢjYd_ɺOȯICg@#LZ c1zlQyd3G$Ԍm4#Ě1bı!nz_N@#+IDhRVe ?!cKc0xu<``)P%JY 4|ՁÊ#R`Z $vX^5P2eGJ9'˰YA_ j9Ii蒅$2rr*YUIk$V i }t~ 9Py&hN†b(pB(trNqDj$!89ی eTW&eڇTo8m0RŬ,!$2D2SRbNp.xWcBxcЄrYFeSBrU/5׌CKCߋE`o".Gtz(d$o-)a 5k* _(2Z" }@2SdeCl1yư &?C6`Z2$MI#x2]RV@2~[0iq(24z`΀]]}'endstream endobj 85 0 obj 1928 endobj 90 0 obj <> stream xY[G8 q4 /Dڡ"E±%YfmCv|_UOϜqQ "|;S]]^&ǿ 8ڽ&w(]??=o1៛wMw:3e~Kۏ}~͋].Y3{;<;r>Ů΁4[|~5x)19_tyiÏu*a? GK(asp9֕C!$ǁO2B>Z@!6즃Bg[r.wlT\MWQ%] p lCTJhWz<ܱ}9]~>g] `[k٩@'-I E^4}G-X5'o_e,R:s秿]PqwT\jw,@7<8Br<ۆA_.;7Ku7[μJà}< ۣRBIIp]t3zhjX64t#TfHARK})SI$;o1+@-5q&ԠGAZ_Xف"R&DbӈlLC2fi :N#B#kwGoDpkohͅwrp&sRd1O6xM^_lZmOXГ NJ]) ,kXMV<ؑˈd>QegMM/aT|@ǥ b%j|[×5Fe v#:)>v(S#s"7Si*_7韾&#`lI_G?D (4d ?D&0d֣9N%Ŕ6Pj+@P9YjD#,<ќy|5Ri qyDs3ӊ׌s53;FsBge1t2g×Nucpt fQ!vybΛ4zyΦ.0E BGVi?ySRvn,08J՚Z'RP'ر9c&n>zWpff=:%.T>h4`L Y*%Nxxo ,SQyWJ2%P=E\ۭ\`y$ח C^0Dzu0eu}8sM1zz!$! # q F r*-z`K&JhR>;I᰹L!C"K;Rouj4x^>x "T@Őm88=5Q#SJЊq'IJj|x eD0 tx-\ʣR[jۥUfFWYo)(V yl^[Gr20\ 0,26C)pfA1orA1 JFHs%vC 3i<|uG5 GpLNkp[mN.IS789x@!y,Tbbh k*35Iۊu3R=`J%҉MEx"0,J mtf&z(}Z`mıjJ:bP8ǤVoR6`/| {I=+| -%$qbo4Ґ1f ^1gNz?)&4 qVnf]t̢s`Z$c6-qB'5V`)u[6]F*Krrf)ؤɨ,ʭ%<}(fg}c,5Zp௜dE$Wsrzʄ.7bdڅ% E%*}%S-ȵy%M1_hTBߥ-K(GR ũTjZ83=oKݫM-E͓UB"s7HEmKc1Ix"d䔋ad\#ejϤYI%UBIE1.S6M}^08%gFwR-qt%gR-i||ejѱjyDNjϬ9T ɨZ,XOhL$O[%B18E#fhZLFSzDPiZp?avKEvGh:wiܭ.3q/' *Nz9/GdRWˌ^#]B*n%"f>&[PjPvJ RfdXDe{^bKgV))ThRi.D[ X G2h# n'^qz}lRQ>ZZֳBƦqxt\^;LUyeˬow36ݮi/ C{^yc=']OIoVKotMnԷJR-_885mJ%x|lsՅom.>wM'wvG> stream xZi]G@b)i./_RH8@3qbȌ/!sΩ<'2 b֙{k|&gp~{R]jװ'?{}›2{x[{_u{<ߏϴ6i ugh+5 Fvog'/8]"H5[|~1L.|f?9[ߟync8_~* TcG7ZIW49h#p+ {k=P2mTs<f-ѻtxce"ï Ċܮclp @Keg[otO6f~kfaF-o_oe\43Z"0Qx }K2J7s<~TZy_13E;"-p̋(\VZB FAi:gmJ7M'w߹Ub]s̽>4"gnx<,cmCd z57\攋vSoǚ Kklg}HngN<\"Qf;s[0("a Fw|&4 a-'(N\)x2--w6 Jc\B\z0}Ӥ`‚j;6\z7OVM}R75Я&J6 \ y5Nsh1Sni>vTxjΙv:':Z22(]#4Ņφw0"% J!p2_﹪=N\q$Wtz7 =cB).NutlE>ѳ.2:`4gH>p#<uU;MfOR c͋GdU{캖dp4„mylOOnVx?1T:w}ooc$G]EԖS ;H=t5?Dhz(0ȁYa2xE W" =i-8]8*Uf҃:(Arz En@NDwty*4*oXRM"OBS=<PIvro8qD4i8PaΊi3OI7l 2G2; w#/4rp?X;-_!Mf{P)bl,{Ҵ U}g.ᱯl1cP=8.l}E1<]6jPZW,h%X7dyxڢW-g ^L5(W`XNn440W,Mg52jMkDJoE6BzΞiUѡEuq蹫f/.鑮қ4d8Ha j =ǙB7R2TFhKiKk {Ɍ;1.Cn7DߴC] G'atn}|x'ݟ9ٲ^E}b6i;kBG'N6!'ۜ+tWGn\.8JdK#ަ49rl4}LLY7,UZT+J?Z>.dubUGHa4#a܆2K)sǑv*b0M0ŌCtujQ^vȋ[7Y7M88[W{xAK[>StkDQf f!7\m幟Br^7Qت4;<(P)J)9I-6zYݳu}4ώٌ>=Zhڋ48fȄqL}c7=i0,s'k%Z/ӥчdyZ=eRCsBoW2trL<$9!t.kl?Z8fo2ȂILRΆyVSbT'T,{BKoϱzE'MJ䙪yVRщq9y4㠯fd1Yt2;vqTP L !h(m9.?NWzH6=tfgLJ'"nYb\H6'UG*yBl3JpM~4O f*84k]6d>w6n<;[5 /lWe 1 5):)8:5[>`%K.io,m+%$qv"lt e.=ZqXD*O*yp%NM#@ZCzS>)TV\ZC`Ki.8\ ϢKbt[:6t/ t\ ʑG 1MUJE|`r(zK !mi%zIq.H&Ilw@fCҎD6LҳaH*죤j҈a ä0$a_,-uST$Iðrؠ9Rt+G+I5܌Qʱ*mJWJFtE*Uћa6$U_fP6Y$8_LBYlhG% _yLIy&mߊI(+.~\LBUROWєUn%"b.DLRCRU*,IeW+&m&nR+?,L4)+9&U~/I*=MR͙Tc㾉nڕ2I69LڡC)Eojeή*1X(\fM^+YK9j}>#ZÜAf ^{;wtq؉+5XTjX 9$]7YMɶ]6J˻4*ZM>t>˙޸FEe+ˣVSTӈ PqHk5%IVG43Dެz!Վ#Ρ2k~葈%m&*ni*nVV :Řc[u0Q}.8?ˤQ}2pc v&rH&I5YJYiG5.1C:[gJǯ`E6]סɻ}8م7gC#W'}q};; MWk%FV#Hqn&BKzE7E̚ >WuDaq5X|fM/2R2%eXύOI9k?hYu䗋o |',~9z`qG 7z| :Fendstream endobj 97 0 obj 3871 endobj 102 0 obj <> stream xW[\E~09TlyNNۚ>cWҶk({"ŵ縸WgE/Wz'70Jnc˲f&>)z(1DE6tXm[zU`ȹ0riŒIrJI#!d3ۦ4J{g?4W^!VIOЌpsM=6FwǙD ^ o1ΨqRvx(eGU{ƅ!ͪ]Ut\ѽ^W-O:FeS}S|P>T&q%Xnu O;>@50|pٌAb6\3ʏ,AEFI\_De9LD3) YZt2c4q f6i6JOa62S4X%̜MXX؎KX1 V '^Rfl4!=|ҬF/4cɄ ַkbĭ>M1RUɧ%Q|;+F;߱hN-ufv&($K;9|竣=úaՙ=9|)Ugb{wde^U|kUzeל^}^ 1s֙NgG)"ϴKOWM)~C'<3Gظ\s;ퟲ%|q@XuWendstream endobj 103 0 obj 1575 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 77 0 obj <> /Contents 78 0 R >> endobj 83 0 obj <> /Contents 84 0 R >> endobj 89 0 obj <> /Contents 90 0 R >> endobj 95 0 obj <> /Contents 96 0 R >> endobj 101 0 obj <> /Contents 102 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R 77 0 R 83 0 R 89 0 R 95 0 R 101 0 R ] /Count 15 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 109 0 obj <>stream x]=r0F{N H3mE2$x( EnSZI> endobj 31 0 obj <> endobj 110 0 obj <> endobj 9 0 obj <> endobj 111 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 112 0 obj <> endobj 30 0 obj <> endobj 107 0 obj <>stream x|{|T՝95ww2$3IBI2d2y\@xL^"KܵEjVֶZuFH-"V[tQQUE2}ϹwBPo|~07=ssa k_ _o·ܶſwǡ XnUkk>Pz t"0GH kݲ]}E+{8<7pm~q A'CCϵ}jproܼE_wat=ҿa4nCh ݁BF&FGP ;>Z )z @G3TƆx3|jĤf5p7~xƙ%̯`62UJ-sn=1^AG?-s 3c mF }݃bWaotYz}]~ >="|!jۇ;q˘'[w0'fIacmoXuoC< l9<FS |#w :Co%p>auKG͇0~;ĿE_vTW*piIq`J~^n0'egez=naY3,d4uZQ#`TnMJ{I6OS 2.kB/g}>{~nْ-&2~nYؖD-:ޤvj]l^t7vwCOSc}b_Pߏ[a 0-͵$K$Lʺ|k7& X/=;niȪ@8)4&5I'n/ٳwHB+C`oՀ~5 xl&{? AGn8WCsW`ě̀ksJ΀3n8e4=wN~ 箮.LxOs5R\beM*zבw!l^sk^:ڴy jgOsoA1)w XIkRO [t6{ 'jhN?̂$ZWkޥ^I>O |;8kz!O%ҽgOK߲{O_ ں:z ՛lەZ=ဖqoҕERXzR/euvyOXFƭh#8꫞@O ;o IThwУ<I?/"OO&w-1I1,9kjW)ϓNt)e '! B{/R(wx4`%=\Ԩ+%|YG%_]ۺ0p± ҷVDHɖOK0_&Se;:'5@4x%?d0е?u#$ZԒJr'7p #2B)G+!hhI:8NuWB#TBz 7螠[Jj4MP/a hxS2; |4,CEq-exあ<7:![7݃7A28σ~(ǠpCYe'n|/̊``s+*=PKGPxnyv;Ju@#ȃĠ]V *wAX=)F @&7q>*V^sJs@o$}p8PS+vb;`Pp{.½-V[LlaBP{Lt(0uP.aY~3e>0:57]pŇjk% |8+ jpW J>Ì_ȯN72~.Wq_UMsXlӳ Coh-3@9{0/ ԍ $'`A&l^[̴/Z>Vx cLa/s<|{w)C }O rm<⫇25>7-5Ƴ| Pd(ʈ/R뫨*he(;4၃y3cCgpP6Ԛc=3}/lg7h&L 74 Y۟L83cfS)vg9jXy<ɌVѐb.lدZ Ӂ!ڀ]Nou%E)Bۼ6oIIyMOR6m&7&rc/Ԝ4lI[-1T@ߤGhk~[ BxKA/ZCG"P4-_=.(zy `!5y QЯ,4p7OSyY C <\ST/sB!;%WjdTI#iuUCL:uAA,'q~‰ъpe8A抃Eʨ F` dN?2N~K|J7SyԹf6f Շu|L%@`[q>oͷ3۵ۍ 2Ne^/ԑ"f|Xb4X*QeOpd0x9N5{̙ԿOu;N4NJaC+ȀnCe b1V/ Lޏ}qhdHz5@d4 YђQV"Q1a%`UQ t\UUXX6۴`nW]i̵syn+<9yΐ/cΚ`p. ,sv{8ߙcLG w/}z*?_ 33L~#ϑ 5p(Y =3(/KT !sOJwqd;6R4ץXv{,O[,e|uo>uVA`2|m0F2jђfmSlǚji8_]v۴^ܪ7m2_̲bquu@Ѡ#z&/H@ q:Z|&H;sq.AX ة 8f8k£!Л&Ršp/Aݑ!CQ`%*04L}_]S)|Miims|7ZMM(\TqQî_7zbP7qšЮNojX1xk P=屁(> \Y*Acxcc5,+"Nc!21Xt<, }QBCXKc]|iI:rA0p"`\hCSNɞa/bZƎ=0'QPnȄz:VdG-aY,뮱_4TʅЀvZ`鬅u IEL1dQ䞮H8#E9dDɳ,V ? &Il6AF$\D"# ʥV$1JX\Y$#PXWɝTF3b 9|EBF*oY .,[۷l)׺'1ߒ>%A~bSC50;fm^=VsX͕֏u9ԟ<;w| 6KpJ$NuXZ[mV5kgޞ)H#i5FuEuVP)ŵS+TkF@ Bs56mzZB Z+'ҵ~U"> U'b+J2Q E\c9/x-Gf,\|e,|S](/.ञG{?]\^s=:%RD5Zt^؂(Z`wk.bڙVm結. Yz/vQYzHW 95xCwuBWN(JuflLU*R3UfHTy0yU%!3!Ch(U +8'U5X ;8`'9=v)"]W:K{ן/:xE>g9s ֻ/ʵu?^?=u&cW9OU+W^ݑS<,}ss洶{[귩g!&˻T=+k67g1:ŸMmxm ue]ٮI7̘*@'I22A&"^Fl,/Q"5~tQ'I`[ Yfs~B)Q4wE(o5awI7Fp(ėXIٝwSoΝo*-+_xEB̼$:"rߨMg:Ǟm!sLjê} ekV\.>*8>B!"mNyVPpfm\K56fhzqV xDrFtaڝZfR; R3E? c)H&?z0"I!0x<D#[`m︯^;Zp!ەFYu](.F7>%5?^[cUWi3LDCpUWiH7} vݠ(K6^^ǥQEA, 󽇪eqISUpJB OdU> ,֤LEƏy*=f3SWIJ \-*Wdr ini禪M[3HkwTS4'RQ1kW^FPV4+UI%|x2޺b}qHyG$b2(]S5=٩>|}?VVE+Zfx2][~X Ncpw֎qF+ހTUj2.j:YpNHBv^>ڄxTl iaOHRVdpP'򲤾Ua珫rO&@WbV`h6-\U T.FJSCUJ,+2|0mzmSɾ!ЙY}4RZ"!B` 5 !h]s:y̪`֯-aj$?*^;R]7-:4TR\b$3nrȊ#9'#dPACL8ҡź \.*s?;9 JT.q.fN!3Yd&@Ө7K2 2)IfS rّڬ*B QT T4S!Շw DhJ#m t#z[dʺ9em3g_5=i~oտhӚ %u_ρQ>.P`2isADl6jU,PA DФL h1ю&J,SZLSIAVN(0 BE(ةhNm~)LtӳM Nu?sX(LD d꟢;?EZT +(,esr`q{bUmS]ޱyxeZ^jo5yM.\dnvϻvl >PɄ ߅].x3c:R- ΦU+Jg4LYٔB,%Ke͠am|C nK':N(\o_BM^57r=i\`esgO*XݐȰYmnc .$Q.T/!u,%'KIRrl^%iFXZT[REBljz+-mID'p{k/^8*Z)U]w3ֵbK[pc,gt8C֓)zmC~QqI/ ȅS)pۑ4"(j$ީGfd=&"*ig1)@(FGHOz ܔ46E[xx;>sW)ie2I&5Q{.D*?Ĺ M=atN}yX`P]8>WV00/US;w>DZٛ8{;Hu@> Ux\gi**rX<= $(x*>Sm!,?8%?>3Nj 6Ye T+pe2W_5Cs$H =bAr1\Oib+#O留Q5LI! hN OđXe%ueBUUX$قM{g3v:;^u} ޞW?_lfr?tmj5+8n}u9sO= I& U`LF:b?&9EarJtqy3 T7伥Nqj"VoQQd&Hx "@HC=>j>-:mtIi2avFi[#C NE4 h4N#$˄mI;g;\03;\#̎9((*lx^{h'8dߒ=Rqȑ0 VM@h茈.cI#R8gTh3)2= )ԨL h|#~!5S\c̥]gPo %&퇍>>uZUa+p?-|ǵ*.M,#9^k0E=4(f K"D&ŷ)>|3SB|Hc ۴d#뉘; q5 ð@鑨=uNd&uj6bdYn3;/[ zyT` kH`jh~4N.idO\@cJ@\Jlbq#|0>ALoR䋤3, 9&'dN;^A*:|YX4_M%A%XGB5XR|V#Wv@4Lq4p.S@YCdȔMfOxI\v!QJJ~T&Ψ9sd&ŐESC/fsK4iR2j״[XEtRzOQp3(VQE(?_Tr5)pb %H [U^TլaBfP5{.cL*@He̔Ldp*4MbK*^Kh],}椙7eJ:,&CI֖BcKfH.v^ʠ; Vx7f`vS}U+Wgn+.)g9 g4ZzVw(1{WD*<@i[ e[+e[{֊['l-[ (lm[0GNMgEs\PI)וaF6ٯK@WFoIrGҖyiM:ST&3 ^$Rl稨>Ne^+(%MngxJt6f@<6]jt6=UC$դe^rM9_H}om3wS'T,a%k/ڙ^T/W8&e-z58-YhL_4Ne띚4k )iſ jr_%(jĭrUUfswB&2UfȤӤDS)ߋ^LT#j$4yJ6PIN};9=ȕ>GF^}k-b?^H۱gTB3^YN.Q)˜oc[=-~1g,K6qؐk-˼n >-Ҵ=仲L)1)"UHTD%/g"M#?p3t(La"-_ 9ZpoO7j|L2f\}oΚW0ϙW~u&E3('{Q2eFΠ5#6pM:3U? c#YgAC1<} `FKEKZCC: KDG@}c~mw̬ vm~=.V%vqn;U9,x ,M8N? iML Lr *LȓV䝟LI_Q)^ ʖOIK{\p0g3;.^JVgntmngYgs 6` n  :mI=<o9sU劍f2?fH(-x/U CX8T2$GT9/FLɕS ;'}W?#\cer}[{*1,f_h(Z]㦚9/ZKݎFZ) w- an{KCo7ysi$J8>0_X˒@]stő6]H/zVk$M>Kg/M#Gc|e6&$mfG4jPJQIaL+H~4I$Hf,bl&/+I|c\T$)ΝxI!fi^تS5c. jj| ~#U.MlH\bn'ckuNL~O}<~"vU6QzTF{OBKsonqpCn KN8&(@?[= HsOLP7>Z`?Y7UN^޷yy얮š5l b3@ޤY(?Hb`^@ -/ȋȠ4&%8)Moԧ5^o)t(֠:':gT/e҇E$Ez3tRzs>I%ZST]RI7(0Q#hz/ vS"&sŐ>&_k*:mf3&ޠݢ^?;e @##!Z*Lf7u8!Lw2XqS5J(% +VLR`lR8}_yGO_~zo9 pL!"QMWu:S[7 ZG;Mw瘏H-?Xn-dkx+Ǖqr\9W+Ǖqr\9_u˄Qwmg(U2^TtUâ3m [/plRm^2?:z~r+\¨ pfGE5PZfɅ-Fz4P '*F3P'jGP D(49@ =k6^Cދ!㌿<:?~YN7@Ze_+26k@)Ux()EHstPtpk]OQ3 Z;-[vQ\c, oCKh')E nRuҏcކẠHϣlEʏЄ_?OW!c#Gk<=!7( endstream endobj 21 0 obj <> endobj 108 0 obj <>stream xW}pT? |Ҭ[HaX5ɎuC좖|`"A"0Y n-JPрDEtl:-TNkt:sMRb[3xs;odBnm,V>m-c]l K[7/:]w%&R gjk{[Wy7`vTo7o9uvnh?߇]nSo_+W׆ME?/ۻ6uuk$k0}ϠGaC LlĠ~l#Y hoF3UhkA&V}i˺ s!tHA=^)8ş`.(C2FC%|||_I" r}r\hq9-l Cs2ni?5i%GP;1 73Ѿ8r3;Uo % GH? Cz2\u.?eQ!},BQVOh ƖABСn8Fι,e+`?8)8c9x.d*" %l#;p=z=q2DN ЙN^r;}o_(~60{)Jt^&iTܩ6uC}.J1zXY`&[a7$]KPFJz<.JYMd=DLf y c;(sO/3K.RӒB#Q8}O=Iߥcrtv Jma ;α17tT%JǸTfrP^.#o{'DcZ%WYR+C{%uBjڭVGՏ#F{)ynKx_w*ePHieu:g6ٸSA,bC2Oal ϳj79ɢl%b=cڣFՏp_r:,{]7z#i΁&ݠ>Ļv$S6r=Ka;a!L̆YxeC̹~uEkUrsY2v*(RfqԔZ1TĮPDMU>^\5ONzzJu0Y1}ՖN&vn|BtDunO>ʰ5mvO)0R$PE (h8+:ǧ`" 5>񔚤h66J,1S;x:ЫJO%-q;&E%͆ϼO0y)lj 4C}:|>ZNMx>g7b Aλ.o_iu:gmtƊ%e8Ii ?DMQm'f&LX>ZX=#DSp\F$*=Cu^nSrfNMo82lMڬ[8뉥&|FFSoq&aäEjDK%a\\h¹o\4`}:U(E L9O͒s~RZY_)6FS7d Cen7a/4cnj7E_fQDLS+%>a|tS+d9sM 6aS\c^Wq4 UL$HDtНF" &щӧz]/NpQb5ܚ0sшhQxC-z7X34&(=0 Nl-G?M{@]r5o>LoQ;R쪲[.:!d2YYMϸ`79QK,a7K}Ho^4;N>(<ea]>oA;ȝ3p䑿Wƥ~IzIr`x[ic):.'(Ujᅎc!"ol^K|}>'7Z9~[ VusW+b$I,yzLL ;pC0(7~nhR'd-A;82Cr:&? endstream endobj 113 0 obj <>stream GPL Ghostscript 9.04 () 2012-04-30T18:36:50+02:00 2012-04-30T18:36:50+02:00 PDFCreator Version 1.2.3 TLM 2.0 Approximately Time (AT) System Example - Mixed AT SystemJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 114 0000000000 65535 f 0000033618 00000 n 0000068991 00000 n 0000033459 00000 n 0000030515 00000 n 0000000015 00000 n 0000000747 00000 n 0000033684 00000 n 0000036619 00000 n 0000052665 00000 n 0000036559 00000 n 0000036589 00000 n 0000039614 00000 n 0000030709 00000 n 0000000766 00000 n 0000002012 00000 n 0000039644 00000 n 0000047516 00000 n 0000042554 00000 n 0000045567 00000 n 0000052837 00000 n 0000064184 00000 n 0000052971 00000 n 0000045481 00000 n 0000045524 00000 n 0000049902 00000 n 0000030905 00000 n 0000002033 00000 n 0000003496 00000 n 0000052223 00000 n 0000053114 00000 n 0000052517 00000 n 0000049954 00000 n 0000049997 00000 n 0000050040 00000 n 0000031101 00000 n 0000003517 00000 n 0000004210 00000 n 0000050092 00000 n 0000050135 00000 n 0000050178 00000 n 0000031297 00000 n 0000004230 00000 n 0000005708 00000 n 0000050241 00000 n 0000050284 00000 n 0000050327 00000 n 0000031493 00000 n 0000005729 00000 n 0000007287 00000 n 0000050390 00000 n 0000050433 00000 n 0000050476 00000 n 0000031689 00000 n 0000007308 00000 n 0000009169 00000 n 0000050517 00000 n 0000050560 00000 n 0000050603 00000 n 0000031885 00000 n 0000009190 00000 n 0000011101 00000 n 0000050644 00000 n 0000050687 00000 n 0000050730 00000 n 0000032081 00000 n 0000011122 00000 n 0000012777 00000 n 0000050782 00000 n 0000050825 00000 n 0000050868 00000 n 0000032277 00000 n 0000012798 00000 n 0000014581 00000 n 0000050909 00000 n 0000050952 00000 n 0000050995 00000 n 0000032473 00000 n 0000014602 00000 n 0000019740 00000 n 0000051047 00000 n 0000051090 00000 n 0000051133 00000 n 0000032669 00000 n 0000019761 00000 n 0000021761 00000 n 0000051196 00000 n 0000051239 00000 n 0000051282 00000 n 0000032865 00000 n 0000021782 00000 n 0000024859 00000 n 0000051345 00000 n 0000051388 00000 n 0000051431 00000 n 0000033061 00000 n 0000024880 00000 n 0000028823 00000 n 0000051494 00000 n 0000051537 00000 n 0000051580 00000 n 0000033258 00000 n 0000028844 00000 n 0000030493 00000 n 0000051644 00000 n 0000051688 00000 n 0000051732 00000 n 0000053330 00000 n 0000064382 00000 n 0000051785 00000 n 0000052602 00000 n 0000052751 00000 n 0000053053 00000 n 0000067005 00000 n trailer << /Size 114 /Root 1 0 R /Info 2 0 R /ID [<5CB8E619148E2B246D6A94AEF5D460F4><5CB8E619148E2B246D6A94AEF5D460F4>] >> startxref 69833 %%EOF systemc-2.3.4/examples/tlm/at_mixed_targets/docs/at_mixed_targets_example.ppt0000644000175000017500000113200014342422106027532 0ustar carstencarstenࡱ> WRSTUVn VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`&( */ 0`DArialr NewmanPPGzؖ2 0ؖD-3 00000ewmanPPGzؖ2 0ؖ DWingdingswmanPPGzؖ2 0ؖ0DMonotype SortsPPGzؖ2 0ؖ@DArial NarrowsPPGzؖ2 0ؖPDTimes New RomanPPGzؖ2 0ؖ`DTahomaew RomanPPGzؖ2 0ؖpDCourier NewmanPPGzؖ2 0ؖ@.  @n?" dd@  @@`` "     4C/15 >!?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8%<4dddd 0 g4^d^dz2 0ppp@ <4!d!d 0P`Gz<4BdBd 0P`Gz ʚ;ʚ; )___PPT12 %___PPT10D-3 00000ew̕̕PPЕ2 0ЕDCourier New̕̕PPЕ2 0Е ? O !6, / * 9 : ;#%4870/p<4X@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> O(     A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  Np?Rectangle 4P  T Click to edit Master title style! !.  Hs?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     Sw   N\|?Rectangle 6"qkPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!}M` drs/shapexml.xmlVMo7 x-}Xm!4j .ڊKnI>\ (( ͊C̛yݮRl#+NxM33)g Μ:htկ'fجݤNzl%+ޘZjV>uk+^xTw덻(5Qz~>δAfHII6/ncnkߒLn~E)}4kkv%EojJ+5t*o*a>lw-8bY8A41:":CbCou]F9b"weXh g@ШϜm5 L}`e8f3{覚%tSrͩ jzYgx'avp;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!}M` *drs/shapexml.xmlPK-![drs/downrev.xmlPK`,    hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!o!drs/slideLayouts/slideLayout1.xmlX͎6;:x mp6F gZת)J%)c["]1QHW F= 2M0vGn YhwB_dh2-h331.op%XåXrQz~G81`$BA,{%w^^802-{ōAZp2Bn)r5CՑ)<مwˤ`*y$֩\ .K(຀%aN# EA&MȺĤ6`5o9"`]{=ۺ^,3*ORDd <ٮ,Flu::Q KBicw\g(Xv<΀o'l] >ȗ8 鞸Mc@#.k*v+;t (8q ^u+<cAx^$P<`8H(pPBpNH(pX\NpP<$4G%CB5AxbRnO}?w?}vu><)2TY:Ĝr}G>P 5+I8&9w0ch7Z9b#ZJJ 瑂n8C|Pۍ5T*P/xPxPxPxPxP~x_}}uw4=;D}w׾e'M]Gw#+޺_+Nc(C )ɴ2!3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!o!drs/slideLayouts/slideLayout1.xmlPK1PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> "(    A"??"system_c_title_9Picture 2system_c_title_9  Nnz?Rectangle 4P z T Click to edit Master title style! !.  H?Rectangle 5P0 z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB  s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0planH 0 44454(  4,  4 `hy˼y˼?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!U drs/shapexml.xmlUMo8/Hmg1I.FDEZS_7lAX>#qyMJ9XlS&=ޝ|2%ikT&WN`.ut4EZm *Z xuO)L@F-5F^(ZtsVq;єc|q&QT OZS9-~BKh!1mh9?#(A5@XZmu@s&-{Yzd+W[bn*cJl2Rn 4U |<|ca9({4eҡt1;Z|`!8wǦsc:pBOnS$/Ӕ%PWGbָߒƖ[BJ]vQںg)֎hrrvń5#{\1}{kul$2Nd"o,>vff츓;nNdNJ?7)ha1q$%񬕞p* Xc xqOx)Y񅇢NM%4&S5Pw6zB]& 0'{!&5A-Y h doLMOK)_(!ޅʚpYt9sʉvżɾ3c{i_qYc!OcN(2)ۦ4T,ʜ|[%*K3iog,!cђb,FQp;ldVͳ+2=͝ی/ͱ O7[ad^tλ֜(J ?\wSA즻PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!U *drs/shapexml.xmlPK-!3]drs/downrev.xmlPK.,  z   hdman`  Arial&Monotype Typography  `   ab0|ay>z2  4 `|y˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!G ѕ& drs/shapexml.xmlU]o6|/@wSI\ pkUSJR_YRPb?Ȥg#VڇB> Vυtt)EdK2Bnt_s;6B.blǃAP PZmV9P?Z"5fp<Vv5kGa5. y28RZóDĩe`)=}dnl{T~o )ci"nZ,>8G}}u_Ei|sh*')62pu KW!NYa*8!~`<7*ѥi5 IܧtZ|C/:;>K3sSG텩B<2mB"&QBPX[[\ߺr r~\hW)^< ?y-BWS(&IҌ;gR#Uص<\RY8p+wm/>قZ#$LobB l@J^+3f% gE[L?AU.WP/xL]ӄQ/V:ʻ(Q*R0_ZSS49Q-%&%m*t<Rږ4QdO4%(x؞S`1=GPUS3]VG}얻ЪM'_w8ɧujy7{ Qn[y?sƁpOÞm9%OeԍΤBg VYbNϮInFR,K(u]WgS?ҔI75_imꝫxqgqз޺b؞ۤ#{)[ T=@l[M{/PK!gdrs/downrev.xmlDMK1E!z 4 H ?Rectangle 4    4 `(5y˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!~r'8drs/shapexml.xmlXQO#7~`BBrCGz!Z/~ ^UD7ͬyLZWMΤNMV賄:9sЙPF˄_J~ͻj* OKZnl))zըn Mz_%.`Ig)N{֚qn+pUS2Yˉ.Ur2G$޸FuM.> E ynU!;&He»[BF0b 瞥Xu'KI6=!:Abd( x:NBU!A*vN/8= )f(R|E ,9GԫE c>*DQEj> H+.3ULAn%M}2y.SXM,wT}qN? [5QGf<r# dD9?+B2yO6Cf8:C PgʊL'b2Fk >jK1֒@A&3rS.R8g B NEY(h7Pvzwn?Ѧv^Ʝ0ؘ=N%k#)5E[b g&ddH2+Pf`RYIղ_~W5{D{-f2:kҡIG᳒.t6=-nkM5^糒']w1ˬYfu_uxx^p PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!fᰜ+ drs/shapexml.xmlUn7}/ 8!6ⴀj>s\ܒ\]=C$҃43g |4ق> 9SVJx?,Da+aUߪ^K; -a&m1 ȅjDZeW;߈^eԘpx>hWռyj普 yxV4$0<w'`L\?X*/H_0u=2![ ޭJTFA·j -Pу ?q!ۀYU8.lj!>J-tD&uzu1Al|$y>E(dQ!κ{m̱ɧ=.tgdFI%|UrBl#Acu5꾬uՖrO0 P/@Kҳa W3(&E gNzv͝3%gټX\ӊ8VNvOo{DHUOMr4%&ybhIIkeFԬJL_hH`:+X^n4FMt68+uZЈTwƳ/q'/9iXlZZ^4ڠ_On!|Pk 1a2l\~F%Ȳ~*1~0)3^'QL c~MjlIGJHtD9sCIܶr&c&vԁ[UqZyؽeJ>mRϗeo#Og?<$׉zVTLxAYvnOI ɏy~_XN]-[n,ΖNbdڹwf_h_iIM/}ڛyj _cAlз DK7=WIox9{D2ِໝFkPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!fᰜ+ *drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,     hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 fhy˼y˼?Rectangle 7"tnPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK! Öb drs/shapexml.xmlVMo6 x-?Nm70,z,hUSJRoHNEQ= g{OR0:ΤNMV规yk9s^L(e_㟮c5uMoK7^nl)<]YR{UwjiJwKˊ,h™%N})rxRxqO05Kf3 GLtq49a;Ɠɤp8 \lX&]eQߋh¥n}Yū*L%[.: o-MU8JK 4,%MhKӍWSXRTA aoiɦĢ(gpC5@Z/tsMk3+RanIe>u6Rܙ*$F7xo`:[ +Hd :xuEq֠jzx &PK!1drs/downrev.xmlDN0DHHܨ VʥR[moћ/H>hg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-! Öb *drs/shapexml.xmlPK-!1]drs/downrev.xmlPKcq2 ,    hdman`  Arial&Monotype Typography  x*   ab0|ay>zB 4 s *ηo~ ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>x.lM0Yn+eQhr%E:Gwstt|%*\mz<.N[F5#B+%xQs"B٘$8s.ҌIbtΔK3C>zRv{HCurjLq~6z!$1E̽)-K ^WGjIN:u`KBB $͕6d*F(f)9ç , ů0'ʕl6 VB;ճeX"'1` L˲j) 3Y(`89=ai՚P uݝ[WX~!Kf ]Zkg\Y]u r˜zcÉ?uNb͈֠<>Yݮ>߮Kͨv"XksR !y^X겧 |-U*ΚRvz{`OPv0=`kĢN=Ib"6t"oE^ [YbT]ҬJB rpd(`?Td PhXh6Tv:ͼlU*k f{*nXn_PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10."y 0 @{(  @ @  x(0e0e?Rectangle 2P  z 8$AT System Example - Annotated Timing7 @  xXh0e0e?Rectangle 3 z kThe Goal is to Illustrate: Application of TLM 2.0 in a real system Illustrate interoperability of different AT styles Possible Applications: Architectural exploration Early software development Continued modeling with available modelsL\^\^8@X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"eD 0 CC HgC(  H H  x20e0e?Rectangle 2P  z )Example Block Diagram H L6?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H bhE?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx;  H h|Qo?Rectangle 21 p  ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_1_phase (m_at_target_1_phase_1)p* GGG g G V]8Xx H h$to?Rectangle 22JB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   SimpleBusAT (m_bus)J GGG,  V]8Xx$ H hyo?Rectangle 23  ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_1)^ GG gG  V]8Xx_  H h o?Rectangle 24  rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_2)r GG gGG  V]8Xx;   H hؗo?Rectangle 25  ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_2_phase (m_at_target_2_phase_1)p* GGG g G V]8Xxb  H bp?AutoShape 26@    hdman`  Arial&Monotype Typography  < V]8Xxb  H btơ?AutoShape 27`    hdman`  Arial&Monotype Typography  < V]8Xxb  H bѡ?AutoShape 28     hdman`  Arial&Monotype Typography  < V]8Xxb  H bpݡ?AutoShape 29 @    hdman`  Arial&Monotype Typography  < V]8Xxb H b?AutoShape 28HB   hdman`  Arial&Monotype Typography  < V]8Xx;  H ho?Rectangle 25x 0H^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_4_phase (m_at_target_4_phase_1)p* GGG g G V]8Xx6 H S ޽h ? ̙3380___PPT10. "" 0 QI@P(  P P  x 0e0e?Rectangle 2P   3How to run this example (Linux) P  x0e0e?Rectangle 3P0  PSet SYSTEMC_HOME cd examples/tlm/at_1_phase/build-unix make clean make make run >QA AAA>V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0 tlPT(  T T  x0e0e?Rectangle 2P   2How to run this example (MSVC) T  x-0e0e?Rectangle 3P0  Open a explorer window on examples/tlm/at_1_phase/build-windows Launch at_1_phase.sln Select  Property Manager from the  View menu Under  at_1_phase > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run,DZ%A C A  $$ ((,,00 4488 <<      A $$88V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"X  0   `XZ (  XF X  x 0e0e?Rectangle 2P   z@Expected Output  Target ID: 201!  X D:?TextBox 4     hdman`  Arial&Monotype Typography  < Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic & Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path & Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED "g (/X <I: c V]8Xx6 X S ޽h ? ̙3380___PPT10.ntDw;" 0 p\(  \F \  x䕠0e0e?Rectangle 2P  z z@Expected Output  Target ID: 202!  \ D?TextBox 5   hdman`  Arial&Monotype Typography  fT Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path & Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) & Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 80 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x10000200 Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 80 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s)"++g X 2 >KE8  M 4 V]8Xx6 \ S ޽h ? ̙3380___PPT10.ntDw;" 0 `](  `X `  x 0e0e?Rectangle 2P   RExpected Output  Target ID: 203 (1 of 2)*!  ` Dtr?TextBox 3( 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  |Info: select_initiator.cpp: 1974 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1974 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1974 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1984 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1984 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1984 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) & 8?=gg X m{;5  V]8Xx! ` lGH^?Oval Callout 4B    hdman`  Arial&Monotype Typography  aAddress modified by router! V]8Xx6 ` S ޽h ?` ̙33___PPT10i.ntDw;+D=' {= @B +" 0   d (  dX d  xD0e0e?Rectangle 2P  z RExpected Output  Target ID: 203 (2 of 2)*!  d D?TextBox 3_ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  D & Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2014 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xDFFFFDFF Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2014 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2021 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2021 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s8gg)2 @MG8  M 3 V]8Xx6 d S ޽h ? ̙3380___PPT10.ntDw;" 0  33h( l h h  x0e0e?Rectangle 3P   &Initiator Module yz P  hC ,Group 129"P     hC ,Group 130" & .h Pı?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /hC ,Group 132" > P  0hC ,Group 133" p 2h dd$3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3h  3B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1h T?Line 136      hC ,Group 137"  # (h PP7?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )hC ,Group 139"  > P  *hC ,Group 140"  p ,h dB3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -h  CB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +h T?Line 143    hC ,Group 144"  $h PX?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %hC ,Group 146" B &h T?Line 147P P 'h dd>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p hC ,Group 149"P p  h Pp?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !hC ,Group 151"P pB "h T?Line 152P  #h j%,H}>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ h jLo?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx h JX~?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx h ^$?AutoShape 156p V q  h ^ ?AutoShape 157  h ^ ?AutoShape 158 P  h ^$?AutoShape 159q Vq 6z P   hC ,Group 160" P  h d3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB h  XB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   h ^̈́?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   hC ,Group 164" P  h d|ۄ3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB h  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  h ^P ?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx h d>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx h d">]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx h dL&>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= h d9?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> h dZ?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx h ^ ?AutoShape 173  h ^ ?AutoShape 174P h dlU>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ h Phr?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB h@ Z?Line 177   6 h S ޽h ?ohhhhhhhhhh hhhhhhh ̙3380___PPT10. ""b 0 aaBBp_(  p p  x@0e0e?Rectangle 3P   )TLM Interface Module  x   pC *Group 35" $ =p N?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >pC *Group 37" 8 P  ?pC *Group 38" p Ap b3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bp  (B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @p R?Line 41  x    pC *Group 42" ! 7p N褅?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8pC *Group 44"  8 P  9pC *Group 45"  p ;p b3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p pC *Group 54"P p 1p N݅?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2pC *Group 56"P pB 3p R?Line 57P  4p h%,>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx p fo?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  p F?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  p@ Z$?AutoShape 6 v/"  p `?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   pAC *Group 59"`H  /p bD 3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0p   B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  p b3?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ p bh??Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" p bDP?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM p bTQ?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx p \8c?AutoShape 80*3  p \8c?AutoShape 81   p \8c?AutoShape 82b  x   pC *Group 83"eB -p R?Line 84P P .p bH_>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   pC *Group 86"c=B +p R?Line 87P P ,p bw>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx p@ \8c?AutoShape 90*eD + p \8c?AutoShape 91c  p@ \8c?AutoShape 92*D M p \8c?AutoShape 93 s  p@ \>?AutoShape 94: <  p \>?AutoShape 95g: : : p \>?AutoShape 96&: < P  p \>?AutoShape 97* < @ T B p  0TBC+DEFQRUVW8c?u+ @  28ryU;@+Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE p Pp?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  p Z?Line 101Dc; !p P(?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB "p@ Z?Line 106; #p P?Text Box 107a j 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB $p Z?Line 108(  ; %p PT?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &p P̠?Text Box 110haq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'p Z?Line 111vkB (p Z?Line 112;-u5< )p P?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator_socket*  V]8XxB *p@ Z?Line 114[+6 p S ޽h ? pppp pppp ppp.pp p,ppp,pp p,pp ppp p pp ppp p pp ̙3380___PPT10. ""C 0 =C5C..tB( Y t t  x0e0e?Rectangle 2P   "Target Module 9v P  tC (Group 3"P  ~   tC (Group 4" " )t L?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   *tC (Group 6" 2~ P  +tC (Group 7" p -t `x3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB .t  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB ,t R?Line 10      tC *Group 11"  ! #t N?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    $tC *Group 13"  8 P  %tC *Group 14"  p 't b<3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB (t   *B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB &t R?Line 17    tC *Group 18"  t N03?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx    tC *Group 20" B !t R?Line 21P P "t bB>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p tC *Group 23"P p t NPJ?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p tC *Group 25"P pB t R?Line 26P  t h%,>>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx t h[o?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xx` t Hz?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_1_phase_target) J# 2GGG V]8Xx t@ \$?AutoShape 30P1" t bm?AutoShape 31wX c   hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  tC *Group 32"P t b3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB t  lB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  t b?AutoShape 35 { t 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  t X?Oval 36 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxH  t b?Rectangle 37 u0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ~m_response_PEQ& V]8Xx  t@ b8c?AutoShape 40X   t b8c?AutoShape 41L t b8c?AutoShape 42{  7 t N,?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB t X?Line 44K+9 t N0?Text Box 45 6 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB t X?Line 46 v  t@ bZ8c?AutoShape 40cr w  t@ bZ8c?AutoShape 40uw w 6 t S ޽h ?otttt tt t t ttt tt t tt ̙3380___PPT10. ""F 0 F F00xD(  x x  xP0e0e?Rectangle 2P   "Target Module 9v P  xC (Group 3"P  ~   xC (Group 4" " +x L?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   ,xC (Group 6" 2~ P  -xC (Group 7" p /x `d3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB 0x  lB`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB .x R?Line 10      xC *Group 11"  ! %x Np?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    &xC *Group 13"  8 P  'xC *Group 14"  p )x b&3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB *x  )B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB (x R?Line 17    xC *Group 18"  !x N\3?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   "xC *Group 20" B #x R?Line 21P P $x b5>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p xC *Group 23"P p x NG?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p xC *Group 25"P pB x R?Line 26P   x h%,W>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx x hao?Rectangle 28:    hdman`  Arial&Monotype Typography  < V]8Xx` x HLy?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_2_phase_target) J# 2GGG V]8Xx x@ \$?AutoShape 30P1" x b}?AutoShape 31wX c   hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  xC *Group 32"P x bh3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB x  B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  x b?AutoShape 35 { t 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  x X ?Oval 36p0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxH  x b ?Rectangle 37 u0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ~m_response_PEQ& V]8Xx  x \8c?AutoShape 40X   x b8c?AutoShape 41D x b8c?AutoShape 42{  7 x Nh?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB x X?Line 44K+9 x Nt?Text Box 45 Q 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB x X?Line 46 v  x@ bZ8c?AutoShape 40cr w  x@ bZ8c?AutoShape 40uw w b x hG8c?AutoShape 47t  x N ?Text Box 48%    hdman`  Arial&Monotype Typography  yend_resp_rcvd_event  V]8Xx6 x S ޽h ?xxxx xx x x xxx xx x xx xxx ̙3380___PPT10. ""O 0 CO;O44|M(  | |  x0e0e?Rectangle 2P   "Target Module 9v P  |C (Group 3"P  ~   |C (Group 4" " /| L?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   0|C (Group 6" 2~ P  1|C (Group 7" p 3| `p3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB 4|   B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB 2| R?Line 10      |C *Group 11"  ! )| N?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    *|C *Group 13"  8 P  +|C *Group 14"  p -| b(3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB .|  0B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB ,| R?Line 17    |C *Group 18"  %| N3?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   &|C *Group 20" B '| R?Line 21P P (| bxI>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p  |C *Group 23"P p !| N|U?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p "|C *Group 25"P pB #| R?Line 26P  $| h%,a>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx | h`oo?Rectangle 28    hdman`  Arial&Monotype Typography  B V]8Xx` | H?Text Box 29D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_4_phase_target) J# 2GGG V]8Xx |@ \$?AutoShape 30P1" | bw?AutoShape 31a    hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  |C *Group 32"P | b\3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB |  B`CoDE FQRUVW3fjJ?`8o@D{`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  | b?AutoShape 35 z 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  | X<?Oval 36;4 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxF  | b?Rectangle 37   0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  | response_PEQ&    V]8Xx  | \8c?AutoShape 40a   | b8c?AutoShape 41) | \8c?AutoShape 42 a 7 | Nt?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB | X?Line 44K+9 | N@?Text Box 45 Q 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB | X?Line 46 v  |@ \8c?AutoShape 40 ~ \" | b?AutoShape 35 )p0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_request_method6 GG V]8XxI | b ?Rectangle 37Z J0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_request_PEQ& V]8Xx | `8c?AutoShape 1073{ Z | `8c?AutoShape 1074J  |@ `8c?AutoShape 1075p b | lG38c?AutoShape 1076za = | N?Text Box 43n f 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_resp_rcvd_event*  V]8Xx6 | S ޽h ? |||| || | | ||| | ||||||||| || | || ̙3380___PPT10. ""M 0 ML==]K(     x"0e0e?Rectangle 2P   &Router Component Gx P  C *Group 56"P     &C *Group 57" $ 8 N%?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   9C *Group 59" 8 P  :C *Group 60" p < bx43fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  < V]8XxB =  =B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 62P    hdman`  Arial&Monotype Typography  < V]8XxB ; R?Line 63      'C *Group 64"  ! 2 NG?Text Box 65 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    3C *Group 66"  8 P  4C *Group 67"  p 6 bV3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  < V]8XxB 7  _B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 69P    hdman`  Arial&Monotype Typography  < V]8XxB 5 R?Line 70    (C *Group 71"  . Nj?Text Box 72 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   /C *Group 73" B 0 R?Line 74P P 1 bhx>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p )C *Group 76"P p * N?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p +C *Group 78"P pB , R?Line 79P  - h%,Ќ>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8XxV  fo?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx  FL?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,3>)L 0 P2GGG  V]8Xx  \$?AutoShape 13P   \$?AutoShape 17PPP   \$?AutoShape 4601P   \$?AutoShape 47ppP X  NX?Text Box 50 U nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (3)" G V]8Xx  \Z?AutoShape 51   \Z?AutoShape 52@ [  N?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx~  V?AutoShape 54 ~  V?AutoShape 55 x  0  C *Group 89"@P # b3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB $ XjJ?Line 84 0 0 B % XjJ?Line 850 0 x  0  C *Group 90"P   b3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB ! XjJ?Line 87 0 B " XjJ?Line 88 0 x  0  C *Group 91"P  b83fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB  XjJ?Line 93 0 B  XjJ?Line 94 0 x  0  C *Group 95"P  b3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB  XjJ?Line 97 0 0 B  XjJ?Line 980 0   \$?AutoShape 13 S x  0  C *Group 89"x 8S  b 3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB  XjJ?Line 84 0 0 B  XjJ?Line 850 0   \Z?AutoShape 52E  6  S ޽h ?@        ̙3380___PPT10. ""' 0 <I(  <; < f y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2    <  ~y˼y˼4?Rectangle 39 3   N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0 Da( @  D; D fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   , D  ~8%y˼y˼4?Rectangle 39 3   f- typical things   V]8Xx6 D S ηo~ ? 336 0 0Lg(  L; L fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   2 L  ~y˼y˼4?Rectangle 39 3   l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33# 0 l{( l l; l fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z l  r0e0e4?Rectangle 2   F l  ~hy˼y˼4?Rectangle 39 3   *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 l S ηo~ ? 33r`p.RhBFMJ[mBrm'M !Oh+'0 (4 X d p|AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne85Microsoft Office PowerPoint@m@ @P7l&Ghg  ,T%&" WMFC <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ACDEFGHIKLMNOPQXRoot EntrydO)PicturesT'Current UserJSummaryInformation($PowerPoint Document(DocumentSummaryInformation8Bsystemc-2.3.4/examples/tlm/at_mixed_targets/CMakeLists.txt0000644000175000017500000000613214342422106023564 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_mixed_targets/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_mixed_targets src/at_mixed_targets.cpp include/at_mixed_targets_top.h src/at_mixed_targets_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/at_target_1_phase.h ../common/src/at_target_1_phase.cpp ../common/include/at_target_2_phase.h ../common/src/at_target_2_phase.cpp ../common/include/at_target_4_phase.h ../common/src/at_target_4_phase.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp) target_include_directories (at_mixed_targets PRIVATE include ../common/include) target_link_libraries (at_mixed_targets SystemC::systemc) configure_and_add_test (at_mixed_targets) systemc-2.3.4/examples/tlm/at_mixed_targets/include/0000755000175000017500000000000014342422106022445 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/include/initiator_top.h0000644000175000017500000000750014342422106025504 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_mixed_targets/include/at_mixed_targets_top.h0000644000175000017500000000536314342422106027032 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.h /// @brief This class instantiates components that compose the TLM2 /// example system //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __EXAMPLE_SYSTEM_TOP_H__ #define __EXAMPLE_SYSTEM_TOP_H__ #include "reporting.h" #include "at_target_1_phase.h" // at memory target #include "at_target_2_phase.h" // at memory target #include "at_target_4_phase.h" // at memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: /// Constructor example_system_top ( sc_core::sc_module_name name ); void limit_thread ///< limit_thread ( void ); // Member Variables private: SimpleBusAT<2, 3> m_bus; ///< simple bus sc_core::sc_time m_simulation_limit; ///< simulation time limit at_target_1_phase m_at_target_1_phase_1; ///< 1 phase target at_target_2_phase m_at_target_2_phase_1; ///< 2 phase target at_target_4_phase m_at_target_4_phase_1; ///< 4 phase target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __EXAMPLE_SYSTEM_TOP_H__ */ systemc-2.3.4/examples/tlm/at_mixed_targets/src/0000755000175000017500000000000014342422106021611 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/src/initiator_top.cpp0000644000175000017500000001141114342422106025177 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_mixed_targets/src/at_mixed_targets_top.cpp0000644000175000017500000001325414342422106026527 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.cpp // /// @brief This class instantiates components that compose the TLM2 /// example system. The same block diagram is instantiated /// for each version, but with different components // //===================================================================== // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_mixed_targets_top.h" // example system top header //===================================================================== /// @fn example_system_top::example_system_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== SC_HAS_PROCESS(example_system_top); example_system_top::example_system_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_simulation_limit(10000, sc_core::SC_NS) ///< simulation time limit , m_at_target_1_phase_1 /// Init intance 1 of AT target ( "m_at_target_1_phase_1" // instance name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_2_phase_1 /// Init instance 2 of AT target ( "m_at_target_2_phase_1" // instance name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_4_phase_1 /// Init instance 3 of AT target ( "m_at_target_4_phase_1" // instance name , 203 /// 3nd Target ID is 203 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of AT initiator ( "m_initiator_1" // instance name , 101 /// 1st Initiator ID is 101 , 0x0000000000000100 // fitst base address , 0x0000000010000100 // second base address , 2 // active transactions ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module name , 102 /// 2nd Initiator ID is 102 , 0x0000000010000200 // fitst base address , 0x0000000020000200 // second base address , 2 // active transactions ) { // register the time limiter SC_THREAD(limit_thread); /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_target_1_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_2_phase_1.m_memory_socket); m_bus.initiator_socket[2](m_at_target_4_phase_1.m_memory_socket); } void example_system_top::limit_thread ///< limit_thread ( void ) { sc_core::wait ( sc_core::SC_ZERO_TIME ); // Only after simulation initialized sc_core::wait ( m_simulation_limit ); // Limit simulation time sc_core::sc_stop (); // Ensure end_of_simulation called } systemc-2.3.4/examples/tlm/at_mixed_targets/src/at_mixed_targets.cpp0000644000175000017500000000515214342422106025643 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and call /// sc_start() /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "reporting.h" // reporting utilities #include "at_mixed_targets_top.h" // top module #include "tlm.h" // TLM header using namespace sc_core; //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_mixed_targets/build-unix/0000755000175000017500000000000014342422106023102 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/build-unix/Makefile0000644000175000017500000000065614342422106024551 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_mixed_targets VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_1_phase.o \ at_target_2_phase.o \ at_target_4_phase.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_mixed_targets/results/0000755000175000017500000000000014342422106022523 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_mixed_targets/results/expected.log0000644000175000017500000070640614342422106025044 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_2_phase.cpp: 40 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 50 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 50 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_1_phase.cpp: 50 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 80 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x10000200 Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 80 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 80 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 87 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 87 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 87 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 90 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 90 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 97 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 97 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 97 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 97 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 100 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 100 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 100 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_1_phase.cpp: 100 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 130 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 130 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x10000204 Info: at_target_2_phase.cpp: 130 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 130 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 130 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 137 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 137 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 137 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 137 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 137 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 140 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 140 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 147 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 147 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 147 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 147 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 150 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 150 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 150 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_1_phase.cpp: 150 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 180 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 180 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x10000208 Info: at_target_2_phase.cpp: 180 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 180 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 180 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 187 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 187 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 187 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 187 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 187 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 190 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 190 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 197 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 197 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 197 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 197 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 200 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 200 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_1_phase.cpp: 200 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 230 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 230 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x1000020C Info: at_target_2_phase.cpp: 230 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 230 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 230 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 237 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 237 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 237 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 237 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 237 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 240 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 240 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 247 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 247 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 247 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 247 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 250 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 250 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 250 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_1_phase.cpp: 250 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 280 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 280 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x10000210 Info: at_target_2_phase.cpp: 280 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 280 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 280 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 287 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 287 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 287 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 287 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 287 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 290 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 290 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 297 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 297 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 297 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 297 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 300 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 300 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 300 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_1_phase.cpp: 300 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 330 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 330 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x10000214 Info: at_target_2_phase.cpp: 330 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 330 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 330 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 337 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 337 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 337 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 337 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 337 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 340 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 340 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 347 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 347 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 347 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 347 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 350 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 350 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 350 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_1_phase.cpp: 350 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 380 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 380 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x10000218 Info: at_target_2_phase.cpp: 380 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 380 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 380 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 387 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 387 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 387 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 387 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 387 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 390 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 397 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 397 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 397 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 397 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 400 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_1_phase.cpp: 400 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 430 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 430 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x1000021C Info: at_target_2_phase.cpp: 430 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 430 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 430 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 437 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 437 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 437 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 437 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 437 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 440 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 440 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 447 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 447 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 447 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 447 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 450 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 450 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 450 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_1_phase.cpp: 450 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 480 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 480 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x10000220 Info: at_target_2_phase.cpp: 480 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 480 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 480 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 487 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 487 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 487 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 487 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 487 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 490 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 490 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 497 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 497 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 497 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 497 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 500 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 500 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 500 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_1_phase.cpp: 500 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 530 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 530 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x10000224 Info: at_target_2_phase.cpp: 530 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 530 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 530 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 537 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 537 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 537 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 537 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 537 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 540 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 540 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 547 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 547 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 547 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 547 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 550 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 550 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 550 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_1_phase.cpp: 550 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 580 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 580 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x10000228 Info: at_target_2_phase.cpp: 580 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 580 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 580 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 587 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 587 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 587 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 587 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 587 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 590 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 590 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 597 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 597 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 597 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 597 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 600 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 600 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 600 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_1_phase.cpp: 600 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 630 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 630 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x1000022C Info: at_target_2_phase.cpp: 630 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 630 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 630 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 637 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 637 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 637 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 637 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 637 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 640 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 640 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 647 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 647 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 647 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 647 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 650 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 650 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 650 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_1_phase.cpp: 650 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 680 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 680 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x10000230 Info: at_target_2_phase.cpp: 680 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 680 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 680 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 687 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 687 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 687 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 687 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 687 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 690 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 690 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 697 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 697 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 697 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 697 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 700 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 700 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_1_phase.cpp: 700 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 730 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 730 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x10000234 Info: at_target_2_phase.cpp: 730 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 730 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 730 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 737 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 737 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 737 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 737 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 737 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 740 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 740 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 747 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 747 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 747 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 747 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 750 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 750 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 750 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_1_phase.cpp: 750 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: at_target_2_phase.cpp: 780 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 780 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x10000238 Info: at_target_2_phase.cpp: 780 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 780 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 780 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 787 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 787 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 787 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 787 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 790 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 790 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 797 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 797 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 797 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 797 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 800 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 800 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 800 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 830 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 830 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x1000023C Info: at_target_2_phase.cpp: 830 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 830 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 830 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 837 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 837 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 837 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 837 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 837 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 860 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 860 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 867 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 867 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 867 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 867 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 870 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 870 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 870 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_1_phase.cpp: 870 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 920 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 920 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x10000200 Info: at_target_2_phase.cpp: 920 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 920 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 920 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 927 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 927 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 927 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 927 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 927 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 930 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 930 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 937 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 937 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 937 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 937 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 940 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 940 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 940 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_1_phase.cpp: 940 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 990 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 990 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x10000204 Info: at_target_2_phase.cpp: 990 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 990 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 990 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 997 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 997 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 997 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 997 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 997 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1 us - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1 us - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1007 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1007 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1007 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1007 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1010 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1010 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1020 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1060 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1060 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x10000208 Info: at_target_2_phase.cpp: 1060 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1060 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1060 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1067 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1067 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1067 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1067 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1067 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1067 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: memory.cpp: 1070 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_1_phase.cpp: 1070 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 1070 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 201 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1070 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1077 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1077 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1077 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1077 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1077 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1077 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1077 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_1_phase.cpp: 1077 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1127 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1127 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x1000020C Info: at_target_2_phase.cpp: 1127 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1127 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1127 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1134 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1134 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1134 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1134 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1134 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1137 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1137 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1144 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1144 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1144 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1144 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1147 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1147 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1147 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_1_phase.cpp: 1147 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1197 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1197 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x10000210 Info: at_target_2_phase.cpp: 1197 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1197 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1197 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1204 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1204 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1204 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1204 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1204 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1207 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1207 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1214 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1214 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1217 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1217 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1217 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_1_phase.cpp: 1217 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1267 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1267 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x10000214 Info: at_target_2_phase.cpp: 1267 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1267 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1267 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1274 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1274 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1274 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1274 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1274 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1277 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1277 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1284 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1284 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1284 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1284 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1287 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1287 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1287 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_1_phase.cpp: 1287 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1337 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1337 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x10000218 Info: at_target_2_phase.cpp: 1337 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1337 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1337 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1344 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1344 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1344 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1344 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1344 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1347 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1347 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1354 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1354 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1354 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1354 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1357 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1357 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1357 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_1_phase.cpp: 1357 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1407 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1407 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x1000021C Info: at_target_2_phase.cpp: 1407 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1407 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1407 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1414 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1414 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1414 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1414 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1414 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1417 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1417 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1424 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1424 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1424 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1424 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1427 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1427 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1427 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_1_phase.cpp: 1427 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1477 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1477 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x10000220 Info: at_target_2_phase.cpp: 1477 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1477 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1477 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1484 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1484 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1484 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1484 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1484 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1487 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1487 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1494 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1494 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1494 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1494 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1497 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1497 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1497 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_1_phase.cpp: 1497 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1547 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1547 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x10000224 Info: at_target_2_phase.cpp: 1547 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1547 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1547 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1554 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1554 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1554 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1554 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1554 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1557 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1557 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1564 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1564 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1564 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1564 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1567 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1567 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1567 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_1_phase.cpp: 1567 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1617 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1617 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x10000228 Info: at_target_2_phase.cpp: 1617 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1617 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1617 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1624 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1624 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1624 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1624 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1624 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1627 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1627 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1634 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1634 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1634 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1634 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1637 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1637 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1637 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_1_phase.cpp: 1637 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1687 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1687 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x1000022C Info: at_target_2_phase.cpp: 1687 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1687 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1687 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1694 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1694 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1694 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1694 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1694 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1697 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1697 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1704 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1704 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1704 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1704 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1707 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1707 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1707 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_1_phase.cpp: 1707 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1757 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1757 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x10000230 Info: at_target_2_phase.cpp: 1757 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1757 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1764 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1764 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1764 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1764 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1764 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1767 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1767 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1774 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1774 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1774 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1774 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1777 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1777 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1777 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_1_phase.cpp: 1777 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1827 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x10000234 Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1834 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1837 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1837 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1844 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1844 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1844 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1844 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1847 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1847 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1847 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_1_phase.cpp: 1847 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: at_target_2_phase.cpp: 1897 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1897 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x10000238 Info: at_target_2_phase.cpp: 1897 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1897 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1897 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1904 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1904 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1904 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1904 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1904 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1907 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1907 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1914 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1914 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1914 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1914 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1917 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1917 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1927 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1957 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1957 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 1957 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1957 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1957 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1964 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1964 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1964 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1964 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1964 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1964 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1967 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1967 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x1000023C Info: at_target_2_phase.cpp: 1967 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1967 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1967 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1974 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1974 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1974 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1974 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1974 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1974 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1974 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1984 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1984 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1984 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2004 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2004 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 2004 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2004 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2004 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2011 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2011 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2011 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2011 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2011 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2011 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2014 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xDFFFFDFF Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2014 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2014 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2021 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2021 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2021 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2021 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2021 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2021 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2031 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2031 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2031 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2051 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2051 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 2051 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2051 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2051 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2058 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2058 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2058 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2058 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2058 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2058 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2061 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2061 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xDFFFFDFB Info: at_target_4_phase.cpp: 2061 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2061 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2061 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2068 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2068 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2068 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2068 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2068 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2068 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2078 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2078 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2078 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2098 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2098 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2098 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2098 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2098 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2105 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2105 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2105 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2105 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2105 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2105 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2108 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2108 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xDFFFFDF7 Info: at_target_4_phase.cpp: 2108 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2108 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2108 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2115 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2115 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2115 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2115 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2115 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2115 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2125 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2125 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2125 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2145 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2145 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2145 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2145 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2145 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2152 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2152 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2152 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2152 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2152 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2152 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2155 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2155 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xDFFFFDF3 Info: at_target_4_phase.cpp: 2155 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2155 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2155 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2162 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2162 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2162 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2162 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2162 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2162 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2172 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2172 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2172 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2192 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2192 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 2192 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2192 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2192 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2199 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2199 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2199 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2199 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2199 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2199 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2202 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2202 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xDFFFFDEF Info: at_target_4_phase.cpp: 2202 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2202 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2202 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2209 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2209 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2209 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2209 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2209 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2209 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2219 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2219 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2219 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2239 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2239 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 2239 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2239 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2239 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2246 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2246 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2246 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2246 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2249 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2249 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xDFFFFDEB Info: at_target_4_phase.cpp: 2249 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2249 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2249 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2256 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2256 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2256 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2256 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2256 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2256 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2266 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2266 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2266 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2286 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2286 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 2286 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2286 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2286 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2293 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2293 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2293 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2293 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2293 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2293 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2296 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2296 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xDFFFFDE7 Info: at_target_4_phase.cpp: 2296 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2296 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2296 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2303 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2303 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2303 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2303 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2303 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2303 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2313 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2313 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2313 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2333 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2333 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 2333 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2333 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2333 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2340 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2340 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2340 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2340 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2340 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2340 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2343 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2343 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xDFFFFDE3 Info: at_target_4_phase.cpp: 2343 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2343 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2343 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2350 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2350 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2350 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2350 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2350 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2350 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2360 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2360 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2360 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2380 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2380 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 2380 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2380 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2380 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2387 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2387 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2387 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2387 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2387 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2387 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2390 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2390 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xDFFFFDDF Info: at_target_4_phase.cpp: 2390 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2390 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2390 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2397 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2397 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2397 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2397 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2397 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2397 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2407 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2407 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2407 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2427 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2427 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 2427 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2427 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2427 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2434 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2434 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2434 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2434 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2434 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2434 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2437 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2437 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xDFFFFDDB Info: at_target_4_phase.cpp: 2437 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2437 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2437 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2444 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2444 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2444 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2444 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2444 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2444 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2454 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2454 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2454 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2474 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2474 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 2474 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2474 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2474 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2481 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2481 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2481 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2481 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2481 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2481 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2484 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2484 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xDFFFFDD7 Info: at_target_4_phase.cpp: 2484 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2484 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2484 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2491 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2491 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2491 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2491 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2491 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2491 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2501 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2501 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2501 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2521 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2521 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 2521 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2521 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2521 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2528 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2528 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2528 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2528 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2528 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2528 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2531 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2531 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xDFFFFDD3 Info: at_target_4_phase.cpp: 2531 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2531 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2531 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2538 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2538 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2538 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2538 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2538 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2538 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2548 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2548 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2548 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2568 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2568 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 2568 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2568 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2568 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2575 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2575 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2575 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2575 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2575 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2575 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2578 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2578 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xDFFFFDCF Info: at_target_4_phase.cpp: 2578 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2578 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2578 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2585 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2585 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2585 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2585 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2585 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2585 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2595 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2595 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2595 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2615 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2615 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 2615 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2615 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2615 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2622 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2622 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2622 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2622 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2622 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2622 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2625 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2625 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xDFFFFDCB Info: at_target_4_phase.cpp: 2625 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2625 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2625 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2632 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2632 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2632 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2632 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2632 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2632 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2642 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2642 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2642 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2662 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2662 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 2662 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2662 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2662 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2669 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2669 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2669 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2669 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2669 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2669 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 2672 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2672 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xDFFFFDC7 Info: at_target_4_phase.cpp: 2672 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2672 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2672 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2679 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2679 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2679 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2679 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2679 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2679 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 2689 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2689 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2689 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2719 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2719 ns - print ID: 203 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xDFFFFDC3 Info: at_target_4_phase.cpp: 2719 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2719 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2719 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2726 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2726 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2726 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2726 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2726 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 2729 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2729 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 2729 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2729 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2729 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2729 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2736 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2736 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2736 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2736 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2736 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2736 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2736 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2736 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2746 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2786 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2786 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xDFFFFDFF Info: at_target_4_phase.cpp: 2786 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2786 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2786 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2793 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2793 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2793 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2793 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2793 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 2796 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2796 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 2796 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2796 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2796 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2796 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2803 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2803 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2803 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2803 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2803 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2803 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2803 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2803 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2813 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2853 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2853 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xDFFFFDFB Info: at_target_4_phase.cpp: 2853 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2853 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2853 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2860 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2860 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2860 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2860 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2860 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 2863 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2863 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 2863 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2863 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2863 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2863 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2870 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2870 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2870 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2870 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2870 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2870 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2870 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2870 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2880 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2920 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2920 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xDFFFFDF7 Info: at_target_4_phase.cpp: 2920 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2920 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2920 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2927 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2927 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2927 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2927 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2927 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 2930 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2930 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2930 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2930 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2930 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2930 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2937 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2937 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 2937 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2937 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2937 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2937 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2937 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2937 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2947 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 2987 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 2987 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xDFFFFDF3 Info: at_target_4_phase.cpp: 2987 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 2987 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2987 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2994 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2994 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2994 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2994 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 2994 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 2997 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2997 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2997 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2997 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2997 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2997 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3004 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3004 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3004 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3004 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3004 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3004 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3004 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3004 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3014 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3054 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3054 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xDFFFFDEF Info: at_target_4_phase.cpp: 3054 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3054 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3054 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3061 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3061 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3061 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3061 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3061 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3064 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3064 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 3064 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3064 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3064 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3064 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3071 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3071 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3071 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3071 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3071 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3071 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3071 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3071 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3081 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3121 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3121 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xDFFFFDEB Info: at_target_4_phase.cpp: 3121 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3121 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3121 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3128 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3128 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3128 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3128 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3128 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3131 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3131 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 3131 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3131 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3131 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3131 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3138 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3138 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3138 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3138 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3138 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3138 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3138 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3138 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3148 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3188 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3188 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xDFFFFDE7 Info: at_target_4_phase.cpp: 3188 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3188 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3188 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3195 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3195 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3195 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3195 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3195 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3198 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3198 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 3198 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3198 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3198 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3198 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3205 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3205 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3205 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3205 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3205 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3205 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3205 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3205 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3215 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3255 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3255 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xDFFFFDE3 Info: at_target_4_phase.cpp: 3255 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3255 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3255 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3262 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3262 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3262 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3262 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3262 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3265 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3265 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 3265 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3265 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3265 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3265 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3272 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3272 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3272 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3272 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3272 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3272 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3272 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3272 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3282 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3322 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3322 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xDFFFFDDF Info: at_target_4_phase.cpp: 3322 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3322 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3322 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3329 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3329 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3329 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3329 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3329 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3332 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3332 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 3332 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3332 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3332 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3332 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3339 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3339 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3339 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3339 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3339 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3339 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3339 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3339 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3349 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3389 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3389 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xDFFFFDDB Info: at_target_4_phase.cpp: 3389 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3389 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3389 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3396 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3396 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3396 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3396 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3396 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3399 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3399 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 3399 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3399 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3399 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3399 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3406 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3406 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3406 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3406 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3406 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3406 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3406 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3406 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3416 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3456 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3456 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xDFFFFDD7 Info: at_target_4_phase.cpp: 3456 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3456 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3456 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3463 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3463 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3463 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3463 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3463 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3466 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3466 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 3466 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3466 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3466 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3466 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3473 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3473 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3473 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3473 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3473 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3473 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3473 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3473 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3483 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3523 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3523 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xDFFFFDD3 Info: at_target_4_phase.cpp: 3523 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3523 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3523 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3530 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3530 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3530 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3530 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3530 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3533 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3533 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 3533 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3533 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3533 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3533 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3540 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3540 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3540 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3540 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3540 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3540 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3540 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3540 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3550 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3590 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3590 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xDFFFFDCF Info: at_target_4_phase.cpp: 3590 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3590 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3590 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3597 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3597 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3597 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3597 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3597 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3600 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3600 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 3600 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3600 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3600 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3600 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3607 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3607 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3607 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3607 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3607 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3607 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3607 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3607 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3617 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3657 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3657 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xDFFFFDCB Info: at_target_4_phase.cpp: 3657 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3657 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3657 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3664 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3664 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3664 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x20000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3664 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3664 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3667 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3667 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 3667 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3667 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3667 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3667 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3674 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3674 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3674 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3674 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3674 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3674 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3674 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3674 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3684 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3724 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3724 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xDFFFFDC7 Info: at_target_4_phase.cpp: 3724 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3724 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3724 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3731 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3731 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3731 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x2000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3731 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 3731 ns - nb_transport_fw Target: 203 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 203 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_2_phase.cpp: 3734 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3734 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 3734 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3734 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3734 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3734 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3741 ns - end_request_method Target: 203 starting end-request method Target: 203 transaction moved to send-response PEQ Target: 203 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 3741 ns - end_request_method Target: 203 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 3741 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3741 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3741 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: at_target_2_phase.cpp: 3741 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 3791 ns - begin_response_method Target: 203 starting response method Info: memory.cpp: 3791 ns - print ID: 203 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xDFFFFDC3 Info: at_target_4_phase.cpp: 3791 ns - begin_response_method Target: 203 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 3791 ns - begin_response_method Target: 203 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3791 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3798 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3798 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3798 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### Info: /OSCI/SystemC: Simulation stopped by user. systemc-2.3.4/examples/tlm/at_extension_optional/0000755000175000017500000000000014342422106022104 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/test.am0000644000175000017500000000752214342422106023410 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_extension_optional ## %C%: at_extension_optional examples_TESTS += at_extension_optional/test at_extension_optional_test_CPPFLAGS = \ -I$(srcdir)/at_extension_optional/include \ $(CPPFLAGS_TLMTESTS) at_extension_optional_test_SOURCES = \ $(at_extension_optional_H_FILES) \ $(at_extension_optional_CXX_FILES) examples_BUILD += \ $(at_extension_optional_BUILD) examples_CLEAN += \ at_extension_optional/run.log \ at_extension_optional/expected_trimmed.log \ at_extension_optional/run_trimmed.log \ at_extension_optional/diff.log examples_FILES += \ $(at_extension_optional_H_FILES) \ $(at_extension_optional_CXX_FILES) \ $(at_extension_optional_BUILD) \ $(at_extension_optional_EXTRA) examples_DIRS += \ at_extension_optional/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_extension_optional_test_CPPFLAGS += \ -DUSING_EXTENSION_OPTIONAL at_extension_optional_H_FILES = \ at_extension_optional/include/at_extension_optional_top.h \ at_extension_optional/include/initiator_top.h at_extension_optional_CXX_FILES = \ at_extension_optional/src/at_extension_optional.cpp \ at_extension_optional/src/at_extension_optional_top.cpp \ at_extension_optional/src/initiator_top.cpp at_extension_optional_SHARED_CXX_FILES = \ at_extension_optional/at_target_4_phase.cpp \ at_extension_optional/traffic_generator.cpp at_extension_optional_BUILD = \ at_extension_optional/results/expected.log at_extension_optional_EXTRA = \ at_extension_optional/CMakeLists.txt \ at_extension_optional/build-msvc/Makefile \ at_extension_optional/build-msvc/at_extension_optional.sln \ at_extension_optional/build-msvc/at_extension_optional.vcxproj \ at_extension_optional/build-unix/Makefile \ at_extension_optional/docs/at_extension_optional_example.pdf \ at_extension_optional/docs/at_extension_optional_example.ppt #at_extension_optional_FILTER = $(at_extension_optional_SHARED_CXX_FILES) : $(AM_V_GEN)$(INSTALL_DATA) $(srcdir)/common/src/$(@F) $@ nodist_at_extension_optional_test_SOURCES = \ $(at_extension_optional_SHARED_CXX_FILES) CLEANFILES += \ $(at_extension_optional_SHARED_CXX_FILES) ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/tlm/at_extension_optional/build-msvc/0000755000175000017500000000000014342422106024151 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/build-msvc/at_extension_optional.sln0000644000175000017500000000235614342422106031302 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_extension_optional", "at_extension_optional.vcxproj", "{00BD69D4-8808-4192-8A36-ABEB48A6EBD8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|Win32.ActiveCfg = Debug|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|Win32.Build.0 = Debug|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|x64.ActiveCfg = Debug|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|x64.Build.0 = Debug|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|Win32.ActiveCfg = Release|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|Win32.Build.0 = Release|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|x64.ActiveCfg = Release|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_extension_optional/build-msvc/at_extension_optional.vcxproj0000644000175000017500000003201014342422106032167 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;USING_EXTENSION_OPTIONAL;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;USING_EXTENSION_OPTIONAL;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;USING_EXTENSION_OPTIONAL;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;USING_EXTENSION_OPTIONAL;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_extension_optional/build-msvc/Makefile0000644000175000017500000000102214342422106025604 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = at_extension_optional CXXFLAGS_DEFINES = \ $(CXXFLAGS_DEFINES) \ /DUSING_EXTENSION_OPTIONAL OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_2_phase.obj \ $(OUTDIR)\at_target_4_phase.obj \ $(OUTDIR)\extension_initiator_id.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc/Makefile.rules> systemc-2.3.4/examples/tlm/at_extension_optional/docs/0000755000175000017500000000000014342422106023034 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/docs/at_extension_optional_example.ppt0000644000175000017500000105700014342422106031704 0ustar carstencarstenࡱ> ,'()*+n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`( v/ 0DArialicawmanPPAhؖ2 0ؖD-3 00000wmanPPAhؖ2 0ؖ DWingdingswmanPPAhؖ2 0ؖ0DMonotype SortsPPAhؖ2 0ؖ@DArial NarrowsPPAhؖ2 0ؖPDTimes New RomanPPAhؖ2 0ؖ`DTahomaew RomanPPAhؖ2 0ؖpDCourier NewmanPPAhؖ2 0ؖDHelveticawmanPPAhؖ2 0ؖ@.  @n?" dd@  @@`` p3     5C69?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8%<4dddd 0 g4ddddCh2 0Bppp@ <4!d!d 0P@h<4BdBd 0P@h ʚ;ʚ; )___PPT12 %___PPT10D-3 00000ew̕̕PPЕ2 0ЕDCourier New̕̕PPЕ2 0Е ? O !", / * # % 40/p@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <4X(PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> `( @@]   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  N?Rectangle 4P h T Click to edit Master title style! !.  H?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   N/?Rectangle 6"pjPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!hIy` drs/shapexml.xmlVo6~Ge'17w<ÈSq$*BI9N(c`#>}NZWgR禨}?-z9/t!2O?av&[i򭬅{eV[ G{otR{V`0עGݦY[nmYU|2'#δVH^I6/nci%#&ŠGTILw ̷&g֚ǭ<䪑*ljSŪsnrԲOy[pKSzDt_܊S G}`p 利{c}8^%HdS1l9;)FܢP[:CBP8mR"jTccʯƣqH8fN+tN9'J.6T:`^(UF4S7x~1S5G+@ GC-9S5q5LLaf8+nQ^B85gќ{<~7MNcdWfD0:D9O3! gԐ+=ӆ Y/eQUAL[:ʹl'Dv5 ^ "$l%[ "Κۅ+&cItؘM@d݁PH :@[rT ݉l(룷K}c{it3heRfhy8>4F&@G|GS'7kYǯ[Z4nȞ磹@LJ.NwbD$ŴTE,ƗbKƳ׽$.ëf~L&{ݵSk\;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!hIy` *drs/shapexml.xmlPK-!Zdrs/downrev.xmlPK_,    hdman`  Arial&Monotype Typography  ^*"G  B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!*!drs/slideLayouts/slideLayout1.xmlXn6w t!uu6[ij.zMt4r\3lo+;eKY;^nw$IKSwv~ s;،ͱW6b {!9#j4O10I+db0P>nLrѡT > \8" ڝ_& m"D;HLf"p0Zp##^jhYC̼>"S^*(oVWzC}I0cleq͕߮u!;[%C^@ L5 g~]P;-Q%8$ux>e/< x=^;lPv@;@B t uBB 3w˄G{@BzP1$xVG&P<ʺG,A7 t3>B+WZK~__̴{- ^AћM -vI]&m.&± ' @`Yˇ{Kh~6X̋ #o,P|g2/wcVx$ p%a+n˾4$yNU BURVE/IFADRJJbi5&Y<:Փ `E 2LJҨd?׫'_]&JU#6Sɂ}*mmYϐ\.pUT+=gOZOr,4~6o?>_hg'V(7, QpJ2ݛFPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!*!drs/slideLayouts/slideLayout1.xmlPK?PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!zυ/!drs/slideMasters/slideMaster1.xmlZ͎FG;>f5`  M4RdŻʹim2Рi5yH9EH)y+?Q7^<#"H4Eo^l$9"F] zqgG#gbD,qVBp q<)sX_9~ `9 P~=bUD!e"si,?YqRx m܅\x~mtqњ3'A%BkgH E{`n#SN7D{kAyftD5Ԏ%hJvMS` Tª\$ ůK~^DLN(RV-! RGl#ɔe=VU pK7-ٓ.?;o w.A ŃLהD?? u—ޗR'|e53Lۘ.0^!-Cqח)ח^]~uՇW %Y.c ngH0332RWB>'7F'Ad:'}ԓ%9FOzGHL礏{;Bd:'ݔCEJr ;~%8= C= 8,k9{Rm CwVocNjFev}dLƐj|6.sO.tk|֥,Zoуmn᭡AlKo={WZS ֧3T@c3e g3x:=?V=4R ZU`k,dE2L ]dcCYP:*xҊʨDh\!*4gۦYY!sɽ w;)pU v ^i8vdK>ؗ4òQ%hH^߹S!}_I7l˰2+/}GY1!P<$\hKM" ".>VSvAGPZA7l5UO'(5>nڃ+vLojTSwvel4L ɎF*տ;XQ^[M3M6Wqe73YWfNsb`'+=\{3)<RR]k7Sf*:jg9/ݔ|U,rz85MlgtmHF 94ASP6ŧ]*jlhuRIc[Fkucܧ-ed=@D>uW@qn@g*+jq)PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!zυ/!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> p"( {m `T p p A"??"system_c_title_9Picture 2system_c_title_9 p N?Rectangle 4P h T Click to edit Master title style! !. p H?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB p s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!zυ/!drs/slideMasters/slideMaster1.xmlZ͎FG;>f5`  M4RdŻʹim2Рi5yH9EH)y+?Q7^<#"H4Eo^l$9"F] zqgG#gbD,qVBp q<)sX_9~ `9 P~=bUD!e"si,?YqRx m܅\x~mtqњ3'A%BkgH E{`n#SN7D{kAyftD5Ԏ%hJvMS` Tª\$ ůK~^DLN(RV-! RGl#ɔe=VU pK7-ٓ.?;o w.A ŃLהD?? u—ޗR'|e53Lۘ.0^!-Cqח)ח^]~uՇW %Y.c ngH0332RWB>'7F'Ad:'}ԓ%9FOzGHL礏{;Bd:'ݔCEJr ;~%8= C= 8,k9{Rm CwVocNjFev}dLƐj|6.sO.tk|֥,Zoуmn᭡AlKo={WZS ֧3T@c3e g3x:=?V=4R ZU`k,dE2L ]dcCYP:*xҊʨDh\!*4gۦYY!sɽ w;)pU v ^i8vdK>ؗ4òQ%hH^߹S!}_I7l˰2+/}GY1!P<$\hKM" ".>VSvAGPZA7l5UO'(5>nڃ+vLojTSwvel4L ɎF*տ;XQ^[M3M6Wqe73YWfNsb`'+=\{3)<RR]k7Sf*:jg9/ݔ|U,rz85MlgtmHF 94ASP6ŧ]*jlhuRIc[Fkucܧ-ed=@D>uW@qn@g*+jq)PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!zυ/!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0planH 0 3343( , 4  4 Ht@?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!U drs/shapexml.xmlUMo8/Hmg1I.FDEZS_7lAX>#qyMJ9XlS&=ޝ|2%ikT&WN`.ut4EZm *Z xuO)L@F-5F^(ZtsVq;єc|q&QT OZS9-~BKh!1mh9?#(A5@XZmu@s&-{Yzd+W[bn*cJl2Rn 4U |<|ca9({4eҡt1;Z|`!8wǦsc:pBOnS$/Ӕ%PWGbָߒƖ[BJ]vQںg)֎hrrvń5#{\1}{kul$2Nd"o,>vff츓;nNdNJ?7)ha1q$%񬕞p* Xc xqOx)Y񅇢NM%4&S5Pw6zB]& 0'{!&5A-Y h doLMOK)_(!ޅʚpYt9sʉvżɾ3c{i_qYc!OcN(2)ۦ4T,ʜ|[%*K3iog,!cђb,FQp;ldVͳ+2=͝ی/ͱ O7[ad^tλ֜(J ?\wSA즻PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!U *drs/shapexml.xmlPK-!3]drs/downrev.xmlPKP ,  h   hdman`  Arial&Monotype Typography  V    V]8Xx  4 H+V?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!G ѕ& drs/shapexml.xmlU]o6|/@wSI\ pkUSJR_YRPb?Ȥg#VڇB> Vυtt)EdK2Bnt_s;6B.blǃAP PZmV9P?Z"5fp<Vv5kGa5. y28RZóDĩe`)=}dnl{T~o )ci"nZ,>8G}}u_Ei|sh*')62pu KW!NYa*8!~`<7*ѥi5 IܧtZ|C/:;>K3sSG텩B<2mB"&QBPX[[\ߺr r~\hW)^< ?y-BWS(&IҌ;gR#Uص<\RY8p+wm/>قZ#$LobB l@J^+3f% gE[L?AU.WP/xL]ӄQ/V:ʻ(Q*R0_ZSS49Q-%&%m*t<Rږ4QdO4%(x؞S`1=GPUS3]VG}얻ЪM'_w8ɧujy7{ Qn[y?sƁpOÞm9%OeԍΤBg VYbNϮInFR,K(u]WgS?ҔI75_imꝫxqgqз޺b؞ۤ#{)[ T=@l[M{/PK!gdrs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!\{3drs/shapexml.xmlXQO#7~`BBrCGz!zҽo~coZT]N<$f6gofoKfҺ脷_mr&ujB%F3΄2Z&R:vTW1lnP%|}5h\:pL%5rcKqkZNj/<*U*E.LٸYңȲ"KgZ8XLIF-pchs"/p ;H8Lqܳ\Ls[/Ք ^NLv [-#9"i 0Clrd/jos[1ypvDb/29,zߦ?YJv) VwҬ#C gT̆ǣGqJ ARUͰuzY\H1SEpOD G/ e`t=<^-BHQ}tU!*R逞DM 0QUKxvQ2>t{;++. :Մ{΢xqGgJW)).dUS85{dSQ*7@Fcޱ"$!Raq BghA ]YqDLh-wGm)zߞhLLejjh{Z|&U(l&(KAc__n-*񠱗/u]z>Pd{a4|~!@xdN1`{^Ei~-":Ro|l:GФ9:6 qv.-Ű%%4Ti©Jn vUМ k#kLN2y?3ȨhJ`qZrC(P7HdC`E l!PHU( ^: "Ѯnbw7^|OhwXT6fS|pȴpzJ债-4oLea^3Z bH]@LHg!b-&ۚt/n\>A8cеvL5֤{ϨO']5ˬYfu:k+PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!fᰜ+ drs/shapexml.xmlUn7}/ 8!6ⴀj>s\ܒ\]=C$҃43g |4ق> 9SVJx?,Da+aUߪ^K; -a&m1 ȅjDZeW;߈^eԘpx>hWռyj普 yxV4$0<w'`L\?X*/H_0u=2![ ޭJTFA·j -Pу ?q!ۀYU8.lj!>J-tD&uzu1Al|$y>E(dQ!κ{m̱ɧ=.tgdFI%|UrBl#Acu5꾬uՖrO0 P/@Kҳa W3(&E gNzv͝3%gټX\ӊ8VNvOo{DHUOMr4%&ybhIIkeFԬJL_hH`:+X^n4FMt68+uZЈTwƳ/q'/9iXlZZ^4ڠ_On!|Pk 1a2l\~F%Ȳ~*1~0)3^'QL c~MjlIGJHtD9sCIܶr&c&vԁ[UqZyؽeJ>mRϗeo#Og?<$׉zVTLxAYvnOI ɏy~_XN]-[n,ΖNbdڹwf_h_iIM/}ڛyj _cAlз DK7=WIox9{D2ِໝFkPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!fᰜ+ *drs/shapexml.xmlPK-!ndrs/downrev.xmlPK_P,     hdman`  Arial&Monotype Typography  V    V]8Xx  4 N?Rectangle 7"uoPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK! gb drs/shapexml.xmlVMo6 x-;* ;m ΢ǂX E$8)4X`pͼGI*3K8:7E37y 5 k7k2.Zw{X~c j$eWwfeow+˪"xʙ5N,sp$~Hci"K.(i0m>ZTLsirnyJQ8C~T52\-O tmk?Za3>ꞎ K/@z@l_܊()K/&ezS'63,`:N' c8=! y6Ҝ@hT/GqTJ AQsðnjOGQH8f"ZTUՄ>Tt\TQDܴ5aC_Cy:! hg7ML}Ҡ411>,pf_l^趾6*KQ3,+>S7/0vw_m[ފF~m~oQίLHBJBC0Ap)zaBe$Us@+(d$ )ъ8<,H4嵲l'Gy㥠:M)rHVBqT>ވR nr: HTL>(AOU.C+a| . B| sE#mU#鑢/ Y=`ew^v7-:yߴy2[\>lY !NYp9q'A/b>Lz$%p //p*`BXt塭^ņ`F3.u:^Ua*&v)|Hn~[=`شYi= #1iU,Kj!쭬1%ٔXãnȃHۥpnb}"pEW=)F;S$_F vR+aAN(Njộ^D»PK!1drs/downrev.xmlDN0DHHܨ VʥR[moћ/H>hg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-! gb *drs/shapexml.xmlPK-!1^drs/downrev.xmlPKd_ ,    hdman`  Arial&Monotype Typography  n*    V]8XxB 4 s *޽h ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!|z!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>d.lMsgQz1B+)cJ`ɭF$:hkffBSygTS^8*uW$KhJr$ ˹\C[fv,Jv{**4nj7Y&kBq7"Ka.۪)9Eh1 )%LRK f31,Y*IŒwsm,JH-&;n|ӅW[1+,PDr FH@xK!Vf*k#ȥ XX2%{Y30 zx& M8|w-Y_yPub\M;J`Ơ $N2=KI?,?_+b&0TFؓ*`;{b}CL~X܉='I 1U;bN XTN!7p. ~43D ~s7 ly!T k {=l BW*AN^}+A5a{+U7JEb|ۗ'PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!|z!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U> >V] 8@X`x6 8 S ޽h ? ̙3380___PPT10."  0 me@(  @ @  xh0e0e?Rectangle 2P  h H"AT with Optional Extension Example # @  x0e0e?Rectangle 3  KThe Goal is to Illustrate: Application of TLM 2.0 in a real system Use of an optional extension Option of the non-blocking style This style has been previously referred to as "4 phase" Most complex version of non-blocking/AT style Possible Applications: Architectural Verification Software Verification Early Performance ValidationbffNff  N L X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"g 0 ff Huf(  H# H  xDh0e0e?Rectangle 2P  h WExample Block Diagram&  H LLh?Text Box 9     hdman`  Arial&Monotype Typography  lTLM 2 GP"   G  V]8Xxb H bh?AutoShape 20    hdman`  Arial&Monotype Typography  N  V]8Xx%  H hZo?Rectangle 21@ m` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  %Target Module (m_at_target_4_phase_1)^& GGg G  V]8Xx H h2o?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router (SimpleBusAT)J G GG  V]8Xx  H hhvo?Rectangle 23f` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  !Initiator Module (m_initiator_1)L" GgG V]8XxH  H ho?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (m_initiator_2)r! GG gGG V]8Xx   H h`o?Rectangle 25 ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  %Target Module (m_at_target_2_phase_2)J& GGg  V]8Xxb  H b?AutoShape 26P   hdman`  Arial&Monotype Typography  N  V]8Xxb  H b<Ə?AutoShape 27PH   hdman`  Arial&Monotype Typography  N  V]8Xxb  H bՏ?AutoShape 28P   hdman`  Arial&Monotype Typography  N  V]8Xxb  H b?AutoShape 29Ph    hdman`  Arial&Monotype Typography  N  V]8Xxx t>C,? bK HC *Group 16" p8z  H ho?Rectangle 23"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!vךb7 drs/shapexml.xmlVMo1#,_QI$DݢQ85A6K棿7&rlYϬq.m*VҚ^w9SFڼ4:99arQ*]|qQ|:QBU¿2U"wj2A$t=T4[մ8jXˀ3#*Sb}i(V.} E<J~$9^({@lj^Z<`6XhSꩨh[l~?wq<یݳD&0^;E&1)Pd|Q1(+D!VM`!*K׎RBLg1n*PQ,u1l "=HBSuOχoo&Ha O*rLU t{$&Dj % Rc͵ͷ!ԡk'ϙ0ra]ep\Ā5v-ΖѝC ST4tA}D.CgmA6.#ciZZq sqD36-S Y֪fba+"y?]2'J$G {#YSsC,? bK^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  zInitiator ID Extension" G  V]8Xx H h@5o?Rectangle 23t>CP. bK^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Generic Payload6 GG  V]8Xx  H 5G-HZy>Rounded Rectangular Callout 17";5PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!^ drs/shapexml.xmlUMo6 x-XelFEXlm(R )ίGR9-p͛Ǐd;alUʓ΄t^Mʿ{3ά#J ,t/빭6+;Su6ۊ] B^ͦ_arpP%`گTnY/°2G.8YQ3tr'!M#ɰ$nKxC[!~7"[siK}a"rC@]4E)ƨ R>fSHbXd:{ `2NG?]kcݟB_R*zZB{Ο[)pVTXHpt]l8Uv}F]d:>XXJ}V2/7X(>KPe (- ߯&W(8ool|jR]{M(0+$Ar6`2gB'(.Ǽbn6:#ON`VPʙ;Y>JI<GGQt)N^V5cz\42u;[y("%ξ1@ ť zYY@"rH `ȏ%SA `rQh|5q$㢿ug^†B+w& ʀ:/o!Ep@G-ΝMv܃(8?zŸΟۍTF ?PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!^ *drs/shapexml.xmlPK-!(drs/downrev.xmlPK* ` 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  |This extension carries a string containing the initiators  ID ,?>G V]8Xx  H $5G8H>Rounded Rectangular Callout 18"C=PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!r]g drs/shapexml.xmlUMo6 x-؉uIڴ40b/z ekCI9N~>\-Ѓ8μyb/ާd6/r".LN5˯W?Z`z"W!Ng+UdkeVXWQ[vj2t;F^!YꩋV:Qe$ g>**C&Fm]N/` a\ExHM8ƛUm"rG/@]4E!69\\u".LAc "z0_{ɣ2weOJ@b"x-h\:}'.fʿ(* (֤E?:O|Fap8Pg{,m1ouߕZ`[@ EA9isjNe"Gm'J)jpܛ,8N]^)0yE$%JN0WL.k iU*B+- Tx5m"@(@-T"A$!&9iL#P_v<&VTP$}) &թ 1[ =,SHH G6LJi 0L*洘s${syCaMfz.ȃ2ni+1pژH2h:f!q:6m7xjgkavu`vvؽ<hֲ 4ӝ]qz*+LT "]F=_$lW>ؒYxk "&^|Sk\҅Sgmv^ _}n"2DfH.>&*f{حt`M)(CsZيː*5<F[Il2gdB[s/J<==vq#Xe)9BMR\.8jQQIO]I?j ܙz~ ~PK!0drs/downrev.xmlDAK1F!&+"6-*T x7M$iv 8}zbj!kꝖ:w$D֫%OnOI5J0)55d1.HAsp*r;k!nޕ#=jJ/7_jslE>Ƹjt%,ќvbUr{=}^1& J\I-PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!r]g *drs/shapexml.xmlPK-!01drs/downrev.xmlPK2080(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  jThis target does not support the  optional extension ,65G V]8XxT H c :H 5TextBox 19 X Y    hdman`  Arial&Monotype Typography  tExtension enabled in initiators and m_at_target_4_phase_1 via compiler directives, not used by m_at_target_2_phase_2"uug V]8Xx6 H S ޽h ?/ HH ̙3380___PPT10. ""8 0 @P:(  P P  x0e0e?Rectangle 2P  h EHow to run this example (Linux)  P  x,250e0e?Rectangle 3P0 5 [Set SYSTEMC_HOME cd examples/tlm/at_extension_optional/build-unix make clean make make run T\C CKCA.-V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0  PT(  T T  xJ50e0e?Rectangle 2P  5 2How to run this example (MSVC) T  xN50e0e?Rectangle 3P0 5 Open a explorer window on examples/tlm/at_extension_optional/build-windows Launch at_extension_optional.sln Select  Property Manager from the  View menu Under  at_extension_optional > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and runNeZ1C  C    $$(((,, 0044 88 <<    C  44b#7oV] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"=< 0 ;;`X;(  XR X  xe50e0e?Rectangle 2P  5 Expected Output (expected.log)* A e  X ~Ѝ5GĺH;<Rounded Rectangular Callout 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!c=XZdrs/shapexml.xmlWn6?^[v$:$ml`YX%ֆrS@K&_#vPi{h9U8(S. S,9ͤ9(Nf(Ǡ]W-}9ri96ٸԤ4'v=];SRIf^FM9#9EV6o )ETø,8pj5gLPJ) ]ZH8;{ZKUgy! !~KEIVOeή|ٕW+AhCTT٭x:en\b"vi ZPN;QKӔk`tȡ?'u57AT Z׶WbVȹYLggٵNf!~|/ô~|HK?%H+|`&'RH%G)A791kVi},[;WsZ\7-gfJv'm~έ1 a~ {6 Hl~pఅJf6?]%O-ĦNny >WBxuzeoPK!drs/downrev.xmlDJ1EfӦE.Nufp2$q./r.gM#9Vp;)@t(x{Y`)vsyҸW4c#2C RPd1L@c)m/b.-vZ补km|hx\̗QV,*u}W "?8//(8L!WݲiPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!c=XZ*drs/shapexml.xmlPK-!drs/downrev.xmlPK @(D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  1Initiator ID: 101 Printed from At_target_4_phase>2G#G V]8Xx X c 85TextBox 5\T   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   J Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 0 s - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101 & Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) & Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1824 ns - nb_transport_fw & g gg  g hg gg gf g  $g$(g( ,g,0g0 4g478g8 }-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!Х*  drs/shapexml.xmlVn6?^[v8*$m40,z,FekCI9v)Z`%/t8e;Xz/-32GÙͲl!-yǙP 5Έ3@e 1_ ߜ|jl+/+;b>ww6+] k6%8|4neʁÍJzn 'XJ-(ZL +q-u2kb#Za n/@tZ\dO:zP;xd{CHn4Y<PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!Х*  *drs/shapexml.xmlPK-!xdrs/downrev.xmlPKxP @XD<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  1Initiator ID not printed from at_target_2_phase_2>2 G'G V]8Xx6 X S ޽h ?/ XX ̙3380___PPT10.ntDw;" 0  p44\(  \ \  xd 0e0e?Rectangle 3P  h &Initiator Module yz P  \C ,Group 129"P     \C ,Group 130" & /\ P?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   0\C ,Group 132" > P  1\C ,Group 133" p 3\ d 3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 4\  ,B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 2\ T?Line 136      \C ,Group 137"  # )\ P6?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    *\C ,Group 139"  > P  +\C ,Group 140"  p -\ dC3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB .\  8B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB ,\ T?Line 143    \C ,Group 144"  %\ PY?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   &\C ,Group 146" B '\ T?Line 147P P (\ d(f>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p  \C ,Group 149"P p !\ P,r?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p "\C ,Group 151"P pB #\ T?Line 152P  $\ j%,~>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ \ j,o?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx \ JD?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx \ ^$?AutoShape 156p V q  \ ^ ?AutoShape 157  \ ^ ?AutoShape 158 P  \ ^$?AutoShape 159q Vq 6z P   \C ,Group 160" P  \ d3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB \  <B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   \ ^?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   \C ,Group 164" P  \ dh3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB \  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  \ ^ ?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx \ d>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d#>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= \ dd;?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> \ dU?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx \ ^ ?AutoShape 173  \ ^ ?AutoShape 174P \ dj>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ \ P|?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB \@ Z?Line 177     \ `GHeT>Rounded Rectangular Callout 51"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!Wdrs/shapexml.xmlVn7?4BNfẂj#M H,{|O)Ѝ_^ ( k13C{x|(+ e#2if:o/NZR8O&#]5WZePμKg$X^ْKL6"K#;=2G Eni)-C㯽PK!N Fdrs/downrev.xmlDMK1E!<ʹPƦEU7~eLb;7˽M:kđ|h+2ĥ W 6DcRp N*V"A8- eMCϵĩ;o1+=9Ȳ\Zl8=Ҵ f:P!yݽ EP{~k<@;%H^AKIPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!W*drs/shapexml.xmlPK-!N Fwdrs/downrev.xmlPK|h0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yextension data populated here,G V]8Xx6 \ S ޽h ?\\\\\\\\\\ \\\\\\\\ ̙3380___PPT10. ""b 0 aaBBd_( ? d d  x0e0e?Rectangle 3P   )TLM Interface Module  x   dC *Group 35" $ =d Nw?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >dC *Group 37" 8 P  ?dC *Group 38" p Ad b3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bd  XB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @d R?Line 41  x    dC *Group 42" ! 7d N?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8dC *Group 44"  8 P  9dC *Group 45"  p ;d b3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p dC *Group 54"P p 1d N?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2dC *Group 56"P pB 3d R?Line 57P  4d h%,x,>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx d f2o?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  d F\L?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  d@ Z$?AutoShape 6 v/"  d `>?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   dAC *Group 59"`H  /d b^3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0d  DhB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  d b4p?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ d bT?Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" d b?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM d b?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx d \8c?AutoShape 80*3  d \8c?AutoShape 81   d \8c?AutoShape 82b  x   dC *Group 83"eB -d R?Line 84P P .d bX>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   dC *Group 86"c=B +d R?Line 87P P ,d b8>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx d@ \8c?AutoShape 90*eD + d \8c?AutoShape 91c  d@ \8c?AutoShape 92*D M d \8c?AutoShape 93 s  d@ \>?AutoShape 94: <  d \>?AutoShape 95g: : : d \>?AutoShape 96&: < P  d \>?AutoShape 97* < @ T B d  0BC+DEFQRUVW8c?u+ @  28ryU;@+Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE d P?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  d Z?Line 101Dc; !d Pl?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB "d@ Z?Line 106; #d P?Text Box 107a O 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB $d Z?Line 108(  ; %d P?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &d P ?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'd Z?Line 111vkB (d Z?Line 112;-u5< )d P ?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator_socket*  V]8XxB *d@ Z?Line 114[+6 d S ޽h ? dddd dddd ddd.dd d,ddd,dd d,dd ddd d dd ddd d dd ̙3380___PPT10. ""[ 0 ?[7[55hY(  h h  xM0e0e?Rectangle 2P   "Target Module 9v P  hC (Group 3"P  ~   hC (Group 4" " 0h LpP?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   1hC (Group 6" 2~ P  2hC (Group 7" p 4h `_3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB 5h  `B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB 3h R?Line 10      hC *Group 11"  ! *h Nps?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    +hC *Group 13"  8 P  ,hC *Group 14"  p .h b3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB /h  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB -h R?Line 17     hC *Group 18"  &h N?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   'hC *Group 20" B (h R?Line 21P P )h bl>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p !hC *Group 23"P p "h NL?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p #hC *Group 25"P pB $h R?Line 26P  %h h%,(>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx h hTo?Rectangle 28    hdman`  Arial&Monotype Typography  B V]8Xx` h H?Text Box 29D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_4_phase_target) J# 2GGG V]8Xx h@ \$?AutoShape 30P1" h b?AutoShape 31a    hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  hC *Group 32"P h b3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB h  dB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  h b ?AutoShape 35 z 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  h X?Oval 36;4 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxF  h b(+?Rectangle 37   0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  | response_PEQ&    V]8Xx  h \8c?AutoShape 40a   h b8c?AutoShape 41) h \8c?AutoShape 42 a 7 h NL3?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB h X?Line 44K+9 h N:?Text Box 45 Q 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB h X?Line 46 v  h@ \8c?AutoShape 40 ~ \" h bd>?AutoShape 35 )p0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_request_method6 GG V]8XxI h bY?Rectangle 37Z J0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_request_PEQ& V]8Xx h `8c?AutoShape 1073{ Z h `8c?AutoShape 1074J  h@ `8c?AutoShape 1075p b h lG38c?AutoShape 1076za = h NW?Text Box 43n f 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  end_resp_rcvd_event*  V]8Xx  h vGH>Rounded Rectangular Callout 52"{uPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!!oi drs/shapexml.xmlUn7?-BցqA˕6r$W|th/qZAUNa5g޼7|jU(楎yǙIzw#ά:2kixYmŰYqsո۵B¾(+fޭR;pP^o-D B崚o%ˉaygZ8u*Sv%d20P;nχ [#n\E6}[(jW\1^ehRDj-,1.b~0z@p $h4Poe:Ǯ* AY#βBP,: zPSשFԂлHp\XR}Tyz+=A$a(NnHUt>;>#6&3VzTm̏`2%̢s&L̟RvAgaB7s!EN[W¹O)gJxoOHf(틓6a>Y3Ca^waF6, QɭXĉº[+oBfW)9&+2#UcD22@!g6dvDϙ CSrRzV7lL8y6[3}qiF3l7_:1 W쬞޵9h_.A~rqb֒ 4Uq'do"/y\λ)KY@F_֙6%i݋렙AvjNW] w]NLYfdqWzD B]ZZY>g휤^m2R_ol͑L$TKDpV.Y"WȮ3o! )Χ?>?=__ ӉGaL%D^&4ܝ1oЃ?AӉ0K7!ȩɅjW`.9~*tG//$IN]TxVAɿPK!drs/downrev.xmlDQK0Co.ݲԽ(l msĭۯ7sb5^Xt 6*x{"1)8QbvGa[  T8R#a5[)VjͲ\Z4:hQ >+72Tj\AD8T/j@4ϧ+HrI5i\PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!!oi *drs/shapexml.xmlPK-!fdrs/downrev.xmlPKj0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yextension data extracted here,G V]8Xx6 h S ޽h ?0hhhh hh h h hhh h hhhhhhhhh hh h hh h ̙3380___PPT10. ""_J 0 II88lYH( HUzSmM l l  x,0e0e?Rectangle 2P   &Router Component x P  lC *Group 56"P 2    !lC *Group 57" $ 3l N?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xxv   4lC *Group 59" \ P  5lC *Group 60" p  7l b訇3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  N  V]8XxB 8l  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 62P    hdman`  Arial&Monotype Typography  N  V]8XxB 6l R?Line 63 '     "lC *Group 64"   -l N`?Text Box 65 p   hdman`  Arial&Monotype Typography  otlm_target_socketC  V]8Xxv    .lC *Group 66"  \ P  /lC *Group 67"  p  1l bؚ3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  N  V]8XxB 2l  чB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 69P    hdman`  Arial&Monotype Typography  N  V]8XxB 0l R?Line 70    #lC *Group 71"  )l Nԇ?Text Box 72 y   hdman`  Arial&Monotype Typography  esc_portC  V]8Xx&   *lC *Group 73" B +l R?Line 74P P  ,l b>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  N  V]8Xx P p $lC *Group 76"P p %l N?Text Box 77 ps   hdman`  Arial&Monotype Typography  g sc_export  C  V]8Xx, P p &lC *Group 78"P pB 'l R?Line 79P  (l h%,>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  N  V]8Xx(x   lC *Group 99" p l fho?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  \" G  V]8Xx l F-?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,2>)L 0 P2GGG  V]8Xx l \$?AutoShape 13  P  l \$?AutoShape 17PPP   l \$?AutoShape 4601P   l \$?AutoShape 47ppP r  l Np(?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  vtarget sockets (2)" G  V]8Xx  l V?AutoShape 51   l V?AutoShape 52@ u l N??Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yinitiator sockets (2)" G  V]8Xx l V?AutoShape 54  l V?AutoShape 55   0  lC *Group 89" @P  l blO3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  N  V]8XxB l XjJ?Line 84 0 0 B  l XjJ?Line 850 0   0  lC *Group 90"P  l bLK3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  N  V]8XxB l XjJ?Line 87 0 B l XjJ?Line 88 0   0  lC *Group 91"P  l bW3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  N  V]8XxB l XjJ?Line 93 0 B l XjJ?Line 94 0   0  lC *Group 95"P  l bp3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  N  V]8XxB l XjJ?Line 97 0 0 B l XjJ?Line 980 0 6 l S ޽h ? llll l l l l l lllll ̙3380___PPT10. "" 0 }<'(  ltnc ltnc < < N.?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx <  r0e0e4?Rectangle 2   h <  ~0e0e4?Rectangle 3 0   N   V]8Xx6 < S ޽h ? 3380___PPT10.1?! 0 D?( o1 D D N?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx D  r0e0e4?Rectangle 2   , D  ~Ĕ0e0e4?Rectangle 3 0   f- typical things   V]8Xx6 D S ޽h ? 33" 0 0LE(  L L N4?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx L  r0e0e4?Rectangle 2   2 L  ~p0e0e4?Rectangle 3 0   l- aux processor is TBD   V]8Xx6 L S ޽h ? 33# 0 `Y( 8 ` ` Nl?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx `  r0e0e4?Rectangle 2   F `  ~옜0e0e4?Rectangle 3 0   *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 ` S ޽h ? 33rL ?q`?eiGqT;.D;I N S/  XOh+'0 0< ` l x AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne87Microsoft Office PowerPoint@1Z@`@ߚl@ &Ghg  ,T%&" WMFCU <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&-Root EntrydO)PicturesT'Current UserSummaryInformation(8PowerPoint Document(XDocumentSummaryInformation8systemc-2.3.4/examples/tlm/at_extension_optional/docs/at_extension_optional_example.pdf0000644000175000017500000017056214342422106031662 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xSn0 }WQ.fM$JzbXaj=YKߏm(21bPy|TV ,}Uk pݜ<ץIzX5WqFnGq)eY4ÍBdh`=p*8j׬,'xUozEW ZHYu &QOͅ[f9}ZM@+AMHQ-w9FNhSЇmg 9 #r0:tf >1!%n;g#真Zg<I9 +]=rιz3pBQ%ǜAè(ƤW%6|,3tzڟ4U㉨O[XPê BDe~Rs˂jl\"އ c':1. b>^Ch $i488DOIU63o:!AqdzPjɀk+HtXoP<kCY:KQK1K͓dŏͥ\̷h^U=sĴSMA0 @,X.΄笠R}Au5ɒgf{v[bbs8?!PTIendstream endobj 6 0 obj 629 endobj 14 0 obj <> stream xXKoG F{ԯX@y?zKQ#h"qǖb7d[NrfwHJn`c!}݈^FO!NILrb=_6lOO'׻u3jfS0Rx^K|NySad:ݼ~r= N?5>]6@Wlif 2f*_Cur[(:;ڦ.`j/`W`M{ۙ^;l{|A"ؾ$+ܾEu-uBS^2(#lѴw76>s\#}\v=UH|lxG18z㝲T1N+y>DL_Z19eWapgpniuPT.(\5 |V;|pg+#x$.p-yXXa۽MvhP{iGKFAj) -U:6־m ѹ5j=z>#]`{r$.YlE-0Qɳ‹)$t@Qs.:qJVH5]Yv!lJ$ aK Q)?F%J峘lۣEx " S{E6|&4s/*Șu_"#lh, %kF\]v^JޙW1 ΜȆ%q`t/ԮP sPN+`Zb!uW $_bIX8 Kw S6s41a!R[{xQ9SIgyM@I jiܱ\_XE"v'6/+c%Ek=6/]N;Ob44$Hmgc+b&E-tcjR!O(AFQ5^ .Q.{B]G>jCsЬ!S{P&+&[&9|ؽQ-MrĸF<.,ǜ Crҗ !5R=uPvoJPmvTz5zڈTq109{#Dt~E negz.*?+hAu> stream xY[\r$@!OXI/@H(y0;Bxٵ{UǰJ`a}S]U]uuUϳM\$j'akW.kkPx`16 kpy٤ALo/H@bב>N97SD\t,`+_Ezb6QDxi~EqsY3<7D pJh8D++K%p{tN&iu- (y!j7nv)J\d0v\<$)vPLNJ2rQ#aF8%2 X =oi/ʖ z1pͩWud51.5uє*frq\`kUjRYKF:P5'aPrFR8':)x-tŤf]F3[F˞pO^]!kn!v59h7>N!kx敤2ڰ}k{R Vmo'Β,y'q(tfW˴ɨU>(7bm&"3zyc %v;&tV \t~ 0nNmI\3TԬnfyGYN۟UH-V*a%B! Nt3+=1vYnY53oEFF!^yr F6%;"I;e.Je.7eoJۤYJK$?(DFD=NץP^ykC^n qp`5dv)Xgn'lmûCƹIsu  8Bw5E=k8PtC?J kesp 4.-L=2i7`:/;ϳm5.,{XsȥsQT8ʤe߀о2 7UP<%}xWC$Ұnr/y=]Y(q0:@? w {NEn* n\)F0Y1I3/=p{TI Fc=,Q.UȞk5@ qSb}YuF͜âJG"%KyQ"]? L rymK\We'1:wկ QuC zUuZZF,RUw!UTщR+ɈшSx(hI*ӓY0HEqV@ ^^ZH6;Fkm26Aq6:v](eZV}{5[|6YC'☔ZRg[>^ j(VKhX$A//8 s8)Yi% ֢^Y H;hmE:ƄTBEgܚᭀq:7@RiEF6PQVز[-]&:,bibՂ>,[W~EUPW.!lLd{'8/$lI# ~T~Q?Λ %r-m+kz@JF Ns""E.`JhTh0^0ڂF@ˎLK"w$ÔH28=ϟѲ(+)Qg5a:beZvUY̫@Wۨj3UUBԾYTśXYe{9{h0l+Ѵ3ioeٵ(Qח /lxd7tUӣgc:=B_4JK+_ˣ7isWv59Se;l||$>΃jI;o*pݿl|lȕwF/Ejh~IFYQ=`y9lecvhceO ]5-WlX1p {.ŧ|,C8l?{k6ZeF6P*LZZkoyQfendstream endobj 28 0 obj 2330 endobj 36 0 obj <> stream x[oA~ym0˫Jlnb5 UvD>gvSC1ss%LHs2[fs_eM628}T Dsoivw _P%F{dge#o1Y;B2fs˅\{zYfi$ kR܁` HOĤ>z(20 Y Z $%`zS  f-$[CJ$]e2p r_JC >ig89傧DR+' 7& *!H, 7y|+ރȒ)Z1 Wy3\,_2?)O ZB :KSJ4`ArI*9+H "]"}Jhǚju Ek)~kԣ6tL0LiU/_c4B*H3ΐJ>E"m:*js#~:uidzUL[ ̟pK[[Z#_+G\fsifu:ؙs®G i}`'q8endstream endobj 37 0 obj 624 endobj 42 0 obj <> stream xXn7 E_+q*_^'hQ$hoIa8:vvDť4#;n 41bEREs]s&dO&Nu8El5ߠ;zW/+QǟxVͬ:۫/!u/qO@I~q!uz-tlUws˅~ou噊k(}OAVd\38,‡z")&rf6aɦnSݬ[8x`ւR5Lp8!P%aKB'BӮvChVeڙrfdN9Fj*'mP|,yhj.4C6sռKT3i|l[oӟRfgDkl];z9M1|Lܤ% p|]~S!S-Z&bt-&g${` JjEE΁V@$!zN`Egh+:Jyt׽u{ӜZH &j1 e2އ{%6 7uQ<n2uR+ȉ&YPk!u?WvH@rhdjDGR- 'nG#uNȉ扁wPAcdo[?lέi][N5ڝe{?>>ɋ5)q>d0`/LJMXr] /yǬCd/@9_㢔_ROGpH; @N%Ji[;6Q ~endstream endobj 43 0 obj 1491 endobj 48 0 obj <> stream x]s7ݿzԪN H$L1@$w%Ik{vBB=`2e%[{Uƙw?-pt޻)3C:i;׳'2s}Mz;~_nWYCavہKQg*MLô^pQ?rճL?^5>:^V)ɸǰX0΅p Tlp{BJU* WQgU 骄yy2fonfX6{8mQ2ͅP %SNHbJ3s F Jb$B)Ztal1,BgeĜ`8S b;cagE,/4-X90!g~'*a|ՙJ` 7A@u̯xZnF.Q h0̇ /[ܵJ[i *K@Tmv X-!'d3\,#a{g=* oLL#&&?נ+ValOdEdiԐIeV|AHxQ-jQ7@C%F>)ö L9^%jRK|V6oBE4Bib!#Cj81|GV\93'I ,e &!o02.\r_O);$k:)%;0 (:hTiKp ~7-VpN xNiSPʖ-n5:4D,qBqAcJm9[WB-g"6O4E!f!,W6 ҅Ц-8G )12F -}z]}RٔrH 2=2(A򂻔v6q^B2"w#: 'sKH$|rݤ 5s1GI;gO}fm|M_%d "v(6f={q£ĻlJԀhUoxg6Kjs)RwdN).lx@ JjWdR͙6QPutC$>uF,SțE/ GBz}X Fdl uOʧV,)%/2~GJZgƒT u*b[ K`=Dkqp.uhȵ=_ ^Ҥ>R''2yC[YÕ8 %^Sr\E9 TN9XTHE1>d^ڐD z<ʘY>X I>hD dfˣ[*9Tc(WoWkR/]GrsdsA ]3]"eP6#&Y>Z2˿&Ott\BnBJK%YB'lmAiB!bj/zԀJ]|QN>J϶P:ڮbOe*V{|2(2{٤G.K9IgTCKK'UǦ_/7(־ YsoQ ^rř۞rbD Ӕ"6xҸ>w7tͺx}5._(ȼB*8ˈ=R|@YWv( 752ZfêLx'e*ͫ~j^e@&.MM#zy^¤ԣK.˓+@/O(4qn HQZ'il`̮endstream endobj 49 0 obj 1996 endobj 54 0 obj <> stream xY[o%5Ar}`Q71_^ÐH<(rLN2s?n۝$g +1})vW}UeEϙ=38Zw/:yOYNIE'zyjCmN/G۽mdqȬmpחPֳN7BR{ԥ[.U.Y^t)?MWz%)& ƹ_ Z4G;d~S=\Y SY]ɠpL;i؅2Oތ4#7 0~2pg5tq@'t utDe<>zK$V:2d0NWVaFY26U%=pѳN26tD:7!L@X, .c{Xrb]Hf:^|Š⫩WםXL1ϣU{Dt9{e6BP4>OR,!Hw/>yF*w0MroY*0G, + 8\ {xriL[K0gvD) 0L^NQ┝HI ]f(zx|X*%&`<Z }8>}4ZR*=2IFgsN,yr cPEzYsƻ|M>E!FddC~Oflp~`3uޡRL19N%D lD?9Q#q%l!,P;G$UJqXPz J(O!/Z%sZu^+Gtr:os-VGu0)zc"۲]z5{fb{67?ree )R,aUb'BSgNt,#›j$k;[QrwwڐmսJλҳÜ3I#]PzCΧyKBW̫_e\ A;: vd,0. )-Z2jIdV>|JmHO ;@OH"0őIqw>ScL2BPo%ɀOAgtWq7URJ#Ib@E_`JrAfӠ=Eq0Wי9̹lF.#!p} BTegr *y#ƭ&J;7eEdXqGbyկsP/RYp)%q|(W83q7F4 O, 2:(Ï/*aY1fu^ٱ))_лFJEȦ^*1ILS~+L5Mkl)( Bݘ<zVz45݈2Zz)ICg5DH޸|TPͼ.\8k /w y]&.b^Kmv z%i߈KDCDra;Jc'/T܏GO#S75XT_&m0J\PTN#AB(AC(֥w4^ QR(FXHJ*znk]x9m÷G ¾B!"u 8bpsg+tՁ^P\|5 ۚ}6teeGܒ{@DMyeFEkY> stream x[]^qF^$o \(pSy[4(4@ EZZG svub-xp8$Cŭ\ߞ^s %qs6~|q^}:r?^=;=飇}/̯tAb믥,M\Y3N6$?syyk\=]jKYV礶J0h_RǷ>?Ț28DU\*跐k_~${seIgPR8{Ws7QQR;.ӉL۫ft5 'z6ћ1gZՙZvMA/Zr/uo ~MWRsPCGϷt0ۧ-ۗcyn_JwolQĸx`;_\p&D_T*U,c1~juhk5jbF6Y~3 [9/oQn]x_5%h4Z`^lCѫimyomtqqURLR#-_]&]BUՒiC_4F@o](Z)qSܳ[مmtҍC\ V]P0˾ͅUrYfʐ8j)lqZh VɽITE]ܽiPz/C UjB^DJ1#^nEuG!{C'ݟlF7Р{R^4K%VE"RZA( 2RoΜ4X5 J0f[Л&C{0΂h Y?pL0NO;-RA^!{\!Py@R 'dO6>XҢ~/Iuɚf~hjѥCvkɦW2\jdpjFE KJt}ؼᛓ$I"!]ed-p(: "ׅ/"JX/"NMyu(PTjgZ<}H؛:Wap?f=HJ;wd `~v>S|#8P@UWYf?Itznz_~ n#w~`7n.WyIs}ۧ{zĻWZkHZᑿ"jp"D:K9t$UH3j`6'x1 Q]>Bjڙɗη~ M8ȏ[8COET\~h`čuЏhYMlXvU3Ws]7ny5ڨJW j!5W0n -v.e8 F@T6E\SqYG0\3RMvA;e^a"jft bR"9@n~=۬a<q~)ˑs xLapTrF縀\>'RvYGR'gQ'gt/@Tcx)#xl1} xB)|dž˞xzaP"RB2k *zIpbRfKsPkRO<|CvEzXT;/X]vN=X} ӛB.I +Io,beh~- mOVE`I zٸ,Q^歄0M҃[Y@ĺ$yQlPB Jlf_0a*;j`"֔Ťj!aFC AG(*6䊕(A؞-bbD[fzY8[wXjCCJ)zow* =$LʵD8- c_LFaL*نubRB Pta&Q9@f78eŤD䈌g(Zr 4#0)RXb0: - @圲ptH4ow¡wqG|ykvкsp8"cl@:ĴєR:b;iLL zw9(Ykv } RBB3)&/RD68Xjq!!?,&ebõzB%9lR`ۘ8d#>%L^sƉ3)Y/"n,6bM 3)cRcp؏qa|@ɗy˒6e1"RAWLj)-ЏhÚ7K,=@lϢиsņo_\6K@۲-kbRr}3FYzO: 9r1&rek(KX; bo$d1)lR Β=w<$n9L|ؤZ5톴ؐ Y(ee7}\ߏj{ x`Km~e αZO7YLJϫ-EY}K:lPQ3]nfN =YrFۏWDŤD)gʕkCv.LδƊClyVEU y-OZZ>Vط1! ,,RN7Y}2J"ܥfOdwqb@ZE;WCaCدow#3|\ :h31^=sQ>[tc33 y}Lj05_ɋX>m3ذbY _ E )Ur`pf\B5C @لf&2x)暭1`fJ̗}̔ (,dz9 XaY K RN(>0gK|I8PۙD;[l<ĐgRrpd!7;C sWydl3f4'LәrI^}bRډ;>18ۙUV4|+llLE;y?RA줫-/юLMҳ^( +ua AAggY.ƅsfMَo-`Jn+RY[%8Lzl j.54;@A1$*˪*/(,Wx ϼ7Ղ'MlR{͕[q`zb}n(>fP$Dix>vs , 0m E #x,g1|4b2n;>o>T烨DdwA\T6R=dNpqy*Hpx7Ѩ!~{ a6Wob-_oښo{o恿<շ=`]Eⷺ'o|  gqWۘdhmjG{c O.qhЬfopitr^5C{ Oi/;b)R=`%&ABd*ڛ\BH XUZ禹z i>>=rk:sK;^3^-9l % ,v<ˠQ>|H] \MpA\kDEwwendstream endobj 61 0 obj 5069 endobj 66 0 obj <> stream x[k]U䂒(FC_RHd91I=~d=k]u0-wծu\sGw'TCj/'o$wۛ?>|u?ǛXJ_ab/|=kn4JMȺ}vs_?,omG?=Z`slp|zwӳ_JX-!V޺zzN6x΋w~v!^Ox s?FB[XZPۿ?)Ď0Vz wr(xm)D5Z(1`Ml(*OwѵOzޟ <"{ع:@=cp03agk.?=;$B7[갞zG<9%P ~enG#${NBNt7ѳ9V|f8dm|w'sT~8<{64_IBd|n&D_ߚ 1˫ Xا[RDq q-']qȕhU%Z! ZlƸ akЮ|פ;J[8r?bxyX?^a2wA}hƯG3͈`>y ϓbJHl2G9"Ä2:hg! .CX Ĩ E WJ̵@=A˝zL5?]0aΞG <,l {p/օvu!ɜCxό|bU^:9gR4^pj9fȐvL>> Zx0(ȏ™B\z6~!T;r/Wݢ\ ǝ0ѯ{c9ݽ>_eh;v}H9ߟF.x48tGf|0glHNKmMl^<"sͳcp4m>}Wiw+<*m;gZۃ9-##@Co"+{j.{&A`P!1xA媊 ʈW" =i- 8]8*Qfƒ:(dArz E^@NDwsy**nXR-"OBSf=<ߕPIv2oqDi8dPaΊiOI7l 2G; w#/3rq]ovߟ!^SDYi;Ltjp"ǾǀCcoO`X+T/'کC!k߳`YEUmL<{6@HJ\(qB0@r)mi-!r5qg4eȍwQ-ݒ0:o6߿8]lHͥvޜЏ\M(Ӷ\dYhKpf؋؀\lql7?sukvDv4bkJC͛`KeRʺ[ӢjXQQwQ%I%2BFrhi 6YJY7Vє=nWc۔P:C^<:!tͺiTz2ot1`O,m \OѩKE1ؚ4ps嬽*W-&BU!nOqHՠyTiΰ4QIZ[h/i NXT&U؛A֦LZU$2 hx2F it$m[WMZuNI;fIlF0JϪy#lI#U+@WL*ä$~L[ꖨN$IðrؠY9RtGI5܊QƱ*JJ;NtO*Mӛa6mJӪ/+I(Mͪlj/&Yvk4Rf/ܮdoqk I34IeI54J>V?(&](dä:RI.NvXՎ"ϵaҚ]sk__4 ּb*۹N\i)Uì/䐴vd5%6wnpHڬ,Ҫh5E^ҪҁFX\+~K/gzJV^/>ZMQ]VSL#'0B!Ք$Zy:=hTTV;bG}G ҡCe #K0tk5EL UT0>&t1- +G5J`&6"[$&TqDYY] I"ue᪣(L>M(}!j.M$W3j[I]`?$t9XΔ;_E6]Wɻ}2م7FRW.O`;⨻wvdK4K(Aį/G:/?o*:{7T}9t$ \\iϽ;ÏfW DZRuDwendstream endobj 67 0 obj 4116 endobj 72 0 obj <> stream xWKoE>$2D@@p9X]8Ev8W^+Ww}U}ދIR/Suw)!z_Gdki|rПvŋ |]w'vqgh|'EaX3vT;B;ʭƪOOִ+'P҇~!iO;5Q\wG1i4l5ͤ/ ]Gr H-mXI {ZGC-R zTmo{c瀱x84f+҂현JX2 _n:`I_.5NGj@1X33&aL M1Vݬ1iu84$Z6ǺwwMܰᐘ:sη'<xr`f(2Y u}aWh&z`,<$f(6ހ8ڂIUrrb5h 9X83P-l%F&*9ID]WrX33v|4]&nw&'.X%JNI!ƻwKo`|f'*2pD'ϿI*T77N]KaHՙ[|o](oxX7Ru&6[|oeJcߦ>(endstream endobj 73 0 obj 1453 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R ] /Count 10 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 79 0 obj <>stream x]Mn@ F`IțtE`"DȢ./3&~3ΗLmnSlS9oeժRRZ endstream endobj 29 0 obj <> endobj 31 0 obj <> endobj 80 0 obj <> endobj 9 0 obj <> endobj 81 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 82 0 obj <> endobj 30 0 obj <> endobj 77 0 obj <>stream x| xTU-joI**KBHX!`Q!hc{lqбqinGn۞v-"ӊm v;#t ̹ >w}{FМyj~`K_Gߴ|'~4 GWt W]rJDվK{tl+W >07~! .]QO޼dO~|ҍƃ:@ehKWh_{z~.;+Yо!a':~"Flfbs;zC(BO4o56t?z>ݍDit5^7m>KډПs5)*!9/7&8q=\,$ϑ%kIZK sG_Yp Wсo| h=z,9B@?|nY֢-'޳[3uB;Aq(%oȀ((hm@?@a 4#<7oy;na%jz܏$jFAt+7h9gCh2Z%]ѻh!Q.~ =!6Ŀ>AKP{WХ{ΆI؄hYiIqQaA$? >r:6j1#㴷kO }+N#gu9>șn4@m六#iDG0֩wuzDPDLC{i^a(G; FAm fik \QGӤi"-&x8d!薅*bsZ ]V [o+e=QSow@uR:Jrv @M/5BH z7wm vm4h1cnkݺuK(}]㟆鹻 om e`*XE:'=阫R<[Wްz#Á5m,snm퍴.mRޜV:u.bҵtkUZx³'=-as)b-c5=Z Tf(3P@Ӊb"ں|"p7^sNJ r$ =㟜YT /"m=[EBm[{.;:,#[wooQtAonN=}xОJ@ܮd l"),#Pfh2 P@. w^ Nkd4Z1q<SaMz.>?z|d d{OFمhJKEcVh훔 yH G!C41\ Lx1ik8m`(E_j:&j6S* ꑥ}[5UB *}P|`j[z#5?rp cU5~ԬaӴ#?k'; &=M; Y׾B %VқAT) <`blFN:_e3C_O^eX5>&^$dvBLIvtv|54@CI|9ZSڝ% e/^; $u;ImSx(P?@I(Kly9},;p`M\ ltE3(F_秣/r,;ZѯOѣR.X6ti6,j0KV XV $4LrCA/68_3%>u; ݥ;fz]2XRt .X;SݸfTjy P Ћp~Bw 6p&Tm0XX͔AJS> ~x2zx N5\ up5õW:&8kjpuµ Ae?4Q(o$ ?8 ~.pkߔMggؽ=G1J`iuB *sL8ax m [uAp阿d>DYp'}scC<wܳ4ؾ^(j{eʤdud8؜ 6%BQ$k5x6_?~sWѷw#pT[Ӄ/ocAtLo}b-H}_'*ֿr`++GW<Ͳzud6|=7{1Z6g2NYڿȋB-c`szp' -X, F2#J %•8ݡ`Й 9i195hw6(N86'b8Q~GP! ~ Qd0Vb nr\/Ǩ~Bﴽw6v諣޹M?MN@n^ ڀ_N㛺5 DQ].[ZbkҴiX(KkJak}ig%zYtޡ/J=BG0QX {=EԧlBQ}ptj 5:`,tHxDK[٩2l ᄡ}M)L/9$: PjuY:LO !tnp $U5(!X%U8Eqő"bu5.Qԉ{n9#toM6Ϙٙ`\ 3=96jff1.܇;-*B.(E\5 Osmo47ٓf@7(6й" 0..RH%qR\TT\[㶓=&M1sIc淙 qѦMZ /d&/u&/@E*Ɵ_F!ᩏ<3"E+<=+ mw8>B czJ(IdNGL!]΁+@4H,Z穉&Eɑ$UpME0H>^dS%#0ϟhyM j/.;k?)-(웴V#JꝍSN[`[_p[rAv \t*F#ihOK'>tN w jD0beZ 8u{G3e_)F 3졝tyLW/:Ǔǁ68=v{vJL >ڝ%wmw?]m~e^8R8[yRYߔշ}JFAJZk!e1JD#L_P,V3N SDI63k&4RMV]Kc0[vg#|p$KFBUOj+'r9]gO-$ ]{%J).-5p&#Tt;Q\FʀgUPFʲSL*f}YYZ&qq,uE7.(.DP*[2m.ĕUo)Pg RM@mpR.ڸ.QPC"E~ VPk6xwŽ+/†۷&[d+x2֤^y}INr{-vVZgPO}^|##lqMmP L=LZ~C ŤEUc}#>WlL)PJ@ˏQJpDgfl0UUI{ NܻKsgDJu1jVs\J{Yxj#ؔJX{"a g;㎯} =3S:Z^YitbF:ElSYŽ*W)/um ܗS8r­0 (;o=H[)Clސ`~ăY?8s[Q,7N=xovyMĮNݷemU%ɳyE8R^U5S<\\]T5e6 g/A 3"|y+))s݃B'0o%eR/.) /_xm#/ ᜕WY?do ܽk=c7g~yVj4դmeN5Ih2g:ngwxJ|]3U%x'tu8Q(1 qCds6(Uf(2Dkf/0ea<ټs Y1ƌNp1EJH5m }֣Q"0yqV,͌fJ=>Epʲy}eI GrjxFϋM`J2$Ps5C!M?pB,DCz(rYI=dBhl#M"1N3QB#(&QXwkЋ2)X I ~|:֦@;ݾ (bV'|rL`1 Ld`JAߟVP("}qډ>"d.STi;3M>g}ug٥hc#? zJvc5@s908H}Aea'ۗ]׽-]PlH,[J ꦦ'\vwrr㯰'Dód~ϲٽvN<6aKUFRAn kAAl-G\?_+Uœ5^)K9 l@Ly4lMf#fMh,i kL\̗LL\`&oEGǁIzLUq|bw@ *1m1%,jY2rS;^̌ff\>*,2 t],lrɵ&Y} !Xm[e욍2έjWivߓ/YtMҔvEIyaz@$|(Αu7~_IO"&'e"[=I WI87hgK7[䰥;aTҒ3Spaf&NQgiUf@7o,6Ґ΄Ybh8YtR mP U"}n"cg(b-K42:CŻfliiIeí:^wFgxu-;cNg~,ߴwۭΘVq졷f5d.[% `_P.ѸqzQ^Ǡ_/'*?RAj͒b\R6'mca-Y%XJaIAWU9~m5Se%RpCIE+st~"SXjcJ8dOfvז k`a 0YO6M#Ñڳ-㔭cwl\,_D]/:4Զv}p͚1󍿻93c'Oko~H3byG&8mXPdy볁 l`ήYE0<ʚ61 ~Q\ 6ܨ([9nOq\lYk+O{ YC^_҅)6I fIGv#"P1M+`|d11Ƣ0ݘe)Iyd8y:F(9dl1Akʱ0E,9)q&hhc#2 U]\4Nl-.b˼0y㽥BvEwJr٣FՏL7w ÄjpRZLR#ajơ̥DO(%_օسV!1`(T?-?*K11iRl1.5Vij|u^1Z7#j HR4S ~Jrj&8ʙdB!&!&!&!(&_kbڒ,ZLSєxcD:b3tu56PW˕]qOF9f] gݲwkJ>t㎯F>8Ȋܣ?9)3W KZ5%q6ZJ*OgeF\O3Y8l&oX2ӴW,C0G.-5旎6cG6ecYԬ^-uhXT_M\n'5tc#Ma #>>Vl;Y2SeюfY[3aAjɀYFj4V)IPۖ .!3wZۏ u޷ɦ?()+moW<9X/lҘs17Vaq#:s*TRDi#Z#,׃E0~%u(iꓺ>15)).z>Fk]455ht%{M-<}h|WOr$HF^0::K0ʦXR.ҏX"[ X) !Jt8dYǀ+!9=\4WJAO1 ؘ(lhl5B8H"Fgd@ ~ՌY9?`vBqP #$$VԳh^&Q4" +u@ZJ2|ѿg?ԒL<;͡_E0y%QK"ۓ (no= W>Sh QRT8L,tT9'wț6uMp1sD$Y4FC1YςM.$iT(,ُʴdQ-G}dzYr苬 PFƶDL8DK>ǚiԫvʇ?fWiD>! nm% !P抸ʊ"EeAؗs7d H!`o53{J313kgfvoԘJ*LYeeݬMtpK 4Kgr0* Vс*[CmִUZ+c͕j:,%ȣղjmcKF _S6,Cr5w~tEdr8g&'`8̛/X~g.\7o K5bv7>i W-YVQ]se#a kkOZ kU_[Z_kՂ}ȃYZdMy({]Yv"$>nUBzE,|Md*;.3󞭇z4my\uq>X`qg"8 3` Q;_#TIQ[f^ = 2d!,Vgcd? ߀tcjReM`Ļewwr=z=dBa<؋f>x㥗8+,嫀l(r&  Ltt;Kn']VuҘKLƥK dJ_-nW6v{uU:1ƌߛc.(̘!ʌ [痨fr/1XČ&Wkixl{;7>=Wexn@Pۃ+_{򪿝S2+QfwQI\˓3/fMRe:2l%@!Ji*de,ߖ^cS^9ψ%T1J:ZD+ @@b*1ZJLV%&.1 lOby@٦>D6%&0~}cAuvh]K1uCk ~{tܞ%V\moϘSR\yWdS$|Eu>n%̲9d4&y·^$Ndž{Ӥc>_OF)gga^u؎pFyI!~V!^G饪iD@#\A|V9=7*rMSO}_qO5]oD |9U6 )< }faU4F1fV'U42UU?ϲl2~6#քw~vUiu_nLT?1+ҕFL&EdEpEؕdC:K= xvE'8 Go0N8y-O z.$m*qU>i~b QZv`%?_vl&?3dNX&D-W:D vmsj4V"bNMT^6b/*X_5!0}βUkh1wɞxţZ f 76,m_3:N%51y@A,*,Vu`):H^d!#g5K1Hci(˜:C'rE,!Fn3>`UPi wGNpTGcQYՖMԌTX˩Z&}*E?y^_tfMawaI$j},WgwV6a!v y=$<)|#|;fmD1Th,=AeGZRLڣw}#iUdm 0EFYE`0 ^ D$d2:N7h4{GG =I NKjQ|FHV}jM5uQ%WG%tXH!_$HQc7-]w /B+j j}b&rQ ]_oX8+8(鍈1DA bUj Z /.~y\_qf{$Yμ{i ƥNO[J `u'1c6vCLFYT(E"QE KdQG&<'~M3K<YCPHNx!h0"' HGC"$<v 怡0G1Љd A ̯3d0Kk͜x;n>=~Ⱦe*OaBtL$7Jrfy F}A2 |j{BRFj2OGޤHK=zBqEp<5nE:NGAiuBX 8syRTNJ"q8r*q#@#х~*oezl1ZX*E*>JEճN-}9z10yethnԛXFDZ+hʽjxn ab57;/qӷ~-ݢ4]̣QkDYltLv<|5N{I￞;sǹq8w;sǹ=Zh[ E.VɹjZϜ~i]FSmK-h}y;whꌷ.sGٙ9QFu osJ Ԃ棙h:EP@FdBfbT ]nC;.45NGh!TBbdD_kt.[{)" H ? tb m @mdt ѥEmVpjBlFŲӅ50-ҲxXAK>ȍ(eoi=߅i?ڎ oAag'P%2@?\+诹G:ܑ~tk(*#;_k:2Vt~ }U endstream endobj 21 0 obj <> endobj 78 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T18:32:44+02:00 2012-04-30T18:32:44+02:00 PDFCreator Version 1.2.3 TLM 2.0 AT with Optional Extension - System ExampleJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 84 0000000000 65535 f 0000024089 00000 n 0000059201 00000 n 0000023966 00000 n 0000022008 00000 n 0000000015 00000 n 0000000714 00000 n 0000024154 00000 n 0000027089 00000 n 0000042510 00000 n 0000027029 00000 n 0000027059 00000 n 0000030084 00000 n 0000022202 00000 n 0000000733 00000 n 0000002219 00000 n 0000030114 00000 n 0000037986 00000 n 0000033024 00000 n 0000036037 00000 n 0000042669 00000 n 0000054423 00000 n 0000042807 00000 n 0000035951 00000 n 0000035994 00000 n 0000040372 00000 n 0000022398 00000 n 0000002240 00000 n 0000004642 00000 n 0000042036 00000 n 0000042948 00000 n 0000042349 00000 n 0000040424 00000 n 0000040467 00000 n 0000040510 00000 n 0000022594 00000 n 0000004663 00000 n 0000005359 00000 n 0000040562 00000 n 0000040605 00000 n 0000040648 00000 n 0000022790 00000 n 0000005379 00000 n 0000006942 00000 n 0000040711 00000 n 0000040754 00000 n 0000040797 00000 n 0000022986 00000 n 0000006963 00000 n 0000009031 00000 n 0000040860 00000 n 0000040903 00000 n 0000040946 00000 n 0000023182 00000 n 0000009052 00000 n 0000011070 00000 n 0000040998 00000 n 0000041041 00000 n 0000041084 00000 n 0000023378 00000 n 0000011091 00000 n 0000016232 00000 n 0000041147 00000 n 0000041190 00000 n 0000041233 00000 n 0000023574 00000 n 0000016253 00000 n 0000020441 00000 n 0000041296 00000 n 0000041339 00000 n 0000041382 00000 n 0000023770 00000 n 0000020462 00000 n 0000021987 00000 n 0000041445 00000 n 0000041488 00000 n 0000041531 00000 n 0000043164 00000 n 0000054620 00000 n 0000041583 00000 n 0000042433 00000 n 0000042595 00000 n 0000042888 00000 n 0000057298 00000 n trailer << /Size 84 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 59976 %%EOF systemc-2.3.4/examples/tlm/at_extension_optional/CMakeLists.txt0000644000175000017500000000647114342422106024654 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_extension_optional/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_extension_optional src/at_extension_optional.cpp include/at_extension_optional_top.h src/at_extension_optional_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/at_target_2_phase.h ../common/src/at_target_2_phase.cpp ../common/include/at_target_4_phase.h ../common/src/at_target_4_phase.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp ../common/include/extension_initiator_id.h ../common/src/extension_initiator_id.cpp) target_include_directories (at_extension_optional PRIVATE include ../common/include) target_compile_definitions(at_extension_optional PRIVATE USING_EXTENSION_OPTIONAL) target_link_libraries (at_extension_optional SystemC::systemc) configure_and_add_test (at_extension_optional) systemc-2.3.4/examples/tlm/at_extension_optional/include/0000755000175000017500000000000014342422106023527 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/include/at_extension_optional_top.h0000644000175000017500000000510014342422106031163 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_extension_optional_top.h /// @brief This class instantiates components that compose the TLM 2 example system //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX // Charles Wilson, ESLX //===================================================================== #ifndef __AT_EXTENSION_OPTIONAL_TOP_H__ #define __AT_EXTENSION_OPTIONAL_TOP_H__ #include "tlm.h" // TLM header #include "at_target_4_phase.h" // at memory target #include "at_target_2_phase.h" // 2nd memory target not using extension #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: // Constructor example_system_top ///< constructor ( sc_core::sc_module_name name ///< instance name ); // Member Variables private: SimpleBusAT<2, 2> m_bus; ///< simple bus at_target_4_phase m_at_target_4_phase_1; ///< instance 1 target at_target_2_phase m_at_target_2_phase_2; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __AT_EXTENSION_OPTIONAL_TOP_H__ */ systemc-2.3.4/examples/tlm/at_extension_optional/include/initiator_top.h0000644000175000017500000000746414342422106026577 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_extension_optional/src/0000755000175000017500000000000014342422106022673 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/src/at_extension_optional.cpp0000644000175000017500000000521714342422106030011 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and call sc_start() /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "tlm.h" // TLM header #include "reporting.h" // reporting utilities #include "at_extension_optional_top.h" // top module //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); // REPORT_DISABLE_INFO_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_extension_optional/src/initiator_top.cpp0000644000175000017500000001140114342422106026260 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_extension_optional/src/at_extension_optional_top.cpp0000644000175000017500000001112114342422106030662 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_extension_optional_top.cpp // /// @brief This class instantiates components that compose the TLM 2 /// example system. The same block diagram is instantiated /// for each version, but with different components // //===================================================================== // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_extension_optional_top.h" // our header //===================================================================== /// @fn example_system_top::example_system_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== example_system_top::example_system_top ( sc_core::sc_module_name name /// instance name ) : sc_core::sc_module /// Init SC base ( name /// instance name ) , m_bus /// Init Simple Bus ( "m_bus" /// instance name ) , m_at_target_4_phase_1 /// Init intance 1 of AT target ( "m_at_target_4_phase_1" // instance name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_2_phase_2 /// Init instance 2 of AT target ( "m_at_target_2_phase_2" // instance name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of AT initiator ( "m_initiator_1" // instance name , 101 /// 1st Initiator ID is 101 , 0x0000000000000100 // fitst base address , 0x0000000010000100 // second base address , 2 // active transactions ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // instance name , 102 /// 2nd Initiator ID is 102 , 0x0000000000000200 // fitst base address , 0x0000000010000200 // second base address , 2 // active transactions ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_target_4_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_2_phase_2.m_memory_socket); } systemc-2.3.4/examples/tlm/at_extension_optional/build-unix/0000755000175000017500000000000014342422106024164 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/build-unix/Makefile0000644000175000017500000000073614342422106025632 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_extension_optional VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include CXXFLAGS += -DUSING_EXTENSION_OPTIONAL OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_2_phase.o \ at_target_4_phase.o \ extension_initiator_id.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_extension_optional/results/0000755000175000017500000000000014342422106023605 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_extension_optional/results/expected.log0000644000175000017500000103021614342422106026114 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 0 s - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 10 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 20 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 20 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 40 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 47 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 47 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 50 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 50 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 57 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 57 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 57 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 57 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 67 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 67 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 67 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 87 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 87 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 94 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 94 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 97 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 97 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 104 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 104 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 104 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 104 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 114 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 114 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 114 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 134 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 134 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 134 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 141 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 141 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 144 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 144 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 151 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 151 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 151 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 151 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 161 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 161 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 161 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 181 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 181 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 181 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 188 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 188 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 191 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 191 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 198 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 198 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 198 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 198 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 208 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 208 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 208 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 228 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 228 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 228 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 235 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 235 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 238 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 238 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 245 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 245 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 245 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 245 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 255 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 255 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 255 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 275 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 275 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 275 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 282 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 282 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 285 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 285 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 292 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 292 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 292 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 292 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 302 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 302 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 302 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 322 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 322 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 322 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 329 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 329 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 332 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 332 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 339 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 339 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 339 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 339 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 349 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 349 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 349 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 369 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 369 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 369 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 376 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 376 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 379 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 379 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 386 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 386 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 386 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 386 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 396 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 396 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 396 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 416 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 416 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 416 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 423 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 423 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 426 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 426 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 433 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 433 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 433 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 433 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 443 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 443 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 443 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 463 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 463 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 463 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 470 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 470 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 473 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 473 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 480 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 480 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 480 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 480 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 490 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 490 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 490 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 510 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 510 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 510 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 517 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 517 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 520 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 520 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 527 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 527 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 527 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 527 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 537 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 537 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 537 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 557 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 557 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 557 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 564 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 564 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 567 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 567 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 574 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 574 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 574 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 574 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 584 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 584 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 604 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 604 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 611 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 611 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 614 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 614 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 621 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 621 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 621 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 621 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 631 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 631 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 631 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 651 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 651 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 651 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 658 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 658 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 661 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 661 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 668 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 668 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 668 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 668 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 678 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 678 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 678 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 698 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 698 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 698 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 705 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 705 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 708 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 708 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 715 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 715 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 715 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 715 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 725 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 725 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 725 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 745 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 745 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 745 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 752 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 752 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 755 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 755 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 762 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 762 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 762 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 762 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 772 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 772 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 772 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 812 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 812 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 812 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 819 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 819 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 822 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 822 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 829 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 829 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 829 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 829 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 839 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 839 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 839 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 879 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 879 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 879 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 886 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 886 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 889 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 889 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 896 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 896 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 896 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 896 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 906 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 906 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 906 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 946 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 946 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 946 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 953 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 953 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 956 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 956 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 963 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 963 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 963 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 963 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 973 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 973 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 973 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1013 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1013 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1013 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1020 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1020 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1023 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1023 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1030 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1030 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1030 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1030 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1040 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1040 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1040 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1080 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1080 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1087 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1087 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1090 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1090 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1097 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1097 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1097 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1097 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1107 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1107 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1107 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1147 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1147 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1147 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1154 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1154 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1157 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1157 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1164 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1164 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1164 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1164 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1174 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1174 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1174 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1214 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1214 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1221 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1221 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1224 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1224 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1231 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1231 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1231 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1231 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1241 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1241 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1241 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1281 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1281 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1281 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1288 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1288 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1291 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1291 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1298 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1298 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1298 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1298 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1308 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1308 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1308 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1348 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1348 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1348 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1355 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1355 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1358 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1358 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1365 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1365 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1365 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1365 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1375 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1375 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1375 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1415 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1415 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1415 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1422 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1422 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1425 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1425 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1432 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1432 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1432 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1432 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1442 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1442 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1442 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1482 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1482 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1482 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1489 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1489 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1492 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1492 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1499 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1499 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1499 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1499 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1509 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1509 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1509 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1549 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1549 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1549 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1556 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1556 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1559 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1559 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1566 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1566 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1566 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1566 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1576 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1576 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1576 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1616 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1616 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1616 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1623 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1623 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1626 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1626 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1633 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1633 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1633 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1633 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1643 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1643 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1643 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1683 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1683 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1683 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1690 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1690 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1693 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1693 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1700 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1700 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1700 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1700 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1710 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1710 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1750 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1750 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1750 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1757 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1757 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: at_target_4_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1760 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1767 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1767 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1767 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_4_phase.cpp: 1767 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: at_target_4_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 ACCEPTED (GP, BEGIN_REQ, 0 s) Info: at_target_4_phase.cpp: 1777 ns - end_request_method Target: 201 starting end-request method Target: 201 transaction moved to send-response PEQ Target: 201 nb_transport_bw (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1777 ns - end_request_method Target: 201 ACCEPTED (GP, END_REQ, 0 s) Info: select_initiator.cpp: 1777 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1817 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1817 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1817 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_4_phase.cpp: 1824 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 101' Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1824 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1827 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_4_phase.cpp: 1827 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_4_phase.cpp: 1834 ns - nb_transport_fw Target: 201 extension data: 'Initiator ID: 102' Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1834 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1844 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1864 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1864 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1874 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1874 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1881 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1881 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1891 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1911 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1911 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1918 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1918 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1921 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1921 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1928 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1928 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1938 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1958 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1958 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1965 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1965 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1968 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1968 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1975 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1975 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1985 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2005 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2005 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2012 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2012 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2015 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2015 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2022 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2022 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2032 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2052 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2052 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2059 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2059 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2062 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2062 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2069 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2069 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2079 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2099 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2099 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2106 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2106 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2109 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2109 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2116 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2116 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2126 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2146 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2146 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2153 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2153 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2156 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2156 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2163 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2163 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2173 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2193 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2193 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2203 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2203 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2210 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2210 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2220 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2240 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2247 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2247 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2250 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2250 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2257 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2257 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2267 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2287 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2287 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2294 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2294 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2297 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2297 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2304 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2304 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2314 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2334 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2334 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2341 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2341 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2344 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2344 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2351 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2351 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2361 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2381 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2381 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2388 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2388 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2391 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2391 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2398 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2398 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2408 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2428 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2428 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2435 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2435 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2438 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2438 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2445 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2445 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2455 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2475 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2475 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2482 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2482 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2485 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2485 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2492 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2492 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2502 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2522 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2522 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2529 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2529 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2532 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2532 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2539 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2539 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2549 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2569 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2569 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2576 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2576 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2579 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2579 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2596 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2636 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2636 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2646 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2646 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2653 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2653 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2663 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2703 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2703 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2713 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2713 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2720 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2720 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2730 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2770 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2770 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2777 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2777 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2780 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2780 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2797 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2837 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2837 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2847 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2847 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2854 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2854 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2904 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2904 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2911 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2911 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2914 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2914 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2921 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2921 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2931 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2971 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2971 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2978 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2978 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2981 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2981 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2988 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2988 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2998 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3038 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3038 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3045 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3045 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3048 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3048 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3055 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3055 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3065 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3105 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3105 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3112 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3112 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3115 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3115 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3122 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3122 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3132 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3172 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3172 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3179 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3179 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3182 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3182 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3189 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3189 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3199 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3239 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3239 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3249 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3249 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3256 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3256 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3266 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3306 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3306 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3313 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3313 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3316 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3316 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3323 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3323 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3333 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3373 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3373 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3383 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3383 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3440 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3447 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3447 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3450 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3450 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3457 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3457 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3467 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3507 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3507 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3517 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3524 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3524 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3534 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3574 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3574 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3581 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3581 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3584 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3591 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3591 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3601 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3641 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3641 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3648 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: at_target_2_phase.cpp: 3648 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3651 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3651 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3658 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### Info: at_target_2_phase.cpp: 3658 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) systemc-2.3.4/examples/tlm/lt_temporal_decouple/0000755000175000017500000000000014342422106021701 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/test.am0000644000175000017500000000674114342422106023207 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: lt_temporal_decouple ## %C%: lt_temporal_decouple examples_TESTS += lt_temporal_decouple/test lt_temporal_decouple_test_CPPFLAGS = \ -I$(srcdir)/lt_temporal_decouple/include \ $(CPPFLAGS_TLMTESTS) lt_temporal_decouple_test_SOURCES = \ $(lt_temporal_decouple_H_FILES) \ $(lt_temporal_decouple_CXX_FILES) examples_BUILD += \ $(lt_temporal_decouple_BUILD) examples_CLEAN += \ lt_temporal_decouple/run.log \ lt_temporal_decouple/expected_trimmed.log \ lt_temporal_decouple/run_trimmed.log \ lt_temporal_decouple/diff.log examples_FILES += \ $(lt_temporal_decouple_H_FILES) \ $(lt_temporal_decouple_CXX_FILES) \ $(lt_temporal_decouple_BUILD) \ $(lt_temporal_decouple_EXTRA) examples_DIRS += \ lt_temporal_decouple/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details lt_temporal_decouple_H_FILES = \ lt_temporal_decouple/include/initiator_top.h \ lt_temporal_decouple/include/lt_temporal_decouple_top.h \ lt_temporal_decouple/include/td_initiator_top.h lt_temporal_decouple_CXX_FILES = \ lt_temporal_decouple/src/initiator_top.cpp \ lt_temporal_decouple/src/lt_temporal_decouple.cpp \ lt_temporal_decouple/src/lt_temporal_decouple_top.cpp \ lt_temporal_decouple/src/td_initiator_top.cpp lt_temporal_decouple_BUILD = \ lt_temporal_decouple/results/expected.log lt_temporal_decouple_EXTRA = \ lt_temporal_decouple/README \ lt_temporal_decouple/CMakeLists.txt \ lt_temporal_decouple/build-msvc/Makefile \ lt_temporal_decouple/build-msvc/lt_temporal_decouple.sln \ lt_temporal_decouple/build-msvc/lt_temporal_decouple.vcxproj \ lt_temporal_decouple/build-unix/Makefile \ lt_temporal_decouple/docs/lt_temporal_decouple_example.pdf \ lt_temporal_decouple/docs/lt_temporal_decouple_example.ppt #lt_temporal_decouple_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/lt_temporal_decouple/build-msvc/0000755000175000017500000000000014342422106023746 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/build-msvc/lt_temporal_decouple.vcxproj0000644000175000017500000003155314342422106031574 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/lt_temporal_decouple/build-msvc/lt_temporal_decouple.sln0000644000175000017500000000235414342422106030672 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_temporal_decouple", "lt_temporal_decouple.vcxproj", "{B1CE1D0B-CDC0-4207-849E-9C25335EB88C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|Win32.ActiveCfg = Debug|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|Win32.Build.0 = Debug|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|x64.ActiveCfg = Debug|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|x64.Build.0 = Debug|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|Win32.ActiveCfg = Release|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|Win32.Build.0 = Release|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|x64.ActiveCfg = Release|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/lt_temporal_decouple/build-msvc/Makefile0000644000175000017500000000072414342422106025411 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = lt_temporal_decouple OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ $(OUTDIR)\td_initiator_top.obj \ \ $(OUTDIR)\lt_initiator.obj \ $(OUTDIR)\lt_synch_target.obj \ $(OUTDIR)\lt_target.obj \ $(OUTDIR)\lt_td_initiator.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/lt_temporal_decouple/README0000644000175000017500000000041114342422106022555 0ustar carstencarstenThis directory contains an example of a simple TLM platform implemented on top of the blocking transport interface. The convenience API is the same as in the example lt_min_system. Using: * cd build-unix * set SYSTEMC_HOME environment variable * make * make run systemc-2.3.4/examples/tlm/lt_temporal_decouple/docs/0000755000175000017500000000000014342422106022631 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/docs/lt_temporal_decouple_example.pdf0000644000175000017500000014755714342422106031264 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xSn0}W1Y3V<,T$M[D3m &u̜9s Q w}uWi~@ʄ?P{LƲ9q請Uy:b܉[ 2ې88j &eP-a&$eAj~x/;EtČC-J 2n_}jim^gQzX F kմJFe=("O^}B#.Q2]nOygCA1 k*7DaJ+JQ?ICrݨ)X4>|N*H vTأ$ʉ} Sy<Õº2E? ` )QR Z[狔 6.qFH}ZΧ.JfiZ/ո',ә n3h"#2 eR{CI(}oDCE,ȳݳFK8͌^dij٧jp0H|QOyLt@ТvPSg>/x~B@K Ne1Gg]u+^ -ms:|HwKu}P.ff9-)q}93ʗP©֥Tcendstream endobj 6 0 obj 638 endobj 14 0 obj <> stream xWKo7F{_A Go6j-ڠN-[%ٖӦCC+-X g΄$<~21_u7UlߡG%YwE&s=/׻ 4ΒF)&ɰ~=gF--z]7߽dN9Pwfbf] քY ()Z>ٓB9z WlY3 tϤo" \E7eePEӖig. f@Y!CY[5 @}"!9["GB<~tGCJ UC7i! w^Z00#=p9`AXcIXZl!(Yd,,F( i B !=,{CY済QfYu=!|ꄲ2B=^Yؚ񪲒m?3̃?p7lQ$ ULy&aV?ae<[7Jf~cUy5%ȦMdlTcm 1*\NL*rbhxo$=%'hOO֯KH u8.j+qۺPk,OOl=V2ضD-hm_I++B␂p&!9qn+Useq(?qzv Wݘ5PXC`O9zN]uUknaCWsUY`Pzaa^T0rf2%b|A[Dzq/6&:endstream endobj 15 0 obj 1347 endobj 27 0 obj <> stream xWYo7 Fm#}GMUEj$(CSE_J3Y w1oHQI66ۃEuUYc,2r笢[x\>NQ%NF~՛ffgbz ~v 9iXlvv;[y.kC3zg.sڢ6T߈2hc zhP{/4HުBpR3LuIrlU]vb ^de ^T7xd,+;v^19*,EG$>Xq<0m@a)^3`?hA3CV}xM:?jfFSz$.zq4IC8FT6̠k12# %odS30 d%&&8vjݨг0 HV8-ZK%`bqLrLLA)# Az[D Q[e%=Ex@f&^:baZ|$B!.HzL/,YR_5AKV ۾NkFILR$jeutcC5A;)y7SѰR0ie~Es]=KAgQ]w[yA H'u/hjH:*p!tKov&Ub++ɱV`[L!ӡw^h RZHB9b̫mV "`8@K5HO1'JѢK56Ӣ;,h zW/6-,/eO߮t@Z+.{YE#uᇼC(Id^\h+ ^)ez i"VK|K)򨱀,898{XL84Vz؏MJ8B23QDG޺Z$4]h4?G-5 rW=dYj& >ސ2!F nH:F&:<)tHuimYG,R=[3dJ5mj^3?ogel)\#u65͉owU-]9"OޅG$O!Iz\O7rFr`LߜW. ǧ澓Nsq$h9"t]>w!]Y&s*o3fa?> stream xUN@U_+q)_^ۢ TZ*PڹA|~g SQQxg̙IKEE`^5Bҭ"&<^/# kcMnKr5"ӧ>cM[qC>${({r"=}Ly3۔Νiz3&iyMߖV\Z^ABX+Z[irlYXn Kdb\` + Gɝ`\ "Z-=DucUlo8,v fB z ~KF#;ꕐʶE-]SYQ@?ʏ T]OJw/2{S?Aٌ6)#T )P RDF|UjX0RMRWDYzʚ``>!:F,BZ>ZGц{Qblu9vfjtBk{M!e>k:AT Dl~5eh@YK :yDlڢu ޠ/ED]l@E7x=8"M] vTі8 w ^dZjx%d-?Hzm_߶36ehq+}endstream endobj 37 0 obj 658 endobj 42 0 obj <> stream xXn7E_+q׀h|C.hQh+ 0K]H%;.\ih1bsrԜyI|YT:_Fd¯EE^UPV0y:z{h|NsFnq՝pFϿg_ Mϗ)z'zV2QO3 Z \);T Miլ[8FAD`ƠS|p[\!Hl᪘pWOeCk:y+ֻcm-[-lM.cˈ<|#M1~yS74-Z=Ɣ4~M@ev ^#whEn'q&n{,'J;kќRfކ%rҠv~14ATKq["-䧫VkӥBBY5=x'a:#$tMhAhGM~7/[PtP0f yCc *h-~1/"&,voBovIlc(n1Ȱl 5N4BA%qX/t,Lv)~N([E 4v#p;ZVP1ΌHlK,G_k{E%V=6T8n͋3UlL s>7ěͼh@>TrⷛaχG{bTu酓r^ rHEn, /) )uVo %M(oj֌F.YuV/PH沈nF=Uw2 wONVb|)NKX//Kr5l8^P=]4D#z[Nvk^di^ oĚz9^NM S;"89gޯ|+1['b4\~b](} ʂ>T ўt]HxI.>F9?+Z }[ \4endstream endobj 43 0 obj 1461 endobj 48 0 obj <> stream xXYoG~_я3}D "" V"eG^S==}N]u~=7`q?uG)fY]VUm'vQ-qzmC0))- ۬vRyRqtbo2]hrzFL@Ea"d BE-u4 MyC4Vԟ5׼R^x,R maUa%{ mjWFF`-1Cʌ@e=4 B)5KMXPcmn'W&X W9x SF#hZ x8yH]kWj)Y'3-5KK!b Q'KɢL!eV>W#ld8 _ eb^EOzRhÂR&!lq>J Ӹ1[[W }#sSN,lܕOS,P"Iܙ1&xf۴L[ -%F.-3%ǜƍwgȜmJ.$@ӡ|3}^JߗaXA!"}dR b3i X5~lr@4SG[u *E"ܴ pR0VnLdi%2:^cK(}{ \(jJ D EGK(G]a$D= ?7AX=7NJKSi}ҴmsC&*gqi%vέn<xʛ:9B@E#d=cW'7rS&8$ӽqΡ>JtČ=^e\} ,3D$Is&9xl,vJU)rV]2ϱS,gi$^E - e'eYkC| "҇2$='Y2JN'3vj77Nc墻3lJn7s#6pH4+˥8vI P,Rw˗`OTǨVcE'N*leIӲR:Pzg.dXŖrC/7/`k0 F<_d*첫 nRotN0vHB> stream xYYoElpI8iWBDCbK<,vx}oۻq $rTꚜ7 p;{Lq"R9iNoh0Ն9YΞl~u:Λy<|% pO(Y+b!=[.U_.3OS{m%6 ƹ Rob^~oSݞGGwq&6V2 eӼy)LmҎ n&r:4+wqޱuSBn?ܪ7ԁtN2/0PLd(S'Otq(,wyBǰzyIkee3u6tEۄ&BF&F:K? B2Ӽ1Q*U3͡LbS98O4/6ڳ5L!daЛG 11? =q)1PZ&V82]d^ a`M0pW vҘzF50XgQA߇`6ۣ )%Q;:i3>,FdZ }>}\4Z7R*5En?SgCN #Wc&O ""3$q<}<c6!EHKW\zFCqØ߯CWIb^}A@aBI?&-mdH&'Z|216DЎGzK_'8KGQfNWPendstream endobj 55 0 obj 1795 endobj 60 0 obj <> stream xY[o\I,, ]<4+"b6 8e3|>O}'V7U_]zrՙ33 +n_;_Q'?/ZE}Wݨq7dbͅlTBt b}*7|?~]ViOM⓳Е;˃qs,Jېl1ui ?Wd|}1wc!UftCzmf Z˴IEu9o(?ì3Dcb-yG 'ݭ.iX:;*zUy3F82WtS.u4HmVN+YSrEBrΞs0bİB[x?WApNȷ( fKx4U Q^kVa`9M#!I|C!|[YEG;&t\uqovEZ&7u4hvip[]9mtKi0.Ӏ # _ cP :貢+Rޙ +u׻ ԫ ,'uc]&-MA\l%v1dӊUe8]*h Wɘǚ̦HĬ$:X4E lw-~K_aBBw0F$4'B6O(!, FƑC4lP77$;?YohH8bxD pzrKDW5?GlR7q@uFj~` !E؅GC5qoM,?SG1mKWk@- UiL}Ӷa^a{vO'1NbC(DrˡF8searflC>*jJW!2`^;,aO֍SٮMw>kcWʱ :l%G 9$\ -Xp~pZe"%Aؘl9p2P)i.E=CVv.rJ:4/?Y+c`u,/P k*m<@\37xplwC</ך,JTw>"Hsth<ܭBhfb }Ŗ6U's Jq2G%n5Lh]WՆo+:E 7`d.,ʜ'+i)7cW'$4# ٝ3/jIyE༺95ѝ~5n%ːB{$`[vs`IH 5@RSF@W`$ޭldK *OzB4%IPr6kbQ|8B5BlUarJʒ zD~ɏqIH录_5,QC }GԦf̽fpNsR\fQݴ9,zR_Wt0&zZk%c %){T07&a\ S.8M2I-m!Pҡ6ƺ6S#\;z"IM!X8tv=XINV֛mQRǼ`G*~MoGyZFe"Y?C|φ:i3ׯ4$r<|^ gxь_ D?\Gx8z 9/$cF> stream xXKoF$ _2+ձa2 `AIFܥH.ݡB cuUuw;5hzq0Juo p׋6 ߇+~<߾X<^s{wƓL<8_֡7> [*l/^iM.8MutРlw-;Ѽi¯ fl?[{(/4LTW**ۥn|Zd;xE3)(R( W=o*Cϗ~Aw]SO(x*g42]%mǝ=X/h#.v-*[]߁Yd%jWˌM l3 g_n|F_ۤ-TGp  ihq6Z*߅ cZ}ZVg FJv+??\tJi$Kɫ`@Q>9Q@du-b*ė%8fOza6TjY>}Q2 ?ax} 0 q1 q'HෂւwLBCqoxs`2= iG  . }ӆ<4ѥLG0 2> }a1 _cR2:VНAC;հT܍a@ho}n>o>7mn4vDs= /Ao7Z'wMJiĕd cMdVcH)GdҬ+,?L:Ƨ@wњ}3 ɀ┛q9'9cI8oGGjF!;h=D?Y!m&q[5L1;y,/,+7ZUW טL@6Do&",ycMun:lVx ¶OMei[Yͣmf뙖1x&t%|ϴB=фU0#bm,d{/k뤖95t$ȱHPeANP催;rXdaʈu1/C8qBA*+#w.4Y ܔEwSA r^F1U٣ǡYӆHWE#p:F=1[gmB]8B8 \q1TO™ch E>#֌NK'w7y+^!#!QO4YBQw Ǟ;56&68!(yHR5 3ZEWʩQw_%\qLݏ32 bf qٶ(%r文A>⻂R2Lrl =V`,<>X?4`'!nQN!g/%jQ %oeۺ^p+J/dՕh96\L|4^矻0V52^GU"-cJV4a<XG@3V:l}sj|`*W un@MOsa/x<؋_Ћ6%^1?gE|yF"FFSX~s:62c_% Ey~— ?2l`Th\"ڞͯpv.s+gI$\~+U+wlJUGN[/n%un%_)Q6s&ɷ~)w[YȨ1|bNF+^!Ӟi H?qM?cU}GY>bO1A Mzq!q< v_L"ִyL$kAew:Q~Tܴv*Bn]mǰ{I\fʗr9֜ac1Ģ&57Z jk \J i檛xyWo$&Wm ΃5]c'1wU*muC5ئZ҄I5Uc$͹gnX73Z!5Ud.WM,N~sa_fw#u HW6ojTK^4t2?LM/?Ͻqendstream endobj 67 0 obj 2116 endobj 72 0 obj <> stream xWK5>$D@@S#o q Ɏā(v`&l?jlv^v}Uz1I x:%Dۈ,m:wpϻ_:YՆΏ݃^W N tY$K+B?.c-gŭimo [W4 ݯO,'!JӀwj~~b2h('kakx;I_.0MA049yz!(wɌ51$vx;FR X6<츇>0"[ wuFed}Zq qrf5p=Z(Jrhr(Yq4==.H^;v(9`< YF}`;&ab,C!◛,)X&FW1 :f#i39Qו3֌]%'3o䯈[ĝɉK%VISR|;ꥷͻ`vGhL)m%gMWf|tz6Ru&߻2|)KTM߻2|GXCmendstream endobj 73 0 obj 1455 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R ] /Count 10 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 79 0 obj <>stream x]Kn@ `IțtE`0 Eo_?.KW%{YoK作*z{@ށ<:D6H"U'@^yTUEkS8(`cȡ GEC (rh".cȡ FQCP9tA`Կ"&`_".h3`Й*,2uokRǶqmlyti.vᠱ endstream endobj 29 0 obj <> endobj 31 0 obj <> endobj 9 0 obj <> endobj 80 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 81 0 obj <> endobj 30 0 obj <> endobj 77 0 obj <>stream x|{|TչZ5=W$!$L2GBI2@&@ xn[=(VmUz! *X+"ڢG=r[|k͞>n9k=0BH. =˒Uz3"BUWot{B,w͆iLgBH[ՙbڞ;KjZhЍjGHlw^iUW^] ][{5Gލ]z;tLZauC!Z.r~;6KjTǢpU"8,PZR/ jq{N63wH@cmG=iApCZ T%홺t")zt'#'IN?e?">5,36sb=)sC;f:2f ץ@)1Gu^PodZ>VwE0W6/"p,̀ikQ?10Mޚ Y*>Y ~t^ ߴhiAO72i[zh+CZI#xI5.dP?}Z_5mSf0Z5dlm\Mm('QtBש|t`Dԍ0$3]n>W %K3hLn][۽p sp=E =M_4hD3&  jӖvj8(iB|;k50 TZfupР:Q\jPHp50Pd ^/|%y%l<~9sBρ%G3#4s=񅞙P$(HTEžHy C_8;:4~j~$~!5F|j3ݍN¤a{C?T&`Mk>wN9CwY 6lډ{vܳߍ+GVRWo#..۹[G-!Zl>(R Xj<(fN=w{<K,kZqgyܮ: 8edqyPz-Xl"0qo}a|Xm@؀(!FG ƑZy eN0'qf崺ajxFLͨ>ep_TW 4MNinǐ]NtDSr ]%&RBbmWJ7^I*zRуO 6qʒXW&0 GMz |ձ -t&r d//3e @&6B{5 B, H 8TV>c!\0:ϣ:Ow3 9RD!&R05kcGy9 &G:WV$Y+1F B`f3y?~z]93~0/}? %_:s{O?=teD},BVj.El: ϲnUmiMӚ\,xZj^+ \\,2 $EM03hJfb{ywM1g?h3u_NɏqѶm039 *BIUB{Q{oٗ;[׸-!'JI+*R99LKejslX8gZcf{UnTV$}> `|@Vq._jo۔|eȆP|fƛp%7N. [[g,- ㋞7 IOQHj I Sfc.법bp,Rf)D} 8"-3c20RKJ *Kҡ$ t)Z(#,- BRL g֫,pK"$^ pt@K 3 +ŏ $AdT5J4B%9 8>`J b@,l(qdP4fE|FqV;}v˰x"ca캻sS{k?erbs\ ޏs{V |yn?5%ᡱaF: J$Ҡ+VҪV2 1Oǒ` & h}Q i.W_e[L٭n6Ų`YJ42A'ؤl;}L߫VQ4I9-V-Q/հW0fXÙ.5rmqBbBRkX>aH Cm>"LOHY" iɞ{ &P˛:" JnO(X2"E.) \kP.^Gȗ4kؠ|~#c, 񻎥mMzf=w{1'` \`GT62-Ҝ@f1lQ:H!*ZBrլJiiR(?O542U<#Y(/ga¢[ECA%P?Gpn]e~,4!QYqSuRWdt*0mX!1}sf-Zl$ܞs*ˊ9-^OU<|üx\cN QEzh:#յz|W0T*`ul [Jg_B7Tbu\p 6=pjM`̽Pm]_gÑ ^c* TU"5PEj@ CVyVמ<xH  4i3ElM'WYF5Y۲곊dĬ*dGIΡOK\\Oqosy i?YG3j㟞8I6~5VGqUkuLP;\\}y[[޽%SP2$ \F OCq kY;,Wuk5}0HTŒD0#,Wi VuDg u"NKt"?IJuZ,J D= Z4"քp&Qn1I>U0_#=.~pe~wԊEGZ|SEY0OTj|o}ټ`cIOOGX)y Q%e՗PZcoXy:*be LD^F>q+E<"q*]nOLXcdRjOi-PZR)b+Ϥ_6/oxn0(H6~// д}VEQ+H 2+)ܱNmLa.ٻ1S9LsTiVG8"=Z)lJ7huLD:#'e(@1tVxznDsG3cx`>P-i)fʆ9cS…1{~rcZKKv{R|&!G]FđMNQ/ƜJ HP6IUvHogo,TS4#XU5kWYA@8hV Q9v ST ;ҲMg>k8o^~mθ}^A(ٖ,\ۊ f5'V\yw|zc،l_snt+'zc)G ^>q[\%>ZRclaRaVK5Pש6!^3 :'ϡ0@fK BRR 4Hb W-Wo0ȗ0ۧZ 4T!pI1.>z 飧X&닧|IQ9`~UR`{ӊZ(\MW93JXڄP`*e#M>HO;)@)rsh@,>䋚RX'==\&,a4V0mMf޲7Ͻke׾sNϞcz/N6 Jw9mCy(2}l:N8;N#ӣ˺l$[ ʪ3NW^dQ \,-D<fŲevt2\o[NM^6$ 0d !#1I[0ّ5Ztz\Z₋"OrЋ6d) YJN-k$ЈJl^dlE'\4)#lH~ 罷vw]tg\SQdVNux|kZ/ .\؈$V?l0MD-JeW} QCLi _܊4F%ouJ 長kJZ#YQv;dűh(HTX(/xcX*j<4.^=hOT~sM)#:A򺱺LAw`F\O9RDHv./'x$]wW(\]O?QHwA> eKy\IErg*RPW\] '(r"KyKu^o$|N8~bB:#Bu !ֹ[rv;^pС7Z!aD$u.W hj'4QMPHR:x){){){i'ooXarH-yᢓdFd'h4!1N(XQdM~ws~8v<7n_zmr#oϯ?p٥}fg LO~G=1-Pĩ%%+8o~ysO] 7LX'ʴiDecԑgCPG~95aNgt͎&7 kɌ9睷,Չ]"nQMPZm֫S2c\i ZAFHFj69Ĭl0;@utNF{F4 h4N#$$ㄫm:g6+j_8{,!fۼo4ם; = rb ȸVXɑ VM@h茈)cN2q4CIqN) HFej@ q i9DՊSx?9L&,a$ kLq9kVVA!HN,(iO^A{U =<{e.ؓ劀o5xK=(5J 4(f KU&Ll,O߂)O ˄MGqutKbUkxtx6_"+XCĄ @IQ&aJFͪڙN5VF :tJuHf^"7j)$؃j2I>qp#)GP@r3g8Was=;].XmƯɯ6vllg0ys9~rK6:WV_ZZc;p4{kϿФJ8)Cc^ϩxĪZd%7'OcWdy\q%qeǕʿUMn|rN&kM $^jXmP~q`t#L׳XrPb32)+\J6)+)+ii &1$e&NNpOY=#k?;7.kfYbaජ(SJE>_\43kӏ$/AVZIMWZIT*+clƻhEwʪPkr6ySu42u4|ug!rXETQ$<Lͳ x9)_ 76i/k-vbLS y*jp(wO*%Wpݕ*36!J"U%.vh_oL]sDzϭ]ag 'Ɏ7ţh"HV1R592ʦ3nea >v̌V\9|,RٿaI={dK[隚mkbuw_0Ou=nhnT/k6%l޳s„s0w#7 s%?yUknZ;8RsiDWj~_uAGFReY-I7fC7Myi_rwdG(Y7Č$I< < _EH(;8¯a4}`1̜Ĭl=8s]xf]c/+ݪopPk7$6D 8XyS!#'d_Oe=@K'4tךMh.Y&򱁑pA&بQnW^bxpA@0 N|2&^i&<@ ZBFWM2%'e,P؏/s a:7qm-ݛƾqUYx~ [Os=z'GO)?b[*w?G<>P<ܮnPyF{[-lxLa06=nNXϋyx^> endobj 78 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T19:08:27+02:00 2012-04-30T19:08:27+02:00 PDFCreator Version 1.2.3 TLM 2.0 Loosely Timed (LT) System Example - Temporal DecoupledJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 83 0000000000 65535 f 0000017134 00000 n 0000050457 00000 n 0000017011 00000 n 0000015053 00000 n 0000000015 00000 n 0000000723 00000 n 0000017199 00000 n 0000020134 00000 n 0000035364 00000 n 0000020074 00000 n 0000020104 00000 n 0000023129 00000 n 0000015247 00000 n 0000000742 00000 n 0000002161 00000 n 0000023159 00000 n 0000031031 00000 n 0000026069 00000 n 0000029082 00000 n 0000035523 00000 n 0000045663 00000 n 0000035661 00000 n 0000028996 00000 n 0000029039 00000 n 0000033417 00000 n 0000015443 00000 n 0000002182 00000 n 0000003544 00000 n 0000035023 00000 n 0000035817 00000 n 0000035296 00000 n 0000033469 00000 n 0000033512 00000 n 0000033555 00000 n 0000015639 00000 n 0000003565 00000 n 0000004295 00000 n 0000033607 00000 n 0000033650 00000 n 0000033693 00000 n 0000015835 00000 n 0000004315 00000 n 0000005848 00000 n 0000033756 00000 n 0000033799 00000 n 0000033842 00000 n 0000016031 00000 n 0000005869 00000 n 0000007288 00000 n 0000033905 00000 n 0000033948 00000 n 0000033991 00000 n 0000016227 00000 n 0000007309 00000 n 0000009176 00000 n 0000034043 00000 n 0000034086 00000 n 0000034129 00000 n 0000016423 00000 n 0000009197 00000 n 0000011275 00000 n 0000034181 00000 n 0000034224 00000 n 0000034267 00000 n 0000016619 00000 n 0000011296 00000 n 0000013484 00000 n 0000034330 00000 n 0000034373 00000 n 0000034416 00000 n 0000016815 00000 n 0000013505 00000 n 0000015032 00000 n 0000034479 00000 n 0000034522 00000 n 0000034565 00000 n 0000036032 00000 n 0000045860 00000 n 0000034617 00000 n 0000035449 00000 n 0000035742 00000 n 0000048538 00000 n trailer << /Size 83 /Root 1 0 R /Info 2 0 R /ID [<066E2FE5C8C54177414ECC7A066DA534><066E2FE5C8C54177414ECC7A066DA534>] >> startxref 51289 %%EOF systemc-2.3.4/examples/tlm/lt_temporal_decouple/docs/lt_temporal_decouple_example.ppt0000644000175000017500000073100014342422106031274 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`N( */ 0`DArialr Newman<+x2 0x"D-3 00000ewman<+x2 0x" DWingdingswman<+x2 0x0DMonotype Sorts<+x2 0x@DArial Narrows<+x2 0x"PDTimes New Roman<+x2 0x`DTahomaew Roman<+x2 0x"pDCourier Newman<+x2 0x1@.  @n?" dd@  @@``   #  4 F 09)?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8  <4dddd 0g4^d^d/2 0ppp@ <4!d!d 0+<4BdBd 0+ NO ʚ;j8ʚ;1)___PPT12 %h___PPT2001D<4X___PPTMac11@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography ___PPT10D-3 00000ewllp2 0p"DCourier Newllp2 0p1 pp? O !", / * # % 40/pBm  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> @N( ԩة   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  N?Rectangle 4P  T Click to edit Master title style! !.  H?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     Sv   N,?Rectangle 6"pjPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!v ` drs/shapexml.xmlVM6 x-h܅ޠǂjTI[ ):AQqC̛yzP)֕F'ǙԙK5g eLQ:^SW3lnZ'|}=v]pL-5 c+hNj/<U;J([+KVv[YV FgZT{/3$$n4ֵɈI&b ?˃iޢ>bZH;q!SR.c, =%FX/-G-q yءr09N7@DL.1E0#pzװQʃg-,p+ToL;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!v ` *drs/shapexml.xmlPK-!Zdrs/downrev.xmlPK_,    hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlX]o6} qCmԨ]H Ei$;lk͋#{ov BP: &Sj2aPb 22r`0|u-Ayzţ7.AOo<pO2&# d2& 6=4_d)L1`4veyVqGv h#2W[ƍ{$JFb!՗"wR0{S`@l2|d AZp2Bn)f4C),م7`)i!78ĀB$" .rCˈ0qvtx0,gn!1~o柊iG#ۺx:nUwt0̆lw|#:]U %!B´WKhy,|{(V)+3`ۅ>[=CnLm HqBbqwn倮C "'<x# xt @<N$P<8]H(prP<8]2xМN ޴'I!6K9q+hx:mkk~r+BٷNcfHUt Go?\'Iw6%_rlIsWHNm)0oh c-N>xLj:fGp]N+<. cY޳<(W1t,eXzTN/]59Zʳ;s)HSMkWjڤ EΞpBUS< iIĽI,聦3g2{+%Vfԩ.=벣_UgRzp#ن]r]]ᐵHmj; " ﹺ҇VLVOps2O1Ηu+XSmCg[\H$2q ex&s=]i79Mto+)NݢޒKuߩ?_WIU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK! ,!drs/slideMasters/slideMaster1.xmlZ͎FG;>f0fi#Yrnp& jG+Di)9%oyyTgqvli5fCQnQ]_u] iEXGAsIzԧsy}%[HJ8SD8hMbo&|D4vx y f 1lޛ2\AOSbyvl{[ #dI-qbve/ cpשAKF/ɡ(f\A6 x+x[euxo2Tun4]oi,k}}8T)h"(# =5Rjk8Y3jEmn.AR%4qwOJ T[EM(tP{j-4 v_f+BKKwJRߨU9_MgQEgQ@1a` bmkpDL`&Th TO?oR,M17w~~o?ejVN:/ e(i<w6/mXݍƋѰ$:TcTU7M_ Wп<;TTyu-q'cmSgoyP;CvE4]Qi1ky*?PntJZMqjӳn-gv7IVS VNi`t8IU]]=-nk9mSeGË/+;z Y5A0 B7M 7)Fb؝@qܳ5")Lm`A 1r}k$8BJwNW:9 J{42lR->-͓SѰu tV͚-[рRP4lh' k)΍Y??[JZ\|&y/PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-! ,!drs/slideMasters/slideMaster1.xmlPK3 TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> 0t"(  t t A"??"system_c_title_9Picture 2system_c_title_9 t Nwz?Rectangle 4P z T Click to edit Master title style! !. t H2?Rectangle 5P0 z RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB t s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK! ,!drs/slideMasters/slideMaster1.xmlZ͎FG;>f0fi#Yrnp& jG+Di)9%oyyTgqvli5fCQnQ]_u] iEXGAsIzԧsy}%[HJ8SD8hMbo&|D4vx y f 1lޛ2\AOSbyvl{[ #dI-qbve/ cpשAKF/ɡ(f\A6 x+x[euxo2Tun4]oi,k}}8T)h"(# =5Rjk8Y3jEmn.AR%4qwOJ T[EM(tP{j-4 v_f+BKKwJRߨU9_MgQEgQ@1a` bmkpDL`&Th TO?oR,M17w~~o?ejVN:/ e(i<w6/mXݍƋѰ$:TcTU7M_ Wп<;TTyu-q'cmSgoyP;CvE4]Qi1ky*?PntJZMqjӳn-gv7IVS VNi`t8IU]]=-nk9mSeGË/+;z Y5A0 B7M 7)Fb؝@qܳ5")Lm`A 1r}k$8BJwNW:9 J{42lR->-͓SѰu tV͚-[рRP4lh' k)΍Y??[JZ\|&y/PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-! ,!drs/slideMasters/slideMaster1.xmlPK3 1_TLM2.0planH 0 444(4( kO Mi 4)  4 `L!y˼y˼?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn8}_`"MƨR$] 8E)H|PӢ(8˙33omZ#VڇLN^жpec2!*[*V?v \aeFu+iVEQu6GǯGj)ZtsORq{є{|q&U->1<-NhPK7˜bXԯRzF߄!{>m o{*}Ƿ "REv.=z^p%!ˀlEJ\S}t@AM7oM츪L[z"p5՛( |<a&kwt$ eңtZB$.ȝuw1Ǧ9{9"cmr Ӵx%PؒUjLyU!yd}lX[[ܸrKrH hvYWh@ R-99;c"0g/O'ooFRLF)xFsm.w{|VA{UğtJ0"n1&m̄TKNǼKzgx/4bKܤY8pB&NY .5A3.JV=| I%6*w0:C`b^Ąd`H]}]+Up([7{i_ՉZp\yE4XmӺ*ImO>-b`Nhfm`݂%)J&NrP'K4覡gs\E2ŗ~)R4>\yމ*еoh5TȪV>hfŭZ{UE:@ g7MHW_PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!3]drs/downrev.xmlPK.,     hdman`  Arial&Monotype Typography  `   ab0|ay>z/  4 `y˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!%zdrs/shapexml.xmlUn7}/ Z8|u`uZ@5A\ܒ\]=C$'6҃4s9sfMkJ-Ø3e}-ǓkBYU ?}즡cxlô+xc7lT+)VD*(E֌NQ+0eWnIOg*3+Zx}V1hP/˜9 C,RyF_>Co{n .TH)aq!*rD9(g :'+ DMc ;]__N8|LD&quzs5wWC,@rGP=JrYQsl)Gc58HȒVGm>TƯJ*Qhe$hl¼<>6,B--n]%%~A܅?|? 8 4A^qf~8ÙS}Lj$a%}Ňϵ3$)hSn NeܢnSq1q$$LYydbf2eFd[ r 4Ճl%PȓL!Cndi7ym@xN\_m+$@d/\ D Ǭx@+E a:<t \ƌdiVw7B'wuQM_G?ĶdNw~iyͅ :@ nizPK!gdrs/downrev.xmlDMK1E!z 4 H ?Rectangle 4    4 `7y˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!k6gdrs/shapexml.xmlX_O#7`BA.\+PD89^komoU*uT(T}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn7}/ Z8!6꤀jfomEJ"g9j@S'EL,k$U̺-Mx %@ ŷ "R]me=z)NpզgӬlf_Wb}sl:d5t[-"&jr 1fC02TpBj"AzpA|cͰuƧp,Yn4ˌn>Tb߶J*Qhe$hl¼<>6,B//nn]%%~Aܓ(^%Yqf脫!q3|}cΙVJX-xY"ND>״"NmO>B{ɺN2bB-Ƒ$[+3fUbjo2%DCcdY rFS`DDo3"^Hug<[ 7y|d;)!]gO,o:ATImDa gIs$_cS;oғRÓAg Vd qouw+p{Se#n4-t7$S|y~@2Mn%X*6d-$ZFrq/mzNj!|Pmɜ^% u>d7!мPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,     hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 f\4y˼y˼?Rectangle 7"rlPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!w$) drs/shapexml.xmlVMo7 x-Iu VZ@5A˵[}Cd'6joaÙ7CNZWgR&+S?<[#Μ:ht͏?&b8ݤJjnt#KޘJjƖ>++^x\TU3hnU--Ҳ"Kug8L>1<)Ɇݘa,LuM,ĒYGyoIwɩf"s3mNjDJTt*K?jaoN#pCld jor[^1ypht9;&|4F>b"0¢U?# %f(j>T̝΂k$t<ϑ<4,Bdi&;k|TQ.tjc3g{+ G_4$1z`/3;;.gF} kלgJ^U)hx(lǃfmS(Wq!$NuIB=aBR,̨݆m,kA&SS蒬ȉ3Ȉᅚ)vC5Xhg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!w$) *drs/shapexml.xmlPK-!1[drs/downrev.xmlPKaq2 , 4   hdman`  Arial&Monotype Typography  x*   ab0|ay>zB 4 s *ηo~ ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!; ,!drs/slideMasters/slideMaster1.xmlKn0z,?!rP I@ӔEոGmyoW7Pƚ̷&%6\2{#ƙ3}8UTlq^u܉ެloz(YvY y fI~}kC+ ٢x f/@_xvK͎EzaUA=W_W?_INoLϤerz<3mDa48@y]$#PN<GClt:1<(^nS8L_rF߅9sʚ,$[ 9+(?T  {]}9U@V ήX*^@p׌^@Nq(es ֿyPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!; ,!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[TLM 2.0 Loosely Timed (LT) System Example - Temporal Decoupled?? 8 C 0e0et?Rectangle 3 @ P  =Jack Donovan, Anna Keist, Charles Wilson ESLX, Inc. June 2008>U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10." 0 &P@(  @ @  x0e0e?Rectangle 2P   8$AT System Example - Annotated Timing @  x0>0e0e?Rectangle 3  &The Goal is to Illustrate: Application of TLM 2.0 in a real system Annotated non-blocking (NB) option of the non-blocking style NB annotated timing has been referred to as "1 phase" Simplest version of non-blocking/AT Possible Applications: Architectural exploration Early software developmentbfZ5fZ  5 X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"!8 0 7y7` H#7(  H H  x>0e0e?Rectangle 2P   )Example Block Diagram H L>?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H bx>?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx- H hܤ>o?Rectangle 21p ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Target Module (lt_synch_target)^  GGgG V]8Xx H hb>o?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router (SimpleBusLT)J G GG  V]8Xx2 H h<>o?Rectangle 23` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  $Initiator Module (td_initiator_top)^% GG gG V]8Xxj  H hܼlo?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)r! GG gGG  V]8Xx;   H htgo?Rectangle 25` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Target Module (lt_target)^ GG gG  V]8Xxb  H b?AutoShape 26P@   hdman`  Arial&Monotype Typography  < V]8Xxb  H b@w?AutoShape 27P`   hdman`  Arial&Monotype Typography  < V]8Xxb  H bx?AutoShape 28P    hdman`  Arial&Monotype Typography  < V]8Xxb  H bl?AutoShape 29P @   hdman`  Arial&Monotype Typography  < V]8Xx6 H S ޽h ? ̙3380___PPT10. ""  0 mepP(  P P  x 0e0e?Rectangle 2P   3How to run this example (Linux) P  x0[>0e0e?Rectangle 3P0  ZSet SYSTEMC_HOME cd examples/tlm/lt_temporal_decouple/build-unix make clean make make run >[A AKA,,V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt"b 0 Td(  T T  x0e0e?Rectangle 2P   2How to run this example (MSVC)& T  x0e0e?Rectangle 3P0  ZOpen a explorer window on examples/tlm/lt_temporal_decouple/build-windows Launch lt.sln Select  Property Manager from the  View menu Under  lt_temporal_decouple > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run,PZ/A C A  $$ ((',,00 4488 <<      A $$88P#7V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"7 0 X9(  X0 X  x0e0e?Rectangle 2P   dExpected Output (expected.log)* A X <'1  ]A.... Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_synch_target.cpp: 0 s - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 80 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s .... Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 sBB  <-_ J  6 X S ޽h ? ̙3380___PPT10.ntDw;" 0 ZR33\4(  \ \  xx0e0e?Rectangle 3P   &Initiator Module yz P  \C ,Group 129"P     \C ,Group 130" & .\ PP?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /\C ,Group 132" > P  0\C ,Group 133" p 2\ d3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3\  TB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1\ T?Line 136      \C ,Group 137"  # (\ P?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )\C ,Group 139"  > P  *\C ,Group 140"  p ,\ dT3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -\   B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +\ T?Line 143    \C ,Group 144"  $\ P?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %\C ,Group 146" B &\ T?Line 147P P '\ d̿>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p \C ,Group 149"P p  \ P<?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !\C ,Group 151"P pB "\ T?Line 152P  #\ j%,>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ \ jxo?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx) \ JY?Text Box 155p j%vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  5Initiator Modules (initiator_top or td_initiator_top)L60 P2G!GG,  V]8Xx \ ^$?AutoShape 156p V q  \ ^ ?AutoShape 157  \ ^ ?AutoShape 158 P  \ ^$?AutoShape 159q Vq 6z P   \C ,Group 160" P  \ d Y3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB \  YB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx,   \ ^4-Y?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  6TLM Interface Module (lt_initiator or lt_td_initiator)67 6GG,  V]8Xx6z P   \C ,Group 164" P  \ d8Y3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB \  @YB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  \ ^4TY?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx \ dliY>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d(rY>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d}Y>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= \ dY?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> \ dY?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx \ ^ ?AutoShape 173  \ ^ ?AutoShape 174P \ dY>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ \ P@Y?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB \@ Z?Line 177   6 \ S ޽h ?o\\\\\\\\\\ \\\\\\\ ̙3380___PPT10. ""EJ 0 II3EdH(  d d  xDY0e0e?Rectangle 3P   )TLM Interface Module  x   dC *Group 35" $ =d N8Y?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >dC *Group 37" 8 P  ?dC *Group 38" p Ad blY3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bd  DYB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @d R?Line 41  x    dC *Group 42" ! 7d NTZ?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8dC *Group 44"  8 P  9dC *Group 45"  p ;d b Z3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p dC *Group 54"P p 1d N9Z?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2dC *Group 56"P pB 3d R?Line 57P  4d h%,FZ>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx d fPRZo?Rectangle 2j    hdman`  Arial&Monotype Typography  > V]8Xx  d F4ZZ?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (lt_td_initiator) J( 2GGG V]8Xx  d@ Z$?AutoShape 6 v0x P   dAC *Group 59"`H  /d bmZ3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0d  txZB`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8XxZ" d b(yZ?AutoShape 781H 7 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8Xx d \8c?AutoShape 807  x   dC *Group 83"XB -d R?Line 84P P .d b,Z>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   dC *Group 86"c B +d R?Line 87P P ,d bHZ>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx d \8c?AutoShape 90^XH  d@ \8c?AutoShape 92cH 7 !d P(Z?Text Box 105[r0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   b_transport*     V]8XxB "d@ Z?Line 106M; %d P Z?Text Box 10970(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &d PZ?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'd Z?Line 111pvxB (d Z?Line 1125'o/= )d JZ?Text Box 11350(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  simple_initiator_socket*  V]8XxB *d@ Z?Line 114[+D2 Cd XZ?Oval 36< ` 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  quantum_keeper, V]8Xx^ Ed 68c@  < 6 d S ޽h ?_ ddddd.ddd,dd dCdEd ̙3380___PPT10. ""C 0 CC(/hSB(  hA h  xZ0e0e?Rectangle 2P  Z u-Target Module (lt_target or lt_synch_target) , 9v P  hC (Group 3"P  ~   hC (Group 4" " )h Ld?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   *hC (Group 6" 2~ P  +hC (Group 7" p -h `4Z3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB .h  B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB ,h R?Line 10      hC *Group 11"  ! #h N?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    $hC *Group 13"  8 P  %hC *Group 14"  p 'h b(3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB (h  <1B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB &h R?Line 17    hC *Group 18"  h N=?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx    hC *Group 20" B !h R?Line 21P P "h bxK>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p hC *Group 23"P p h NU?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p hC *Group 25"P pB h R?Line 26P  h h%,pa>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx h hko?Rectangle 28:    hdman`  Arial&Monotype Typography  < V]8Xx h H{?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Target Module (lt_target or lt_synch_target) J. 2GGG,  V]8Xx h@ \$?AutoShape 30P-" h b?AutoShape 31&    hdman`  Arial&Monotype Typography  w b_transport"   G  V]8Xx0x P  hC *Group 32"P h b3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB h  B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx"2  h X?Oval 36V0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8Xx  h \8c?AutoShape 40   h b8c?AutoShape 41 h h N|?Text Box 43.(J___PPTMac11$   hnamd` Arial&Monotype Typography  <___PPT10R___PPT94,(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  $memory_socket (simple_target_socket):%  $  V]8XxB h X?Line 44K+ /h 0̺s> ___PPTMac11x   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography T___PPT104,___PPT9d\ lt_target and lt synch_target are identical except lt_synch_target calls SystemC's "wait" each time causing the quantum_keeper to "synch" during the next check in the initiatorjE!&   l   46 h S ޽h ??`hhhh hh h h ̙3380___PPT10. ""I 0 HH88lG( zSmM l l  x0e0e?Rectangle 2P   &Router Component Gx P  lC *Group 56"P     !lC *Group 57" $ 3l N@?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   4lC *Group 59" 8 P  5lC *Group 60" p 7l b3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  < V]8XxB 8l  B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 62P    hdman`  Arial&Monotype Typography  < V]8XxB 6l R?Line 63      "lC *Group 64"  ! -l N?Text Box 65 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    .lC *Group 66"  8 P  /lC *Group 67"  p 1l b,3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  < V]8XxB 2l  d#B`CoDE FQRUVW3fjJ?`8o@`8o`oFreeform 69P    hdman`  Arial&Monotype Typography  < V]8XxB 0l R?Line 70    #lC *Group 71"  )l N-?Text Box 72 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   *lC *Group 73" B +l R?Line 74P P ,l bT9>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p $lC *Group 76"P p %l ND?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p &lC *Group 78"P pB 'l R?Line 79P  (l h%,P>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8Xx(x   lC *Group 99" ^ l fd[o?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx l Fr?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusLT<2,2>)L 0 P2GGG  V]8Xx l \$?AutoShape 13  P  l \$?AutoShape 17PPP   l \$?AutoShape 4601P   l \$?AutoShape 47ppP `  l N?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (2)" G V]8Xx  l V?AutoShape 51   l V?AutoShape 52@ c l N?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx l V?AutoShape 54  l V?AutoShape 55   0  lC *Group 89" @P l b 3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 84 0 0 B  l XjJ?Line 850 0   0  lC *Group 90"P l b3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 87 0 B l XjJ?Line 88 0   0  lC *Group 91"P l b 3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 93 0 B l XjJ?Line 94 0   0  lC *Group 95"P l bh3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 97 0 0 B l XjJ?Line 980 0 6 l S ޽h ? llll l l l l l lllll ̙3380___PPT10. ""! 0 <C(  <; < f4y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2   4 <  xA4y˼y˼4?Rectangle 39 3  4 N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0  D[(  D; D f\4y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   4& D  xy˼y˼4?Rectangle 39 3  4 f- typical things   V]8Xx6 D S ηo~ ? 33" 0 0La( zSmM L; L f8>y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   , L  x$9>y˼y˼4?Rectangle 39 3   l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33# 0 @`u( h `; ` fȋ<y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z `  r0e0e4?Rectangle 2   >@ `  x<y˼y˼4?Rectangle 39 3  > *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 ` S ηo~ ? 33rPNV~(/43:@, P@é ޮOh+'0 0< ` l x AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne87Microsoft Office PowerPoint@O@ @ 8@p7&ZGhg  ,T%&" WMFC* <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkmnopqrstuvwxyz{|}~Root EntrydO)PicturesT'Current UserSummaryInformation(l8PowerPoint Document(ZDocumentSummaryInformation8systemc-2.3.4/examples/tlm/lt_temporal_decouple/CMakeLists.txt0000644000175000017500000000644014342422106024445 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/lt_temporal_decouple/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (lt_temporal_decouple src/lt_temporal_decouple.cpp include/lt_temporal_decouple_top.h src/lt_temporal_decouple_top.cpp include/initiator_top.h src/initiator_top.cpp include/td_initiator_top.h src/td_initiator_top.cpp ../common/include/lt_initiator.h ../common/src/lt_initiator.cpp ../common/include/lt_td_initiator.h ../common/src/lt_td_initiator.cpp ../common/include/lt_target.h ../common/src/lt_target.cpp ../common/include/lt_synch_target.h ../common/src/lt_synch_target.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp) target_include_directories (lt_temporal_decouple PRIVATE include ../common/include) target_link_libraries (lt_temporal_decouple SystemC::systemc) configure_and_add_test (lt_temporal_decouple) systemc-2.3.4/examples/tlm/lt_temporal_decouple/include/0000755000175000017500000000000014342422106023324 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/include/lt_temporal_decouple_top.h0000644000175000017500000000507214342422106030565 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_temporal_decoupling_top.h // /// @brief Top level for lt example with temporal decoupling // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #ifndef __LT_TEMPORAL_DECOUPLE_TOP_H__ #define __LT_TEMPORAL_DECOUPLE_TOP_H__ #include "tlm.h" // TLM header #include "lt_target.h" // lt memory target #include "lt_synch_target.h" // lt target requiring synch'ing #include "initiator_top.h" // "normal" lt iniator #include "td_initiator_top.h" // initiator_top with lt with td #include "models/SimpleBusLT.h" // Bus/Router Implementation /// Top wrapper Module class lt_temporal_decouple_top // Declare the SC_MODULE : public sc_core::sc_module { public: /// Constructor lt_temporal_decouple_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusLT<2, 2> m_bus; ///< simple bus lt_synch_target m_lt_synch_target_1; ///< target requiring synch lt_target m_lt_target_2; ///< well behaved lt target td_initiator_top m_td_initiator_1; ///< LT with Temp Decoup initiator_top m_initiator_2; ///< Basic LT (no Temp Decoup) }; #endif /* __LT_TEMPORAL_DECOUPLE_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_temporal_decouple/include/td_initiator_top.h0000644000175000017500000000725414342422106027060 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file td_initiator_top.h // /// @brief Top level for lt example with temporal decoupling // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #ifndef __TD_INITIATOR_TOP_H__ #define __TD_INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "lt_td_initiator.h" // LT initiator with temp decoup #include "traffic_generator.h" // traffic generator class td_initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // inherit from tlm interfaces { public: //===================================================================== /// @fn td_initiator_top::td_initiator_top // /// @brief td_initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== td_initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); /// Required for Hierachical Internconnect void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects ==================================================== public: tlm::tlm_initiator_socket< > top_initiator_socket; private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID lt_td_initiator m_lt_td_initiator;///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __TD_INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_temporal_decouple/include/initiator_top.h0000644000175000017500000000735114342422106026367 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Top for Initiator and traffic generator combination // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // //============================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "lt_initiator.h" // LT initiator without td #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // inherit from TLM interfaces { public: //Member Methods ============================================================== //============================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// initiator module // //============================================================================== initiator_top ( sc_core::sc_module_name name ///< module instance name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); /// Required and unused virtual methods required for hierarchical connectivity void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects ==================================================== public: tlm::tlm_initiator_socket< > top_initiator_socket; private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID lt_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_temporal_decouple/src/0000755000175000017500000000000014342422106022470 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/src/lt_temporal_decouple.cpp0000644000175000017500000000441714342422106027404 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_temporal_decouple_top.h" // top module #include "tlm.h" // TLM header #define REPORT_DEFINE_GLOBALS #include "reporting.h" //============================================================================== /// @fn sc_main // /// @brief sc_main for lt example with temporal decoupling // /// @details /// This is the SystemC entry point for an example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the example traffic generator will run to /// completion, ending the simulation. // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== int // return status sc_main // SystemC entry point (int /*argc*/ // argument count ,char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); lt_temporal_decouple_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/lt_temporal_decouple/src/initiator_top.cpp0000644000175000017500000001173314342422106026065 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Instantiates initiator and traffic_generator // /// @details /// This module performs: /// 1. Instantiation of the traffic_generator and the lt_initiator /// and the interconnecting sc_fifo's /// 2. Binding of the Interconnect for the components // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "initiator_top.h" // this object's header file #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 ) :sc_module (name) // module instance name ,top_initiator_socket // initialize the tlm socket ("top_initiator_socket") ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator" ,ID // ID for reporting ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID // ID for reporting ,base_address_1 // first base address ,base_address_2 // second base address ,4 ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port(m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(top_initiator_socket); } //============================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Mandatory virtual implementation /// /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Not implemented for this initiator // //============================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //============================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Mandatory virtual implementation /// /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Not Used or Implemented in this example /// //============================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/lt_temporal_decouple/src/lt_temporal_decouple_top.cpp0000644000175000017500000001142514342422106030263 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_temporal_decouple_top.cpp // /// @brief Very basic Loosely Timed (blocking) example // /// @details This class instantiates components that compose the lt /// example system with dmi. A demonstration of the blocking interface for /// TLM 2.0. The same (or similar) block diagram is created /// for additional examples, but with different components. /// See the constructore for companents instatntiated for this example. // //============================================================================== // // Authors: // Jack Donovan, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // //============================================================================== #include "lt_temporal_decouple_top.h" // example system top header //===================================================================== /// @fn lt_temporal_decouple_top::lt_temporal_decouple_top // /// @brief Constructor for the top module for a basic LT example // /// @details /// The construcor method /// 1. initializes the instantiated components /// 2. calls the bind methods to connect the example components // //===================================================================== lt_temporal_decouple_top::lt_temporal_decouple_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_lt_synch_target_1 /// "problem lt"/forces synch lt target ( "m_lt_synch_target_1" // module instance name , 201 // 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(20, sc_core::SC_NS) // accept delay , sc_core::sc_time(100, sc_core::SC_NS) // read response delay , sc_core::sc_time(60, sc_core::SC_NS) // write response delay ) , m_lt_target_2 /// "well behaved"/normal lt target ( "m_lt_target_2" // module instance name , 202 // 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_td_initiator_1 /// temporal decouple initiator ( "m_td_initiator_1" // module instance name , 101 // 1st Initiator ID is 101 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) , m_initiator_2 /// non-td initiator ( "m_initiator_2" // module instance name , 102 // 2nd Initiator ID is 102 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_td_initiator_1.top_initiator_socket(m_bus.target_socket[0]); m_initiator_2.top_initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_lt_synch_target_1.m_memory_socket); m_bus.initiator_socket[1](m_lt_target_2.m_memory_socket); } systemc-2.3.4/examples/tlm/lt_temporal_decouple/src/td_initiator_top.cpp0000644000175000017500000001204614342422106026552 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file td_initiator_top.cpp // /// @brief Instantiates initiator and traffic_generator // /// @details /// This module performs: /// 1. Instantiation of the traffic_generator and the lt_td_initiator /// and the interconnecting sc_fifo's /// 2. Binding of the Interconnect for the components // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "td_initiator_top.h" // header file for this module #include "reporting.h" // reporting macro helpers static const char *filename = "td_initiator_top.cpp";///< filename for reporting /// Constructor td_initiator_top::td_initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 ) :sc_module (name) // module instance time ,top_initiator_socket // initialize tlm socket ("top_initiator_socket") ,m_ID (ID) // initiator ID ,m_lt_td_initiator // Init temporal decouple initiator ("m_lt_td_initiator" ,ID // ID for reporting ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID // ID for reporting ,base_address_1 // first base address ,base_address_2 // second base address ,4 ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_lt_td_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_lt_td_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_lt_td_initiator.initiator_socket(top_initiator_socket); } //============================================================================== /// @fn td_initiator_top::invalidate_direct_mem_ptr // /// @brief Mandatory virtual implementation // /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Unused and nt implemented in this example // //============================================================================== void td_initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //============================================================================== /// @fn td_initiator_top::nb_transport_bw // /// @brief Mandatory virtual implementation // /// @details /// Unused but required when using hierarchical connectivity with simple_socket /// Not Used or Implemented in this example // //============================================================================== tlm::tlm_sync_enum td_initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/lt_temporal_decouple/build-unix/0000755000175000017500000000000014342422106023761 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/build-unix/Makefile0000644000175000017500000000066614342422106025431 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = lt_temporal_decouple VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ td_initiator_top.o \ \ lt_initiator.o \ lt_synch_target.o \ lt_target.o \ lt_td_initiator.o \ memory.o \ report.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/lt_temporal_decouple/results/0000755000175000017500000000000014342422106023402 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_temporal_decouple/results/expected.log0000644000175000017500000021273214342422106025715 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: lt_td_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_synch_target.cpp: 0 s - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_synch_target.cpp: 0 s - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 80 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 80 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 80 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 80 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_initiator.cpp: 80 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_synch_target.cpp: 80 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_td_initiator.cpp: 80 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_synch_target.cpp: 80 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 160 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 160 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 160 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 160 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 160 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_synch_target.cpp: 160 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 160 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 160 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_synch_target.cpp: 160 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 240 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 240 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 240 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 240 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 240 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_synch_target.cpp: 240 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 240 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_synch_target.cpp: 240 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 320 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 320 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 320 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 320 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 320 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_synch_target.cpp: 320 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 320 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_synch_target.cpp: 320 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 400 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 400 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 400 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 400 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_synch_target.cpp: 400 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_synch_target.cpp: 400 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 480 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 480 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 480 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 480 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 480 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_synch_target.cpp: 480 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 480 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_synch_target.cpp: 480 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 560 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 560 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 560 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 560 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 560 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_initiator.cpp: 560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 560 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_synch_target.cpp: 560 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_td_initiator.cpp: 560 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 560 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_synch_target.cpp: 560 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 640 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 640 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 640 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_synch_target.cpp: 640 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 640 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_synch_target.cpp: 640 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 720 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 720 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 720 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 720 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 720 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_synch_target.cpp: 720 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 720 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_synch_target.cpp: 720 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 800 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 800 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 800 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 800 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_synch_target.cpp: 800 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 800 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_synch_target.cpp: 800 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 880 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 880 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 880 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 880 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 880 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_synch_target.cpp: 880 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 880 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 880 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_synch_target.cpp: 880 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 960 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 960 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 960 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 960 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 960 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_synch_target.cpp: 960 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 960 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_synch_target.cpp: 960 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 1040 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 1040 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_initiator.cpp: 1040 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1040 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_synch_target.cpp: 1040 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_td_initiator.cpp: 1040 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1040 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_synch_target.cpp: 1040 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 1120 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 1120 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1120 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1120 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1120 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_synch_target.cpp: 1120 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 1120 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1120 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_synch_target.cpp: 1120 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 1200 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1200 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 1200 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 1200 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_synch_target.cpp: 1200 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_initiator.cpp: 1200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_synch_target.cpp: 1200 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 80 ns), Info: lt_synch_target.cpp: 1280 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1280 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_synch_target.cpp: 1280 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_td_initiator.cpp: 1280 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1280 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_synch_target.cpp: 1280 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_initiator.cpp: 1280 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1280 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_synch_target.cpp: 1280 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1400 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1400 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1400 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1400 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_synch_target.cpp: 1400 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1400 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 1400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1400 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_synch_target.cpp: 1400 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1520 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 1520 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 1520 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1520 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_synch_target.cpp: 1520 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_td_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 1520 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1520 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_synch_target.cpp: 1520 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1640 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 1640 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1640 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_synch_target.cpp: 1640 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1640 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_synch_target.cpp: 1640 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1760 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1760 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1760 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_synch_target.cpp: 1760 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1760 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 1760 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_synch_target.cpp: 1760 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1880 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 1880 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 1880 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 1880 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_synch_target.cpp: 1880 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 1880 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 1880 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 1880 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_synch_target.cpp: 1880 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2 us - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2 us - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2 us - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 2 us - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2 us - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2 us - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_synch_target.cpp: 2 us - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_td_initiator.cpp: 2 us - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 2 us - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2 us - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_synch_target.cpp: 2 us - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2120 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 2120 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2120 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2120 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2120 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_synch_target.cpp: 2120 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_initiator.cpp: 2120 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2120 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_synch_target.cpp: 2120 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2240 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2240 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2240 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2240 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_synch_target.cpp: 2240 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2240 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2240 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_synch_target.cpp: 2240 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2360 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2360 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2360 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2360 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_synch_target.cpp: 2360 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2360 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2360 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2360 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_synch_target.cpp: 2360 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2480 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2480 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2480 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2480 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_synch_target.cpp: 2480 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2480 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2480 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_synch_target.cpp: 2480 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2600 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 2600 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2600 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2600 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_synch_target.cpp: 2600 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_td_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 2600 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2600 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_synch_target.cpp: 2600 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2720 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 2720 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2720 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2720 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2720 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_synch_target.cpp: 2720 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2720 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_synch_target.cpp: 2720 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2840 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2840 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2840 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2840 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_synch_target.cpp: 2840 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2840 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2840 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2840 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_synch_target.cpp: 2840 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2960 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 2960 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 2960 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 2960 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_synch_target.cpp: 2960 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 2960 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 2960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 2960 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_synch_target.cpp: 2960 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 3080 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_synch_target.cpp: 3080 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_initiator.cpp: 3080 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_synch_target.cpp: 3080 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_td_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 3080 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_synch_target.cpp: 3080 ns - custom_b_transport Target: 201 Forcing a synch in a temporal decoupled initiator with wait( 120 ns), Info: lt_synch_target.cpp: 3200 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 102 b_transport returned delay = 0 s Info: lt_synch_target.cpp: 3200 ns - custom_b_transport Target: 201 return from wait will return a delay of 0 s Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 0 s and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 40 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 40 ns + 10 ns + 30 ns = 80 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 80 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 80 ns + 10 ns + 30 ns = 120 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 120 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 120 ns + 10 ns + 30 ns = 160 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 160 ns and quantum keeper to be set Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3200 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 160 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 160 ns + 10 ns + 30 ns = 200 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 200 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 200 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 200 ns + 10 ns + 30 ns = 240 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 240 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 240 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 240 ns + 10 ns + 30 ns = 280 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 280 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport(GP, 280 ns) Info: memory.cpp: 3200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 3200 ns - custom_b_transport Target: 202 returned delay of 280 ns + 10 ns + 30 ns = 320 ns Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 b_transport returned delay = 320 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3200 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3240 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3240 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3280 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3280 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3280 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3320 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 3320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3320 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3360 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 3360 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3360 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3400 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 3400 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3400 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 3440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3440 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3480 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 3480 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3480 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 40 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 40 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 40 ns + 10 ns + 30 ns = 80 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 80 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 80 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 80 ns + 10 ns + 30 ns = 120 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns and quantum keeper to be set Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3520 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 120 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 120 ns + 10 ns + 30 ns = 160 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 160 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 160 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 160 ns + 10 ns + 30 ns = 200 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 200 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 200 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 200 ns + 10 ns + 30 ns = 240 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 240 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 240 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 240 ns + 10 ns + 30 ns = 280 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 280 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 280 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 280 ns + 10 ns + 30 ns = 320 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 320 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 320 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 320 ns + 10 ns + 50 ns = 380 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 380 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 380 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 380 ns + 10 ns + 50 ns = 440 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 440 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport(GP, 440 ns) Info: memory.cpp: 3520 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3520 ns - custom_b_transport Target: 202 returned delay of 440 ns + 10 ns + 50 ns = 500 ns Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 b_transport returned delay = 500 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 3520 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3560 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 3560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3560 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3600 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 3600 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3600 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3640 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 3640 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3640 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3680 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 3680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3680 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3720 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 3720 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3720 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3760 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 3760 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3760 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3800 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 3800 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 30 ns = 40 ns Info: lt_initiator.cpp: 3800 ns - initiator_thread Initiator: 102 b_transport returned delay = 40 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3840 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_target.cpp: 3840 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3840 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3900 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0xEFFFFFFB Info: lt_target.cpp: 3900 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3900 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 3960 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0xEFFFFFF7 Info: lt_target.cpp: 3960 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 3960 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 60 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 60 ns + 10 ns + 50 ns = 120 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 120 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 120 ns + 10 ns + 50 ns = 180 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 180 ns and quantum keeper to be set Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0xEFFFFFF3 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4020 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 180 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 180 ns + 10 ns + 50 ns = 240 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 240 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 240 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 240 ns + 10 ns + 50 ns = 300 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 300 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 300 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 300 ns + 10 ns + 50 ns = 360 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 360 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 360 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 360 ns + 10 ns + 50 ns = 420 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 420 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport(GP, 420 ns) Info: memory.cpp: 4020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 4020 ns - custom_b_transport Target: 202 returned delay of 420 ns + 10 ns + 50 ns = 480 ns Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 b_transport returned delay = 480 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4020 ns - initiator_thread Initiator: 101 the quantum keeper needs synching Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4080 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0xEFFFFFEF Info: lt_target.cpp: 4080 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4080 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4140 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0xEFFFFFEB Info: lt_target.cpp: 4140 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4140 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4200 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0xEFFFFFE7 Info: lt_target.cpp: 4200 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4200 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4260 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0xEFFFFFE3 Info: lt_target.cpp: 4260 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4260 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4320 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0xEFFFFFDF Info: lt_target.cpp: 4320 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4320 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4380 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0xEFFFFFDB Info: lt_target.cpp: 4380 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4380 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0xEFFFFFD7 Info: lt_target.cpp: 4440 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4440 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 return from quantum keeper synch Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 0 s) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 60 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 60 ns) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 60 ns + 10 ns + 50 ns = 120 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 120 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 120 ns) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 120 ns + 10 ns + 50 ns = 180 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 180 ns and quantum keeper to be set Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0xEFFFFFD3 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4500 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 180 ns) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 180 ns + 10 ns + 50 ns = 240 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 240 ns and quantum keeper to be set Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport(GP, 240 ns) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 4500 ns - custom_b_transport Target: 202 returned delay of 240 ns + 10 ns + 50 ns = 300 ns Info: lt_td_initiator.cpp: 4500 ns - initiator_thread Initiator: 101 b_transport returned delay = 300 ns and quantum keeper to be set Info: traffic_generator.cpp: 4500 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4560 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0xEFFFFFCF Info: lt_target.cpp: 4560 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4560 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4620 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0xEFFFFFCB Info: lt_target.cpp: 4620 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4620 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4680 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0xEFFFFFC7 Info: lt_target.cpp: 4680 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4680 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 102 b_transport(GP, 0 s) Info: memory.cpp: 4740 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0xEFFFFFC3 Info: lt_target.cpp: 4740 ns - custom_b_transport Target: 202 returned delay of 0 s + 10 ns + 50 ns = 60 ns Info: lt_initiator.cpp: 4740 ns - initiator_thread Initiator: 102 b_transport returned delay = 60 ns Info: traffic_generator.cpp: 4800 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### systemc-2.3.4/examples/tlm/lt_mixed_endian/0000755000175000017500000000000014342422106020622 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/test.am0000644000175000017500000000645414342422106022131 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: lt_mixed_endian ## %C%: lt_mixed_endian examples_TESTS += lt_mixed_endian/test lt_mixed_endian_test_CPPFLAGS = \ -I$(srcdir)/lt_mixed_endian/include \ $(CPPFLAGS_TLMTESTS) lt_mixed_endian_test_SOURCES = \ $(lt_mixed_endian_H_FILES) \ $(lt_mixed_endian_CXX_FILES) examples_BUILD += \ $(lt_mixed_endian_BUILD) examples_CLEAN += \ lt_mixed_endian/run.log \ lt_mixed_endian/expected_trimmed.log \ lt_mixed_endian/run_trimmed.log \ lt_mixed_endian/diff.log examples_FILES += \ $(lt_mixed_endian_H_FILES) \ $(lt_mixed_endian_CXX_FILES) \ $(lt_mixed_endian_BUILD) \ $(lt_mixed_endian_EXTRA) examples_DIRS += \ lt_mixed_endian/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details lt_mixed_endian_H_FILES = \ lt_mixed_endian/include/initiator_top.h \ lt_mixed_endian/include/lt_top.h \ lt_mixed_endian/include/me_traffic_generator.h lt_mixed_endian_CXX_FILES = \ lt_mixed_endian/src/initiator_top.cpp \ lt_mixed_endian/src/lt.cpp \ lt_mixed_endian/src/lt_top.cpp \ lt_mixed_endian/src/me_traffic_generator.cpp lt_mixed_endian_BUILD = \ lt_mixed_endian/results/expected.log \ lt_mixed_endian/results/input.txt lt_mixed_endian_EXTRA = \ lt_mixed_endian/README \ lt_mixed_endian/CMakeLists.txt \ lt_mixed_endian/build-msvc/Makefile \ lt_mixed_endian/build-msvc/README.txt \ lt_mixed_endian/build-msvc/lt_mixed_endian.sln \ lt_mixed_endian/build-msvc/lt_mixed_endian.vcxproj \ lt_mixed_endian/build-unix/Makefile \ lt_mixed_endian/docs/lt_mixed_endian_example.pdf \ lt_mixed_endian/docs/lt_mixed_endian_example.ppt lt_mixed_endian_FILTER = "::" ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/lt_mixed_endian/build-msvc/0000755000175000017500000000000014342422106022667 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/build-msvc/README.txt0000644000175000017500000000136514342422106024372 0ustar carstencarstenCommand line ~~~~~~~~~~~~ If you run using nmake and the Makefile, the example should pass. Visual C++ GUI ~~~~~~~~~~~~~~ If you run using the supplied Visual C++ .sln (solution), you will need to supply a command line input of ..\results\input.txt and also filter out any lines in the run.log file that *DO NOT* contain the string "::" (without the quotes) before comparing to the expected.log file. To supply a command line input in Visual C++ 1. click on the project lt in the solution explorer 2. right click on project and select Properties 3. In the lt Project Properties page, browse to Configuration Properties > Debugging 4. Click in the Command Arguments box and type in < ..\results\input.txt and click OK. Now you can run the program. systemc-2.3.4/examples/tlm/lt_mixed_endian/build-msvc/lt_mixed_endian.vcxproj0000644000175000017500000003141214342422106027430 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {2791E41A-B893-4F21-9A93-02226EED404B} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/lt_mixed_endian/build-msvc/lt_mixed_endian.sln0000644000175000017500000000231014342422106026524 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_mixed_endian", "lt_mixed_endian.vcxproj", "{2791E41A-B893-4F21-9A93-02226EED404B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|Win32.ActiveCfg = Debug|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|Win32.Build.0 = Debug|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|x64.ActiveCfg = Debug|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|x64.Build.0 = Debug|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|Win32.ActiveCfg = Release|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|Win32.Build.0 = Release|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|x64.ActiveCfg = Release|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/lt_mixed_endian/build-msvc/Makefile0000644000175000017500000000066614342422106024337 0ustar carstencarsten!include <..\..\..\build-msvc/Makefile.config> PROJECT = lt_mixed_endian OBJS = \ $(OUTDIR)\lt.obj \ $(OUTDIR)\lt_top.obj \ $(OUTDIR)\initiator_top.obj \ $(OUTDIR)\me_traffic_generator.obj \ \ $(OUTDIR)\at_target_1_phase.obj \ $(OUTDIR)\at_target_4_phase.obj \ $(OUTDIR)\lt_initiator.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj INPUT = ../results/input.txt FILTER = "::" !include <..\..\..\build-msvc/Makefile.rules> systemc-2.3.4/examples/tlm/lt_mixed_endian/README0000644000175000017500000000041314342422106021500 0ustar carstencarstenThis directory contains an example of a simple TLM platform implemented on top of the blocking transport interface. The convenience API is the same as in the example lt_min_system. Using: * cd build-unix * set SYSTEMC_HOME environment variable * make * make run systemc-2.3.4/examples/tlm/lt_mixed_endian/docs/0000755000175000017500000000000014342422106021552 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/docs/lt_mixed_endian_example.pdf0000644000175000017500000015713514342422106027117 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xTMk0W(-XՌ-MKCrb!l7B&XV xHo޼>r;25P =<k]kZN;vb/Ǒ(vE$lߔgƊ\J^ 2/ݑL~JZ-IbdXe7 y?Kjs9q?Ý8B\r-JvFEm<`5mi١J}iײeIڊ}AG'kptpלyhmD'yCݏTbSMܠ% ^jW7SظT4P>,0U+z¼M 7lai֒H!L޼ i^gu~ 2жG#@'t`> stream xWKo#7 FsYԪޏc ), P<;ZFnFv9'ה)-/YFBSҳus6[PLJu͘M7s'ʸv15jH:RmeG wV *:MQ681Pۂ ޻v sk&JKR&`I(Y%nƔ8n-.9EDW7Au}EMcRW!\tM~qpVD-A ŨuG瓐+grқ7h3, |*J3DJMuěHTvLń \$u47`=1r-`Qe-op^APdEZdve-W$)M~$rh *ΑZ~R1mv%L;Nr|>[z'9 EF(fA2Rlрq_Y2 ![rz}{ߎ\pFެrzE\3_ާT=ҾV ZBacQ]&q4ḩx^Q稐^k8l'JE! LqX!.C7RT"s~ *#|u3"09׃zM_kㆊZ^}}./܏yB5:#~z=M宖&w;Vn0Ӳ*+L7b}(OZ\f{jo|J̝$±R;0Zgx.a-!r7WhQ٥BS> stream xXYoG Fv[>h;(@ CS+;q,+;F:Qp~٫\ pnX s(#Gy-lhhv՜>l{h6ySX$xm";cUG'M,W% WS'|Vv~ ywr\^uGۄy] Ӫ[NDö́+S6`f ,m's٭AbRHѵdN(q5^/$.laGuq`ΨnEiA94{9xAao ia4a7"^48^6z~V iWY2oG͙!B\ݦkf{Z'zboB@賴&iA . h /ݒېn[G)^؝UridgB~>f;F @&~8a֘^ piz0_ !!& dIk$ vK1Vug[Uf,tNhe=.^؋ߏPP =RÜ}4!@8%Ns-W7D1xul"ޛLYwOtό`~5:|! +>q D}g@+N$+Xd~[[oEZ58VD^\3vg2Bf DŽvI#!r.,S9o9gXƒRb"N5NbtG̕? 2[ atݖ3]UdbN9bN&b1Uc!kQӒ| 0}Ѐ.2 p0+Tn N,J": oF;@#ޣs|>R.fI-*{l}ɼ.3k{,ᮮjS'5m4M妪6yéNsғE7UJrp`r̓s5hJ6T[ rNəZMnۭiĚ&๲\SDU2+iTPz*t ۔4.NIC${QaAWcM|zC)>%MXsߒ%j7Kt~H|?'ɞkmMjj`~hSw9a> stream xn1>/-PQ!*ԲBE!ȦM@7;v-*F3ǻk™OXsH6|- 편 Yj9|mfxCkAqH^ atOo. c|w7e]8_,MΓA%פC` @E=tRL)ҳ3#ޔiX?0LYg4ݖq@Ea0ȐR(Iw8¢wuv{zWZ+2`lVJV;oWtԔ ǹhتו-sT6vH- We V"KNffU,vEgqZGkPDZ>ApX NMY)m1M0W RB)#A~!}D:* xZB WV{,ZvV bZnl4FjHKMwX!i`H˞Q"DZLFlG+i$%D7FZEa).Ze$dJRb&5. Y5=M+k;g:s mvxVH{^)k⻞OcRQۇw)]-^2xJz&X~,g/~z4nXOYxkыֶ 1Fd$=*$Kv;{QJA=8endstream endobj 38 0 obj 720 endobj 43 0 obj <> stream xYn7F)n1(:A"AXIPą[v֒/ D!WJr1> g>W%W$p<]?H_#ipg7ňU=Εdthb{ָZ | 1TO.B8N90a/FrMҢzmojdkJ|<,W N&0Ju՘Ei+#&Ŕ亾h?@^W #B[%e# /(Ȉְ(*¨5 ^sQ B-^nM=7&Ҩ<NN0ַQSC4ocVח(|}.ja2 >t+k_@^4Mf<|i%qpn-Sf$lmNpY6lq~hƠ 0s*QՌ<,vRQJ7ǜ(#}O#liQY^H>)ی8gZmq 7{R k<MaƂ= C4Gt  J=`r}@yܻ R$!ICA'aM}ȹ d)s΄:/ph̫Iuc ۴~ 8Y hF8m *ap+%Va\BtB>iG'~+W,*I_CψlȿE767;,BRNRSDw j(5bz* PJ@+VӪL'XdpU|%1s8c~j;mh \'&gM沬e$=]#vZ@+voM[k*awM{L8LPJz/dЁd{3$M! v aF OՈQ'j^Xx qOOJHV=5g61&Y 8tJ/3t #۔7Tv 9!n4; ({H(r;"=@\0e@?xP8S'#)=G.vڔa63w|C~ŒцwYғ xKpу@+syv{v +\fE"n{GD$LL5H4iY̤"#[]ֈ\(?acэ5.`[eY/lwₙ%@(y bewiSom_#Fj`%IKOX-ܮ|̵(.%ÇnAK/N]}5UFj~@?mk86nQĈzDM,3Aý]~`mPKxM_ H- z%}%8~O 1P}}[8l(q})dh[.$ Wנx2HlPqdP޽aV!!n/+zxV~]h9QfW2v[,iս!$>XRendstream endobj 44 0 obj 1853 endobj 49 0 obj <> stream xY[o[7 ^+9Ŭ~yV;m6'in[G{Gɖl6hꐔH~HLȆǟipr>)Λk=~c< ?~y\D?$^m"9_׫ٛݵU3JDC~pqDglraj~~Uty48>9o^(ɸnNY0΅\E7N1~m83hiN0kIV{)ƕ.;4!Ü)M_oI ;6D],;bL;CBBߞ%ut@JIRų`Q+?j%bV'og/zcF>h£lW&Y?U7'i }s\K& F6sz44 Rr'ͼ&&LISHLώ@ Ǣ,<~e'TJn :&E v5ĭ2}*O0o0Zi-%Nâk)!(rv\8T@ҡy-tWTpU)Xlﱆ}\V ɾnjRs0כ]@; fY @2V94T,cPNuWJ+*de tx&HZH eU(x%Sն:u5gSHqjW.1+0.gyvJC#\WZ)h{2 'ê:l:.dEpӍ*B{a){.c)Q wK^| ;@ֳΖ*~QO"qO]ݔ0;'/`> stream xZn7Fz=E@9Ea[vD+ih KJ8CkԘpop&dg''?_ˉ[r/MQ馜A`%\[=ϋ jzqDž4+XxTI35:һɥJ ;L/4d< Z)i}Zm:Ǽ^K8*Rӿ/ZVGI9$|XDiN<.t6ԔL2Yʃ݃xǀJ*6$n$]t_}Xv(r1ѢI 4$ vn|M4ظy$i^)vd&Yg,$BrWMUg=F 8r(^TmJgVHd R ^hq % o3>H g?&y$lg뻡 {\{hSb+[ie/CbtGde-Bbe1jw9typM]]yr +LU4v6+W(%e\򂨤We21eEf|fj q[*ҎYYe7I9'y ?b&l:#`8*1>%P*]'FV|" (/iN/pm:Am~(u:@Iď&~ eQ"dC?&K7T\v;ʏZpoHM3"k+eQMoo+-d|yާ;R_pDy9\ωr. \`tB+ xMP |:rgcKh Fy9"bQ9Nา5Q=xxV B:"LC_ 49܀5y(_!9NH4 +ã3(75%~߯دy%L֢U%ne6a쫗0endstream endobj 56 0 obj 2231 endobj 61 0 obj <> stream xZKs7#g!crkԦVAڈ-ٱ;v+73ll-[eBFOf/gF_W37bf=S ܜ!_7'uf8Lb ?Be@|6hr4=?r?=4t|j-Wj63ج*fM0B7v)=0h/" Cl[YW:9m=ٻꌐFE>BzJx9dЮ]"؞#;8/Z+]{]VJW:_o#-B eBj-=rmqZdfq9ͥ0ZARh4均W:1ajׁl9[ !fӞp(so`7OѪ}'xN&OX0ަ^(<r1|( I2e;4ME!jCDi@OTL.kY+^T {RwV ҃h<ǭl_Svg=Jh-]zփ=a`\@ 1ynWoo[X=/9CoYNv*w juyu]8lU"ؽq7V$ޘ=G٩N '칥Ca&FI9ک^~"6Z^ 1{p(b!A4 >Oq+X:W7("q2{L"Bׯ+4^aYKI'$DP2%9L^4M\2P4w+Bt}A@8VI@5[U_V}꧅}8t0m7io&{::Lؾ*FGl8٫ba!!t qFHނʐaQ!NV:H 1нPt{;]m=hPMrW=29Yo* |0^X[B~ <{At7 / 2x( 02<:t`* >ӍRL,A%ˇHBf$pW XgMv. >&U.*@t$ނț(JD!b'i%E5dN:qvf~L? c Bwæ ͝wv-j%T W7*K $ syQ ɟ0`PY#fYaFFџj=j?$d>O 7|ʐA"5Js`tX'ډ4uEǕ5>kAC;yi`rvxjVˎB@ ?ߗQD(j>FVl _A-VZjK=(36|$ő#wq]1X |.8e%cdI&؉!'AD42N72[OpqQƒ1鳢N:kCy;O2 3Zuj~wV_@}9n眕r<1B}@ >ecsp:?,fuކvX3, W?֬3Y5^8!A$c41V[Y~ %;g gb G[fP>__uS.nxhp˴oTb'`^҄x5t;f56&!M:=RVQAsu.)_HHIXEeryρ|@D抲+ G>b8rwW<Jz ~6lpGiPwC'`'Ek>gk9o]&oKQ6KO:|->|Æ'~m(Iendstream endobj 62 0 obj 2255 endobj 68 0 obj <> stream xZKo6F{_ޤ R~AEsH@Mwhu8M;ZvHIH;6- Θə()XE^8IƊ"J&8)7[tb5E{u*ZΎ^lowj7Egkׁe?yme(5ߪ;7k#F?5X>(/h*07q狚I= +Q/f?7ƀ4IJ4VZfڤqZ@ΫC|[FY +2hE%&3˧a`0+U ]%XWDI~ 9bL xi,E{ϸ$9+2RY5elc] ö66ST^Ǫfjy<WӰ!1ЯQ4 ^kW{^&\iDo|_ȔagkVtvՐ%8k}or1\naFBһjhC3!vڇu!7lpܔGI`Py"lT r pz"GŨ0_'],!6D# lmc;LnW-`?ԙ 4rc8FI?` mRl: 2 b`F6o*9$v?5/GPUw_&Ia(`t<,ȆR@XѤGUܘueFh(@DwYj,gڇRJî+þA4DmmDm aIsDj$eRh#Dm™>GNQR˥ D2`~lO@ɳpz)0b2x2N3'plHɜgJ \cxc#%2`VB?Өւ)-_("M:ỵ*Ul嘔r ZdwՂ ܪhv@Xʧ]PhBEqI=R}Dn`,)\L ! 5R]4By QZuI&aaaa<-:jgjtMHmH>\z+&2uNd~QG|-(~>Oم5|2NBFj?r"y$ύkN_@m`4j@ٕckDJpyO@Ο69sH*aoo9 b+.VM=9~.!9cN@^J70ƅ@LpH A3&0,n5:ɚ~ִNayrꗕi8݂r2 nԛ7ۏp#)t%n8;?wOڳi‘ 4ub0 gt-Ed"a=WLVY{@* XȂVr@YJֹD#F#xE=;Ǖ0-oQGFEKA˞Z+4jg/I[HtdPA( lۊ21t۰2y o)otq`ol TPצ1zMƃtkW{MEVܓW>*U_sC&L'XL_wb?T쇊}]pXLʰЯѵ]ebZf_.=1mGtO)HǤI.)q@|jo aopCҪ#M-* 3ˤ0(O6WKm.d {]7B>&ן,=~c薚;E\̼[tP5%$,51]Ѱ 2W(0Խ+xSx78y$ `hA; { c Nt4vL x0#!xLkvjAA9D+> stream xZKs5.8l*+zc $[Ł~;!;4#n!`ⴥVVN PL߅;i)4S.8pȣtⰮ56Kq?;x4{M{F,|T໯FyðŁlINwϿW{ݓ%ʊVBnyAH !v HF5t^ -Og?9P@T^{Ǵ /!:y9wx ^ϥP*ӹRCpEJdh ls+@zeALPT.~i:ƵFPOvjO#%; 6_u 8 $̈́`yz$Qߒ"2I. ` dLV(-Ζ~ \j^EeZee^[ \2h`8A 5 PAEJqM1YLILYU:9 I ^]ev/)Vk[PmQi^kplH4"8wƛdq.gC|aR(Us@1d#ПUdTA|٘PU2 $;aP_XGmWX#T q.:[L;n oD@17+ P~*! 08ǐC\w^#lCxseIЄ9\4Z")e6Pƣ6*:&źvա$GI*,# Efd8o7nFl1wU؋t p֌IOJ8)ޫS7Iqf Su 3\8zͷk9L"icJTd,^X%Sntn0yӚ|fu##*tGOW eD䈄u' NHE yB2QRpBNHs4sB2\:`H 6AkTpv|sR{; Yrc^qBѲ8 ڥx'dtl+HUbAxOXm뽶l 2?XkišFwP[3t~W >WrK'>LGL`S I%q[*OصZ9\;:hX\\5e#hkqTsfV^eY9D2J49nϪtPZ(t#d%/h4԰\YF :ҍD&]9=ύpQ"d`]5c reɺan:nnBcpxwofrd4Z<۪M%;9{zRlZ=jEebm:ۺK mb҇olzK6;Cf oM?6Ц6~JX($5Yp:_ jJ<Ċ# HUϳ4JÉ1L(KIJG{-7R[ckP0>I} DѶF7j׋EbN Qh5팦FZylh١pCTzy,Dzч<^2NبlsQkws5 &7EQ,T ?`c|>z@PWO:-8+sc]QR xUB|z~5w<(UPU>E&*~z U0%Xy.Z+̭x=L޴ ީ )|׊?>5TBendstream endobj 75 0 obj 2114 endobj 80 0 obj <> stream xZrOYw<].*ˡ+8wWJJ\)_IyӘrJ)bbFuM-䲉?qqPMۖ-_/obnD~=u|M$_[~e:4C:Wnƪ/?|XZj}q|qNRɺ= uk' _:UoJ2v+Y;W-W@4&2Q+ ա![Z;C\u#BHcCA ऩ>K74cn.X+luIkt`QmWЪ:v=lWGnțv)kQ OvBE+Rv)$}Yg+W{Dk04)q;a{R9ڜ<_8Rgc/ML? Z }-ThjEL2e\g1DZw;yY88M|](bt?m-YidLHmS[:U.-ǖm9L0Wa42(am8t>\:-l-V)GA3EkX/yGh.cSZWev0&5bl7Wب|n|P+4%}lUy3h?9Z;g퇒V(I'sMQrܹAfv$nl(y5Vj37g8ip Ydx CHOG{Nwc<8^: R@]o{* v}({VTԟ8 n9c[״DeWdw9r*[6)G.mٔsI4cNy$Sy ʍlŴ,kR_"-ׄ@h6Yn/kYy/ýW$gj:bÚhoϐf(ݚ4  r=;7i0I9E,J: Yg i9`V>^u_&ᅖeq-gpxeVކ\CDYvJO?=[m=9 V~'Klm]}u7 /m- --h"SGJv*}hşIoIgAVw~w]Ũ8_:h-ڧ5)xMr7jRD==ڣG{3-^%6 xA !&,.ORkp!2O܋EJS h$UV4e++z~%Ly5XkxP)\W> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 27 0 obj <> /Contents 28 0 R >> endobj 36 0 obj <> /Contents 37 0 R >> endobj 42 0 obj <> /Contents 43 0 R >> endobj 48 0 obj <> /Contents 49 0 R >> endobj 54 0 obj <> /Contents 55 0 R >> endobj 60 0 obj <> /Contents 61 0 R >> endobj 67 0 obj <> /Contents 68 0 R >> endobj 73 0 obj <> /Contents 74 0 R >> endobj 79 0 obj <> /Contents 80 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 27 0 R 36 0 R 42 0 R 48 0 R 54 0 R 60 0 R 67 0 R 73 0 R 79 0 R ] /Count 11 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 24 0 obj <> endobj 25 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 26 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 23 0 obj <> endobj 32 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <>stream x]=n0 FwB70%?.钡EL"3ɺCgY/חkwSoKݤ9O=Ɍtse<=U}y JlT 'b&.=i F)aEy@+tl@밨Cڠ}Q޳@'*Q=*u('с5~bQN4uBJ%T5l YK8+;b-l g%`×%>pV6Ny:bs(2Fg7uY# endstream endobj 30 0 obj <> endobj 82 0 obj <> endobj 90 0 obj <> endobj 22 0 obj <> endobj 91 0 obj <> endobj 9 0 obj <> endobj 92 0 obj <> endobj 63 0 obj <> endobj 20 0 obj <> endobj 31 0 obj <> endobj 86 0 obj <>stream x{{xTչZ6{7=F&adf%HL@ %~SiZZo{=a%Z"BVH[><=P29Z{O9~u[a "-j[!b=j=Մ]mkpC[ܺg0ݟ} !!֩%'B='D(hLA}^ҷyz/5=j}JB{n0==h ^۳yAnZOMv\ ł?˟s]I$!4;N{܇GQ2*<#Yކrh]܆CDo'@яQ=QO =C.Ҩ'Vw'dfN7aQ :KAoPL54nmPWo*WtPAtMZ6z8Rݺl,P>ҭ@Cs3Hv0hIGN'hhtjGkJO![-CC-`PPpP mmh.YOȶݙ =%@Y.*TRy ;BAԲȩ@obH`Aǚ؈NOFB:Vjdw Z!%}tBk,LLW#c?Qr;fd+תYGc`:U 2FYO(pVd@3([6MXڢqJL=71/om]Z8Xp@⃫7_~BCRP 4d ۃ(*qW Ӱ7w.ޫKWt$#`so u"VFR j%Vct|ం hƈ mf6@)]E iEzXHB Za8Ĕv4ێoa { (Gh5﫨N*ø? $}=x ̬r{ ;@^ydn|/M*JbM\m\#J`nY|_>WWs;'ItF>4 h #]9J9]}wIX&5ZFu9=bm6QM}:m6gVF#|z9v{,*Wm+Tb_>Y3ۍۀ6bH{A A/@)B@/pKLۭ B4lDaҖY93s& p *'kNS~*zF\c`,2 9l31NZd8ks<MW%g^˃W%^/X)bjKB dI RKJ`N- s䲹Wrr4&,.3mV-c=G<vџg<ϸgvO^"<t8&C>H:eF&&!̔geBrcHn,gCV g19V+&r".+Sqvx}K&O/bosWŧPn # 0` }k XY {d]v#k)0׎]L=xx{fhգYg ^uU0ުr>\yjMrgJt:U|\ /)ɻ,DδǿDZ:.pΖNl<Ċsvc X܏w'|DZQDXDQ+pGFNe3qf̖ϥX&QjavފZ { HkwIEq:X91p.g7;zDx mͲY'+#+X!6gEB&u6eu XC#'B.BGJNw[#f)"bC[|%2m3u:<$0"9zcVlP`unG!o` &ȅ) b0)tXIe7Xn :9vvQ&3wpcu.A igxW&:oV+.qq#;n0x?7;0rm"@p.G.ce9xFÍsf{L2Y1LB=yl 'ɺ=gn;'x3f͛?sC `L:|qc7݆m~x6'۟.uOb phhc-hTU4t[%zR.'_oXm|{uͱʅ^Ӭ׼ᔒҾ+kf:']?{Y+Vc\W~'3{pֺ@o'KP-.Ue.7wΟYg1mUb"QꋋuEq=[хeB".Y-IB&D3h&>隢+u!"'s4$Rp$ 1$'*nx~u >Et2$tq3j2c.[O"g&,)eOP!mgRi5܅`O1*D'. u@{7紏>_ڳgޢovÒm}ϼ.k_}qbu u Wy䮕K0d'`/p~2uMoy\Gڦx G\\I2 P[D Nb O(uB/T,* ?-cOd}ٱ׳džsSKYVݕ:[jm[nT$)x3?nfqdtL"8ʝRd*\T|dNmREJT,d11Ę" %N\ XpS@ R@uS)Vb9J-AX7M$2 ?QDL| u!X'1.YRKm ލl V]*l:Rf+m~xkiPli,3lGݼmEݫg㢵7bq~rqE~$Zxb6[\tj-g`-ignf?`4ɢJP ˍ+L6 k`8;7KpM\;qA7ә , F3Ĩ?Tl>z2_ 9Y3w}U.2BJw >+H`b Ó1:V4h.!n&P&IX{R$Rā]_ m8mapu4؊g7O a 7tJY,61FUxY otބonq2}0IB`Xm. =q-D" ?,4ڰ,WZ jB>O ϑI|{ޠEc1j7TED0*ډ\nHd&`|xp ^طMXvD0ƲI?V?6{mpghVьw}܍$02h Lz+"Ґ0+2ƎT8ۑ;u2"i&&Ge2=^T|Gs}o"|uA1zeT:na1NWtT{]% M%o#ϔ ?̖:YvLmĕdv'#eseY?OEO&!}UIS]D!ED8EWѾ:UjpJb,NN'8qɅ#҉Uhtx2Q"/"\b%b#0yLk:x(u7oV'Wo\w*JJfg;LgW];333IZֽ^LR<:֭X K=by$:8b9rێ(HjE3.^ϖAl) A(xME`*b%r/&CD4b4-adXjdގ~a>GA iPXJj\l;'?=J`XD?]LƑz3dDfD]r:S#Vz[Y7f1~Sc`aU"IԯWÁ18G; IHӭ+DM^ "ffsGi:놚)&XZuCJj6ܘVw{InOqRn% -TmNioqX5B\$ $Ꙋ* ?@$az8J-=yHԨHFjRh@.Cɂg2ZI5 oi1Hp(j0|t]eʔ3ur`Gb@_Mr~DխFZ< ځXU I"V"i"= P(?zC+Ud`O>p?%1(#fE^k5}YLRd[*0Ng2tm-0[6(I]R1 ᷛ%gޑkXnqߕViEc!3\W_:Vuc!ؚ5[$} Xo!!`46#-Ќ@05~]hڷб!zT $2L]/ՎlDtyiGS+nҚ"o]Sp2Hڄ<8P+Ō3#@т Bh~fzR (V NzX-x_jNQ1 {w"O'([RYn6IMV7h =dMԧ G9J[}jebhaBzF%KX#6Nǜ?{OOXzvwٳ=cx&'ȿƯ~7^լ ׅh@_-5l}c&JiQ!w} :?Fx3P1ph=OfJa_qZDX>K @AW$_y=+Zp_]0{\cW,58+E B`[YF:a/2I5|өϚLEF@ j ʶůYѣil!&7)_F>0p{uDI+E~R[p֦^'.o>;FcӶ`SbɧM#YvuE80h##з 5,˛y0$P aE^n [MBG(צLl&n31DχQԄo2lus<^jG~+4n&zd8z2]׮NIk{KwigQ816ɠhʇVSxmб:?ÓIs_ίYϱy)0a?k#5M2ϘYz[tWS] h Q*C\kT䒜Qojx4UK=$ wB\1_|!xIz_A^*|ՉrS&:}U^QIް׸kZc./r.r.r.r4ѻ>x'b ! @$t\9wk2,YZQu_~84Y8PL%]e 92] r,E-FMȁEgA P=}{Ⱥ#qG;Ύ_Ԁ DfWfVB@en%Z 4|?oU3%j4A Z4㢜D_a 9vS䂾 3{t ݰef|jTe>1[{;-P5P[?z| endstream endobj 21 0 obj <> endobj 87 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T19:05:59+02:00 2012-04-30T19:05:59+02:00 PDFCreator Version 1.2.3 The TLM 2.0 Mixed Endianness ExampleJames Aldis() endstream endobj 2 0 obj <>endobj xref 0 94 0000000000 65535 f 0000022806 00000 n 0000054336 00000 n 0000022676 00000 n 0000020522 00000 n 0000000015 00000 n 0000000611 00000 n 0000022871 00000 n 0000025806 00000 n 0000041578 00000 n 0000025746 00000 n 0000025776 00000 n 0000028801 00000 n 0000020716 00000 n 0000000630 00000 n 0000002159 00000 n 0000028831 00000 n 0000036703 00000 n 0000031741 00000 n 0000034754 00000 n 0000041837 00000 n 0000049593 00000 n 0000041439 00000 n 0000040471 00000 n 0000034668 00000 n 0000034711 00000 n 0000039089 00000 n 0000020912 00000 n 0000002180 00000 n 0000003917 00000 n 0000041026 00000 n 0000041975 00000 n 0000040539 00000 n 0000039152 00000 n 0000039195 00000 n 0000039238 00000 n 0000021108 00000 n 0000003938 00000 n 0000004730 00000 n 0000039301 00000 n 0000039344 00000 n 0000039387 00000 n 0000021304 00000 n 0000004750 00000 n 0000006675 00000 n 0000039439 00000 n 0000039482 00000 n 0000039525 00000 n 0000021500 00000 n 0000006696 00000 n 0000008583 00000 n 0000039588 00000 n 0000039631 00000 n 0000039674 00000 n 0000021696 00000 n 0000008604 00000 n 0000010907 00000 n 0000039737 00000 n 0000039780 00000 n 0000039823 00000 n 0000021892 00000 n 0000010928 00000 n 0000013255 00000 n 0000041764 00000 n 0000039875 00000 n 0000039918 00000 n 0000039961 00000 n 0000022088 00000 n 0000013276 00000 n 0000015659 00000 n 0000040024 00000 n 0000040067 00000 n 0000040110 00000 n 0000022284 00000 n 0000015680 00000 n 0000017866 00000 n 0000040173 00000 n 0000040216 00000 n 0000040259 00000 n 0000022480 00000 n 0000017887 00000 n 0000020501 00000 n 0000041255 00000 n 0000040322 00000 n 0000040365 00000 n 0000040408 00000 n 0000042189 00000 n 0000049790 00000 n 0000040620 00000 n 0000040680 00000 n 0000041348 00000 n 0000041518 00000 n 0000041663 00000 n 0000052468 00000 n trailer << /Size 94 /Root 1 0 R /Info 2 0 R /ID [<0D19A54C367E769BFC82909DEDAC1105><0D19A54C367E769BFC82909DEDAC1105>] >> startxref 54891 %%EOF systemc-2.3.4/examples/tlm/lt_mixed_endian/docs/lt_mixed_endian_example.ppt0000644000175000017500000037100014342422106027136 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`#G( / 0DArial News`x2 0x"DTimes New Roman`x2 0x DWingdingsRoman`x2 0x0DMonotype Sorts`x2 0x@DArial Narrows`x2 0x"PDCourier News`x2 0x1`DTahoma News`x2 0x"F0.  @n?" dd@  @@`` v< ,*a7%0##<? d"/?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 0AA0 @823uʚ;48ʚ;g4_d_d2 0lppp@ <4dddd 0< <4BdBd8 0<4!d!d8 0___PPTMac11@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography ! \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp. ,d   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography &   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (D   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography )8   hnamd` Arial&Monotype Typography h___PPT2001D<4X`___PPT10 ! ,&(    ___PPT9{!,&P?  %$$The TLM 2.0 Mixed Endianness Example  1James Aldis Texas Instruments France January 2008'G!8Modification of  lt Example  Demonstrates the use of TLM endianness-conversion functions Illustrates data and address modification effects of BIG- and LITTLE-endian initiators sharing a memory Allows interactive experimentation Interactively execute  instructions alternately on two initiators one big- and one little-endian store data from BE and view it from LE or vice-versa store 32-bit data and view as 8-bit or 16-bit, etc,  , [ I#Platform Structure  O,How to run this example (Linux)|Set SYSTEMC_HOME cd examples/tlm/lt_mixed_endian/build-unix make make run (uses default input) ./lt.exe (interactive input) }z>'&d2K&Component detailsGenerator 101 32-bit Big-endian initiator stdin provides instructions to execute (loads and stores) stdin provides data for stores data from loads written to stdout Generator 102 Identical but Little-endian Instruction Set for both Generators l8, l16, l32 (load byte, halfword or word) s8, s16, s32 (store byte, halfword or word) w (switch control to other generator) q (quit) see examples/tlm/lt_mixed_endian/results/input.txt for example instructions Bus and Memory Exactly as in lt example Some kind of 32-bit routing and memory systemPPPP$PPPGP$.    G*55h$F%77_-The System Being ModelledBoth memories are simple arrays of 4-byte words Neither the memories nor the interconnect is aware of the endianness of the transactions Neither the memories nor the interconnect does any data modification: what the initiators put on the bus goes unchanged to the memory Memories are endianness-neutral provide a consistent memory image to BE and to LE initiators  What I write, I read back the same there are no attributes on the hardware bus except those shown opposite\Z@Z ZZ@ ,j  `.The System Being Modelled What the other writes, I may read back at a different address Example 1: single byte access BE initiator writes byte A5 to address 66 = 64 + 2 see opposite for hardware bus signals LE initiator will find it at address 65 = 64 + 1 see opposite for hardware bus signalsb_3&1&_3&1&  a/The System Being Modelled What the other writes, I may read back at a different address Same effect for aligned 16-bit or 32-bit data But no address change for 32-bit Example 2: 32-bit integer access BE initiator writes 32-bit integer 04030201 to address 256 see opposite for hardware bus signals LE initiator will find the same data at the same address see opposite for hardware bus signalsn!";&9&n!";&9  &b0The System Being Modelledt What the other writes, I may read back distorted Example 3: write 4 consecutive bytes and read back as an integer BE initiator writes bytes 04, 03, 02, 01 to addresses 0, 1, 2, 3 see opposite for hardware bus signals Both initiators will read the integer 04030201 at address 0 LE initiator writes bytes 04, 03, 02, 01 to addresses 0, 1, 2, 3 see opposite for hardware bus signals Both initiators will read the integer 01020304 at address 0uZAZ&P}Z&P<ZuA&}&<c1The TLM Model of the SystemThe TLM model correctly models the above data and address distortions and all other possible ones In particular it gets hairy for non-address-aligned transactions The address, data array and byte enable array in the transaction payload object are identical to the internal opcode of the initiator if the initiator endianness matches the host CPU endianness modified if the initiator endianness is different from the host CPU s The internal data storage of the memory models is not visible (we are not using DMI in this example) But could be a simple memcpy() between the data array in the transaction payload object and an array of unsigned char in the memory model Therefore we can say that the TLM 2.0 interfaces are always  host-endian Model is functionally identical on BE and LE host CPUs but internal structure (length, address, byte enables) of transaction payload objects will differ4bPAPTP2P<F P=F/PPP0P7PbPbAT2<  =/07b  t#   /T Y[  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``PXU   f `p>> tl (  h  C 2As_c_pg2_opt3"j  C 4Asystem_c_L2_9"Y  6P "P  T Click to edit Master title style! !$  0, "P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6l "  P*&0  B  s *޽h ? ̙3380___PPT10.YS' TLM2.0plan]  0  c(  p  C :A"system_c_title_9"  s * "p@@   T Click to edit Master title style! !  s *8 " @P  W#Click to edit Master subtitle style$ $B  s *޽h ? ̙3380___PPT10.YS' 0 ` (     Ny˼y˼ .   n*  a00aa  Ny˼y˼ 2 .  p*  a00aad  c $ ?  4  N0y˼y˼ 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   Ty˼y˼ q  ` n*  a00aa   Ty˼y˼ q2  ` p*  a00aaH  0ηo~ ? 3380___PPT10.1?0 0 @0(  x  c $D.cp@  c x  c $c @ P c H  0޽h ? 3380___PPT10."0  0 pT0( Jxobtvcaa Tx T c $UP   x T c $(M   H T 0޽h ? 280___PPT10.4jt9@  0 a@Y@=~\( 9?(  \~ \ s *plPp   L P  1\#  ` ~ 2\ N?3fjJ?P  3\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P &L   F\#  `0 \ B o" p tlm_initiator_socket60 @   A\ T P  4\#  p 5\ N?3fjJ?"P   6\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B ;\ 0D #L    G\#  L 0 *\ B(v" p }tlm_target_socket60 @    @\  T P  <\#   p =\ N?3fjJ?"P   >\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B ?\ 0D P L\ Bo@ RJB___PPTMAC11   hnamd` Arial&Monotype Typography  Router (SimpleBusLT)2  7 P\ B\o @ RJB___PPTMAC11   hnamd` Arial&Monotype Typography  kMemory 1 (at_target_1_phase)2 \ R\ B4opp`@RJB___PPTMAC11   hnamd` Arial&Monotype Typography   BE Generator 101 (initiator_top)2!  L P  S\# Z ~ T\ N?3fjJ?P  U\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P L P  V\# @ @ ~ W\ N?3fjJ?P  X\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P L P  Y\# Z0 ~ Z\ N?3fjJ?P  [\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P L P  \\# ` p ~ ]\ N?3fjJ?P  ^\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P \ _\ Bop@RJB___PPTMAC11   hnamd` Arial&Monotype Typography   LE Generator 102 (initiator_top)2!  L P  `\# Z 0 ~ a\ N?3fjJ?P  b\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P L P  c\# Z ~ d\ N?3fjJ?P  e\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P 7 f\ BPo ` RJB___PPTMAC11   hnamd` Arial&Monotype Typography  kMemory 2 (at_target_4_phase)2 L P  g\# h@ @ ~ h\ N?3fjJ?P  i\  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@P d o\@ <ZGHeI> : d p\ <ZG!H I!>   ^ q\ 6G%HqI%> d r\ <GdHId> Z8  -  u\ =TB s\ c $D @ @ t\ <p -  B32 bit 0 hF  -  v\    TTB w\ c $D @ @ x\ <خ -  B32 bit 0 hF  -  y\  - TB z\ c $D @ @ {\ < -  B32 bit 0 hF  -  |\  =$ TB }\ c $D @ @ ~\ <X -  B32 bit 0 H \ 0޽h ?Ob\h\o\e\W\p\ 3\T\q\ ^\Z\r\ 280___PPT10. "  0 ( >y? l  C P   l  C h*P0  H  0޽h ? ̙3380___PPT10.nt  0 d \  (     ~ 0e0e?Rectangle 2P   2How to run this example (MSVC)   ~0e0e?Rectangle 3P0  Open a explorer window on examples/tlm/lt_mixed_endian/build-windows Launch lt.sln Select  Property Manager from the  View menu Under  lt_extension_mandatory > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Select  Debugging under  Configuration Properties Click in the  Command Arguments box and type in  < ..\results\input.txt Build and run0Z C C CCC  $$ ((,, 004488<<       $$ ((,,0C044   $$ ,,0C044,,0C044#7-  V] 8@X`x6  S ޽h ? ̙3380___PPT10.nt  0  h( `' hl h C P   l h C P0  H h 0޽h ? ̙3380___PPT10.mt3R  0   0!0 > (  x  c $0P   r  S p 0     Bo"`   ,32-bit Memory Component 1024 Words / 4 kByte"-0 -'8  P4   P lB  <DԔ TB   c $D p   < P4 J10-bit address 0 8 $ \   \  rB   BDԔ    B$ \ c n_we 0 F  P   P lB  <DԔ TB  c $D p  <  P J32-bit data in 0 F  P<   P xB  HDԔ TB  c $D p  <d P< K32-bit data out 0 8 `\   !\P rB B BDԔ( 0   B``\  c n_ce 0 F p P4   P< lB  <DԔ TB  c $D p  <Ep P4 M4-bit byte enable 0 H  0޽h ? ̙3380___PPT10.mt3a  0 `.a(  x  c $gP   x  c $Php 0    B@`Ԕ"`|* C0 0 1 0 0    B8.Ԕ"`0* i xx xx A5 xx 0   ! BsԔ"` * C0 00 10 0  " <8t@ ) G byte enable 0   # <uJ  Cdata in 0  $ <.J0 k Caddress 0  % 0:*  Cbit index: 8 4 0 24 16 8 0 3 0 D0 D & B(Ԕ"`h |z  C0 0 1 0 0  ' BԔ"`h 0z  i xx xx A5 xx 0   ( BԔ"`h z  C0 00 10 0  ) <P )d  G byte enable 0   * < On  Ddata out 0   + <` 0 kn  Caddress 0  , 0ܜz N  Cbit index: 8 4 0 24 16 8 0 3 0 D0 D - 0T0 0j  >Address bus takes the index of the correct 32-bit word (66/4 = 16). Fractional part of the address (2) used inside initiator to select a byte lane according to big-endian convention (more significant bits are at lower addresses)>0  ;T . 0p ` ` Little-endian convention is that more significant bits are at higher addresses. To get the same data, fractional part of the address is 1N0  1GH  0޽h ? ̙3380___PPT10.mt3F  0 F(  x  c $P   x  c $p 0    BԔ"`| C1 1 1 1 0   BԔ"`0 G 04 03 02 01 0    BԔ"`  C0 00 40 0   < ) G byte enable 0    <p  Cdata in 0    <0 k Caddress 0    0  Cbit index: 8 4 0 24 16 8 0 3 0 D0 D   BԔ"` |  C1 1 1 1 0    BԔ"` 0  G 04 03 02 01 0     BԔ"`   C0 00 40 0   < )  G byte enable 0    <( O  Ddata out 0    <( 0 k  Caddress 0   0   Cbit index: 8 4 0 24 16 8 0 3 0 D0 D  0|0 0p 2Address bus takes the index of the correct 32-bit word (256/4 = 64). Big-endian convention is that more significant bits of the integer are at lower addresses, which are at more significant bits of the bus data word.>0 E   0 < ` `: )Little-endian convention is that more significant bits of the integer are at higher addresses, which are at more significant bits of the bus data word. Therefore it is the same as big-endian!N0  @mH  0޽h ? ̙3380___PPT10.mt3  0  (  x  c $ <P  < x  c $ <p 0 <   BL <Ԕ"`Vh C1 1 1 1 0   Bh<Ԕ"`VW/h G 04 03 02 01 0    B0 <Ԕ"`V' h e0 00 00 0   <$%<~GPR G byte enable 0    <*<3'\ Cdata in 0    <-<W \ Caddress 0    0`(<h < Cbit index: 8 4 0 24 16 8 0 3 0 D0 D   Bt7<Ԕ"`V h  C1 1 1 1 0    Bh5<Ԕ"`V W/h  G 01 02 03 04 0     BC<Ԕ"`V ' h  e0 00 00 0   <D<~ GPR  G byte enable 0    <I< 3'\  Cdata in 0   <M< W \  Caddress 0   0Q<h  <  Cbit index: 8 4 0 24 16 8 0 3 0 D0 D   0U<8W W@ ]Big-endian convention is that more significant bits of the data bus word are lower addresses.0^0  T+  0P[<` h aLittle-endian convention is that more significant bits of the data bus word are higher addresses.Nb0  C H  0޽h ? ̙3380___PPT10.mt36  0 6(  x  c $pp<P  < ~  s *?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesT'Current UserSummaryInformation(PowerPoint Document(DocumentSummaryInformation8systemc-2.3.4/examples/tlm/lt_mixed_endian/CMakeLists.txt0000644000175000017500000000563514342422106023373 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/lt_mixed_endian/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (lt_mixed_endian src/lt.cpp include/lt_top.h src/lt_top.cpp include/initiator_top.h src/initiator_top.cpp include/me_traffic_generator.h src/me_traffic_generator.cpp ../common/include/lt_initiator.h ../common/src/lt_initiator.cpp ../common/include/at_target_1_phase.h ../common/src/at_target_1_phase.cpp ../common/include/at_target_4_phase.h ../common/src/at_target_4_phase.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp) target_include_directories (lt_mixed_endian PRIVATE include ../common/include) target_link_libraries (lt_mixed_endian SystemC::systemc) configure_and_add_test (lt_mixed_endian INPUT results/input.txt FILTER "::") systemc-2.3.4/examples/tlm/lt_mixed_endian/include/0000755000175000017500000000000014342422106022245 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/include/lt_top.h0000644000175000017500000000461514342422106023725 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_top.h /// @brief This class instantiates components that compose the TLM2 /// example system //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __LT_TOP_H__ #define __LT_TOP_H__ #include "tlm.h" // TLM header #include "at_target_4_phase.h" // at with lt memory target #include "at_target_1_phase.h" // at with lt memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusLT.h" // Bus/Router Implementation /// Top wrapper Module class lt_top : public sc_core::sc_module // SC base class { public: /// Constructor lt_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusLT<2, 2> m_bus; ///< simple bus at_target_1_phase m_lt_target_1; ///< instance 1 target at_target_4_phase m_lt_target_2; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __LT_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_mixed_endian/include/me_traffic_generator.h0000644000175000017500000001332614342422106026570 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file me_traffic_generator.h // /// @brief traffic_generator class header // //===================================================================== // Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //==================================================================== #ifndef __ME_TRAFFIC_GENERATOR_H__ #define __ME_TRAFFIC_GENERATOR_H__ #include "tlm.h" // TLM headers #include // queue header from std lib #include class me_traffic_generator // traffic_generator : public sc_core::sc_module // sc_module { // Member Methods ==================================================== public: //===================================================================== /// @fn me_traffic_generator // /// @brief me_traffic_generator constructor // /// @details /// Initializes Traffic Generator // //===================================================================== me_traffic_generator ( sc_core::sc_module_name name ///< module name for SC , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); //============================================================================= /// @fn me_traffic_generator_thread // /// @brief traffic_generator processing thread // /// @details /// Method actually called by SC simulator to generate and /// check traffic. Generate Writes then Reads to check the /// Writes // //============================================================================= void me_traffic_generator_thread ( void ); // Transaction Pool (queue) class pool_c : public tlm::tlm_mm_interface { public: pool_c() { m_size = m_initial_size; m_available = 0; m_stack = new tlm::tlm_generic_payload* [m_size]; } ~pool_c() { for(std::list::iterator i = all_payloads.begin(); i != all_payloads.end(); i++) { delete *i; } delete [] m_stack; } tlm::tlm_generic_payload *pop() { tlm::tlm_generic_payload *transaction_ptr; if(m_available == 0) { transaction_ptr = new tlm::tlm_generic_payload(this); all_payloads.push_back(transaction_ptr); } else { transaction_ptr = m_stack[--m_available]; } transaction_ptr->acquire(); return transaction_ptr; } void push(tlm::tlm_generic_payload *transaction_ptr) { transaction_ptr->release(); } void free (tlm::tlm_generic_payload *transaction_ptr) { transaction_ptr->reset(); if(m_available == m_size) { // stack is full. make a new one twice as big m_size *= 2; tlm::tlm_generic_payload **new_stack = new tlm::tlm_generic_payload* [m_size]; for(unsigned i=0; i all_payloads; unsigned m_size, m_available; static const unsigned m_initial_size = 1; }; // pool_c class definition private: void do_transaction(std::string &user_command); void do_load(std::istringstream &iss); void do_store(std::istringstream &iss); template void do_do_load(std::istringstream &iss); template void do_do_store(std::istringstream &iss); //============================================================================= // Member Variables private: const unsigned int m_ID; // initiator ID std::string m_prompt; sc_dt::uint64 m_base_address_1; // first base address sc_dt::uint64 m_base_address_2; // second base address pool_c m_txn_pool; // transaction pool tlm::tlm_endianness m_endianness, m_host_endianness; static const int m_buffer_size = 1024; unsigned char m_buffer[m_buffer_size]; /// Synchronisation between mixed-endian traffic generators static std::list me_ui_waiters; static sc_core::sc_event me_ui_change_event; public: /// Port for requests to the initiator sc_core::sc_port > request_out_port; /// Port for responses from the initiator sc_core::sc_port > response_in_port; }; #endif /* __ME_TRAFFIC_GENERATOR_H__ */ systemc-2.3.4/examples/tlm/lt_mixed_endian/include/initiator_top.h0000644000175000017500000000752114342422106025307 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers //#include "simple_initiator_socket.h" #include "lt_initiator.h" // AT initiator #include "me_traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); private: //Member Variables/Objects =========================================== public: // tlm_utils::simple_initiator_socket top_initiator_socket; // typedef tlm::tlm_fw_transport_if<> fw_interface_type; // typedef tlm::tlm_bw_transport_if<> bw_interface_type; // typedef tlm::tlm_initiator_socket<32, // fw_interface_type, // bw_interface_type> initiator_socket_type; // initiator_socket_type top_initiator_socket; tlm::tlm_initiator_socket< > top_initiator_socket; private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID lt_initiator m_initiator; ///< TLM initiator instance me_traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_mixed_endian/src/0000755000175000017500000000000014342422106021411 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/src/initiator_top.cpp0000644000175000017500000001116414342422106025004 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 ) :sc_module (name) // module name for top ,top_initiator_socket ("top_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator" ,ID ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(top_initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/lt_mixed_endian/src/me_traffic_generator.cpp0000644000175000017500000002413114342422106026263 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file me_traffic_generator.cpp // /// @brief traffic generation routines // //===================================================================== // Authors: // Bill Bunton, ESLX // Jack Donovan, ESLX // Charles Wilson, ESLX //==================================================================== #include "reporting.h" // reporting macros #include "me_traffic_generator.h" // traffic generator declarations #ifdef _MSC_VER #if (_MSC_VER < 1300) typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif #elif defined( __sparc ) || defined( __sparc__ ) typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else #include #endif using namespace std; static const char *filename = "me_traffic_generator.cpp"; ///< filename for reporting /// Constructor SC_HAS_PROCESS(me_traffic_generator); //----------------------------------------------------------------------------- // me_traffic_generator::me_traffic_generator // constructor ( sc_core::sc_module_name name // instance name , const unsigned int ID // initiator ID , sc_dt::uint64 base_address_1 // first base address , sc_dt::uint64 base_address_2 // second base address ) : sc_module ( name ) /// module name , m_ID ( ID ) /// initiator ID , m_base_address_1 ( base_address_1 ) /// first base address , m_base_address_2 ( base_address_2 ) /// second base address { SC_THREAD(me_traffic_generator_thread); me_ui_waiters.push_back(this); // odd IDs are big endian, even are little m_endianness = ((m_ID & 1) == 0 ? tlm::TLM_LITTLE_ENDIAN : tlm::TLM_BIG_ENDIAN); // host endianness m_host_endianness = tlm::get_host_endianness(); std::ostringstream tmp; tmp << m_ID << (m_endianness == tlm::TLM_LITTLE_ENDIAN ? " LE" : " BE") << "32 "; m_prompt = tmp.str(); } /// SystemC thread for generation of GP traffic //----------------------------------------------------------------------------- // void me_traffic_generator::me_traffic_generator_thread ( void ) { std::ostringstream msg; ///< log message msg.str (""); msg << "Initiator: " << m_ID << " Starting Traffic"; REPORT_INFO(filename, __FUNCTION__, msg.str()); bool running = true; while(running) { // traffic generator should own the user interface while(me_ui_waiters.front() != this) wait(me_ui_change_event); // get user input std::cout << m_prompt << " > "; std::string user_command; std::getline(std::cin, user_command); std::cout << std::endl; if(std::cin.bad() || std::cin.fail() || std::cin.bad()) user_command = string("q"); // parse for control flow if(user_command.length() != 0) switch(user_command[0]) { case 'l': // load case 's': // store do_transaction(user_command); break; case 'w': // wait me_ui_waiters.pop_front(); me_ui_waiters.push_back(this); me_ui_change_event.notify(); break; case 'q': // quit me_ui_waiters.pop_front(); me_ui_change_event.notify(); running = false; break; case 'm': std::cout << "Memory map:\n"; std::cout << " " << hex << m_base_address_1 << " (16)" << dec << endl; std::cout << " " << hex << m_base_address_2 << " (16)" << dec << endl; break; case 'h': // help case 'H': // help case '?': // help std::cout << "enter one of the following commands (all numbers in hex):\n"; std::cout << " l8 addr nr_bytes (load)\n"; std::cout << " l16 addr nr_halfwords (load)\n"; std::cout << " l32 addr nr_words (load)\n"; std::cout << " s8 addr d0 d1 ... (store)\n"; std::cout << " s16 addr d0 d1 ... (store)\n"; std::cout << " s32 addr d0 d1 ... (store)\n"; std::cout << " m (memory map)\n"; std::cout << " w (wait/switch initiator)\n"; std::cout << " q (quit)\n"; break; } } msg.str (""); msg << "Traffic Generator : " << m_ID << endl << "=========================================================" << endl << " #### Traffic Generator Complete #### "; REPORT_INFO(filename, __FUNCTION__, msg.str()); } // end me_traffic_generator_thread /// Synchronisation between mixed-endian traffic generators std::list me_traffic_generator::me_ui_waiters; sc_core::sc_event me_traffic_generator::me_ui_change_event; /// Helper functions void me_traffic_generator::do_transaction(std::string &user_command) { std::cout << m_prompt << ":: cmd: " << user_command << std::endl; std::istringstream iss(user_command); char ldst; iss >> ldst; if(ldst == 'l') do_load(iss); else do_store(iss); } void me_traffic_generator::do_load(std::istringstream &iss) { int datatype; iss >> datatype; switch(datatype) { case 8: do_do_load(iss); break; case 16: do_do_load(iss); break; case 32: default: do_do_load(iss); break; } } void me_traffic_generator::do_store(std::istringstream &iss) { int datatype; iss >> datatype; switch(datatype) { case 8: do_do_store(iss); break; case 16: do_do_store(iss); break; case 32: default: do_do_store(iss); break; } } template void me_traffic_generator::do_do_load(std::istringstream &iss) { tlm::tlm_generic_payload *req_transaction_ptr = m_txn_pool.pop(); sc_dt::uint64 addr; iss >> hex >> addr >> dec; int len; iss >> hex >> len >> dec; if(int(len * sizeof(T)) > m_buffer_size) return; req_transaction_ptr->set_command(tlm::TLM_READ_COMMAND); req_transaction_ptr->set_address(addr); req_transaction_ptr->set_data_ptr(m_buffer); req_transaction_ptr->set_data_length(len * sizeof(T)); req_transaction_ptr->set_streaming_width(len * sizeof(T)); req_transaction_ptr->set_byte_enable_ptr(0); req_transaction_ptr->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE); if(m_endianness != m_host_endianness) tlm::tlm_to_hostendian_word(req_transaction_ptr,4); request_out_port->write(req_transaction_ptr); tlm::tlm_generic_payload *resp_transaction_ptr = response_in_port->read(); if (resp_transaction_ptr != req_transaction_ptr) { std::ostringstream msg; msg << m_ID << "Response to wrong request"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } if (resp_transaction_ptr->get_response_status() != tlm::TLM_OK_RESPONSE) { std::ostringstream msg; msg << m_ID << "Transaction ERROR"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } if(m_endianness != m_host_endianness) tlm::tlm_from_hostendian_word(req_transaction_ptr,4); std::cout << m_prompt << ":: " << "read transaction length " << len << " (10) x " << sizeof(T)*8 << "-bit completed, returning:" << std::endl; T *buffer = (T *)m_buffer; std::cout << m_prompt << "::"; for(int i=0; i void me_traffic_generator::do_do_store(std::istringstream &iss) { tlm::tlm_generic_payload *req_transaction_ptr = m_txn_pool.pop(); sc_dt::uint64 addr; iss >> hex >> addr >> dec; T *buffer = (T *)m_buffer; int len; for(len=0; len < m_buffer_size; len++) { unsigned tmp; iss >> hex >> tmp >> dec; if(iss.fail()) break; *(buffer++) = T(tmp); } if(len == 0) return; req_transaction_ptr->set_command(tlm::TLM_WRITE_COMMAND); req_transaction_ptr->set_address(addr); req_transaction_ptr->set_data_ptr(m_buffer); req_transaction_ptr->set_data_length(len * sizeof(T)); req_transaction_ptr->set_streaming_width(len * sizeof(T)); req_transaction_ptr->set_byte_enable_ptr(0); req_transaction_ptr->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE); if(m_endianness != m_host_endianness) tlm::tlm_to_hostendian_word(req_transaction_ptr,4); request_out_port->write(req_transaction_ptr); tlm::tlm_generic_payload *resp_transaction_ptr = response_in_port->read(); if (resp_transaction_ptr != req_transaction_ptr) { std::ostringstream msg; msg << m_ID << "Response to wrong request"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } if (resp_transaction_ptr->get_response_status() != tlm::TLM_OK_RESPONSE) { std::ostringstream msg; msg << m_ID << "Transaction ERROR"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); } if(m_endianness != m_host_endianness) tlm::tlm_from_hostendian_word(req_transaction_ptr,4); std::cout << m_prompt << ":: " << "write transaction length " << len << " (10) x " << sizeof(T)*8 << "-bit completed" << std::endl; m_txn_pool.push(resp_transaction_ptr); } systemc-2.3.4/examples/tlm/lt_mixed_endian/src/lt_top.cpp0000644000175000017500000001063114342422106023417 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_top.cpp // /// @brief This class instantiates components that compose the lt /// example system. A demonstration of the blocking interface for // TLM 2.0. The same (or similar) block diagram is created /// for additional examples, but with different components // //============================================================================== // // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX // //============================================================================== #include "lt_top.h" // example system top header //===================================================================== /// @fn lt_top::lt_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== lt_top::lt_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_lt_target_1 /// Init intance 1 of LT target ( "m_lt_target_1" // module name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(20, sc_core::SC_NS) // accept delay , sc_core::sc_time(100, sc_core::SC_NS) // read response delay , sc_core::sc_time(60, sc_core::SC_NS) // write response delay ) , m_lt_target_2 /// Init instance 2 of LT target ( "m_lt_target_2" // module name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of LT initiator ( "m_initiator_1" // module name , 101 /// 1st Initiator ID is 101 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module name , 102 /// 2nd Initiator ID is 102 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.top_initiator_socket(m_bus.target_socket[0]); m_initiator_2.top_initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_lt_target_1.m_memory_socket); m_bus.initiator_socket[1](m_lt_target_2.m_memory_socket); } systemc-2.3.4/examples/tlm/lt_mixed_endian/src/lt.cpp0000644000175000017500000000436414342422106022543 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_top.h" // top module #include "tlm.h" // TLM header #define REPORT_DEFINE_GLOBALS #include "reporting.h" //============================================================================== /// @fn sc_main // /// @brief sc_main for lt example // /// @details /// This is the SystemC entry point for an example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the example traffic generator will run to /// completion, ending the simulation. // //============================================================================== // // Original Authors: // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX // //============================================================================== int // return status sc_main // SystemC entry point (int /*argc*/ // argument count ,char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); lt_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/lt_mixed_endian/build-unix/0000755000175000017500000000000014342422106022702 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/build-unix/Makefile0000644000175000017500000000066514342422106024351 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = lt_mixed_endian VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ lt.o \ lt_top.o \ initiator_top.o \ me_traffic_generator.o \ \ at_target_1_phase.o \ at_target_4_phase.o \ lt_initiator.o \ memory.o \ report.o INPUT = ../results/input.txt FILTER = grep "::" include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/lt_mixed_endian/results/0000755000175000017500000000000014342422106022323 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_mixed_endian/results/expected.log0000644000175000017500000000766214342422106024642 0ustar carstencarsten101 BE32 :: cmd: s8 0 0 1 2 3 4 5 6 7 101 BE32 :: write transaction length 8 (10) x 8-bit completed 101 BE32 :: cmd: l8 0 8 101 BE32 :: read transaction length 8 (10) x 8-bit completed, returning: 101 BE32 :: 0 1 2 3 4 5 6 7 101 BE32 :: cmd: l8 1 7 101 BE32 :: read transaction length 7 (10) x 8-bit completed, returning: 101 BE32 :: 1 2 3 4 5 6 7 101 BE32 :: cmd: l8 5 3 101 BE32 :: read transaction length 3 (10) x 8-bit completed, returning: 101 BE32 :: 5 6 7 101 BE32 :: cmd: l16 0 4 101 BE32 :: read transaction length 4 (10) x 16-bit completed, returning: 101 BE32 :: 1 203 405 607 101 BE32 :: cmd: l16 2 3 101 BE32 :: read transaction length 3 (10) x 16-bit completed, returning: 101 BE32 :: 203 405 607 101 BE32 :: cmd: l16 4 1 101 BE32 :: read transaction length 1 (10) x 16-bit completed, returning: 101 BE32 :: 405 101 BE32 :: cmd: l32 0 2 101 BE32 :: read transaction length 2 (10) x 32-bit completed, returning: 101 BE32 :: 10203 4050607 101 BE32 :: cmd: l32 4 1 101 BE32 :: read transaction length 1 (10) x 32-bit completed, returning: 101 BE32 :: 4050607 102 LE32 :: cmd: s8 0 0 1 2 3 4 5 6 7 102 LE32 :: write transaction length 8 (10) x 8-bit completed 102 LE32 :: cmd: l8 0 8 102 LE32 :: read transaction length 8 (10) x 8-bit completed, returning: 102 LE32 :: 0 1 2 3 4 5 6 7 102 LE32 :: cmd: l8 1 7 102 LE32 :: read transaction length 7 (10) x 8-bit completed, returning: 102 LE32 :: 1 2 3 4 5 6 7 102 LE32 :: cmd: l8 5 3 102 LE32 :: read transaction length 3 (10) x 8-bit completed, returning: 102 LE32 :: 5 6 7 102 LE32 :: cmd: l16 0 4 102 LE32 :: read transaction length 4 (10) x 16-bit completed, returning: 102 LE32 :: 100 302 504 706 102 LE32 :: cmd: l16 2 3 102 LE32 :: read transaction length 3 (10) x 16-bit completed, returning: 102 LE32 :: 302 504 706 102 LE32 :: cmd: l16 4 1 102 LE32 :: read transaction length 1 (10) x 16-bit completed, returning: 102 LE32 :: 504 102 LE32 :: cmd: l32 0 2 102 LE32 :: read transaction length 2 (10) x 32-bit completed, returning: 102 LE32 :: 3020100 7060504 102 LE32 :: cmd: l32 4 1 102 LE32 :: read transaction length 1 (10) x 32-bit completed, returning: 102 LE32 :: 7060504 101 BE32 :: cmd: l8 0 8 101 BE32 :: read transaction length 8 (10) x 8-bit completed, returning: 101 BE32 :: 3 2 1 0 7 6 5 4 101 BE32 :: cmd: l8 1 7 101 BE32 :: read transaction length 7 (10) x 8-bit completed, returning: 101 BE32 :: 2 1 0 7 6 5 4 101 BE32 :: cmd: l8 5 3 101 BE32 :: read transaction length 3 (10) x 8-bit completed, returning: 101 BE32 :: 6 5 4 101 BE32 :: cmd: l16 0 4 101 BE32 :: read transaction length 4 (10) x 16-bit completed, returning: 101 BE32 :: 302 100 706 504 101 BE32 :: cmd: l16 2 3 101 BE32 :: read transaction length 3 (10) x 16-bit completed, returning: 101 BE32 :: 100 706 504 101 BE32 :: cmd: l32 0 2 101 BE32 :: read transaction length 2 (10) x 32-bit completed, returning: 101 BE32 :: 3020100 7060504 101 BE32 :: cmd: l32 4 1 101 BE32 :: read transaction length 1 (10) x 32-bit completed, returning: 101 BE32 :: 7060504 101 BE32 :: cmd: s32 20 13579bdf 101 BE32 :: write transaction length 1 (10) x 32-bit completed 102 LE32 :: cmd: l32 20 1 102 LE32 :: read transaction length 1 (10) x 32-bit completed, returning: 102 LE32 :: 13579bdf 102 LE32 :: cmd: s32 30 00000000 102 LE32 :: write transaction length 1 (10) x 32-bit completed 102 LE32 :: cmd: s16 30 ea62 102 LE32 :: write transaction length 1 (10) x 16-bit completed 101 BE32 :: cmd: l16 30 1 101 BE32 :: read transaction length 1 (10) x 16-bit completed, returning: 101 BE32 :: 0 101 BE32 :: cmd: l16 32 1 101 BE32 :: read transaction length 1 (10) x 16-bit completed, returning: 101 BE32 :: ea62 101 BE32 :: cmd: s8 42 5a 101 BE32 :: write transaction length 1 (10) x 8-bit completed 102 LE32 :: cmd: l8 42 1 102 LE32 :: read transaction length 1 (10) x 8-bit completed, returning: 102 LE32 :: 0 102 LE32 :: cmd: l8 41 1 102 LE32 :: read transaction length 1 (10) x 8-bit completed, returning: 102 LE32 :: 5a systemc-2.3.4/examples/tlm/lt_mixed_endian/results/input.txt0000644000175000017500000000240314342422106024222 0ustar carstencarsten ## input file for OSCI TLM 2.0 lt_mixed_endian example # # copyright OSCI 2009 # # no attempt yet to play with non-aligned accesses # # syntax # 'l' for load, 's' for store, 'w' for "switch CPU" at very beginning of line # '8', '16' or '32' directly following the 'l' or 's' to indicate data type # hex value for address after at least one space # for load, hex value for number of data words after at least one space # for store, hex value for each data word, space-separated ## # starts in BE CPU # store some bytes and read them back s8 0 0 1 2 3 4 5 6 7 l8 0 8 l8 1 7 l8 5 3 # read them back as halfwords l16 0 4 l16 2 3 l16 4 1 # read them back as words l32 0 2 l32 4 1 # switch to LE CPU and do the same thing w s8 0 0 1 2 3 4 5 6 7 l8 0 8 l8 1 7 l8 5 3 l16 0 4 l16 2 3 l16 4 1 l32 0 2 l32 4 1 # switch back to BE CPU and read the data stored by the LE CPU to see how it is corrupted w l8 0 8 l8 1 7 l8 5 3 l16 0 4 l16 2 3 l32 0 2 l32 4 1 # sharing 32-bit data works fine s32 20 13579bdf w l32 20 1 # sharing 16-bit data needs address mod # first clear entire 32-bit word s32 30 00000000 s16 30 ea62 w l16 30 1 l16 32 1 # sharing 8-bit data needs address mod s8 42 5a w l8 42 1 l8 41 1 systemc-2.3.4/examples/tlm/README.txt0000644000175000017500000000273514342422106017204 0ustar carstencarsten TLM-2.0 examples ================ Dir: examples/tlm/ SubDirs: at_1_phase/ at_2_phase/ at_4_phase/ at_extension_optional/ at_mixed_targets/ at_ooo/ build-msvc/ build-unix/ common/ lt/ lt_dmi/ lt_extension_mandatory/ lt_temporal_decouple/ lt_mixed_endian/ Files: README.txt Comments ======== Running the examples: --------------------- Support for building the examples and unit tests is provided for 'unix', and 'msvc' (project and make files). Makefiles work hierarchically. The default target builds the tests; Other targets are: 'clean', 'run' (executes built tests/examples) 'check' (against expected results) To run the makefiles the following environment needs to be set: On Unix/Linux/MacOS, $SYSTEMC_HOME should point to the SystemC installation On Windows, the SYSTEMC_HOME and MSVC environment variable should be used. To run the Visual C++ solutions (.sln) or project (.vcproj) files, you must edit the Property sheet tlm_examples.props as follows: 1 Select Property Manager from the View menu 2 Under projectName > Debug | Win32 select systemc 3 Select Properties from the View menu 4 Select User Macros under Common Properties 5 Update the MSVC entry and apply The examples: ------------- Each examples comes with documentation in the form of a set of powerpoint slides that can be found in the docs/ subdirectory of the example. systemc-2.3.4/examples/tlm/at_2_phase/0000755000175000017500000000000014342422106017504 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/test.am0000644000175000017500000000565514342422106021015 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_2_phase ## %C%: at_2_phase examples_TESTS += at_2_phase/test at_2_phase_test_CPPFLAGS = \ -I$(srcdir)/at_2_phase/include \ $(CPPFLAGS_TLMTESTS) at_2_phase_test_SOURCES = \ $(at_2_phase_H_FILES) \ $(at_2_phase_CXX_FILES) examples_BUILD += \ $(at_2_phase_BUILD) examples_CLEAN += \ at_2_phase/run.log \ at_2_phase/expected_trimmed.log \ at_2_phase/run_trimmed.log \ at_2_phase/diff.log examples_FILES += \ $(at_2_phase_H_FILES) \ $(at_2_phase_CXX_FILES) \ $(at_2_phase_BUILD) \ $(at_2_phase_EXTRA) examples_DIRS += \ at_2_phase/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_2_phase_H_FILES = \ at_2_phase/include/at_2_phase_top.h \ at_2_phase/include/initiator_top.h at_2_phase_CXX_FILES = \ at_2_phase/src/at_2_phase.cpp \ at_2_phase/src/at_2_phase_top.cpp \ at_2_phase/src/initiator_top.cpp at_2_phase_BUILD = \ at_2_phase/results/expected.log at_2_phase_EXTRA = \ at_2_phase/CMakeLists.txt \ at_2_phase/build-msvc/Makefile \ at_2_phase/build-msvc/at_2_phase.sln \ at_2_phase/build-msvc/at_2_phase.vcxproj \ at_2_phase/build-unix/Makefile \ at_2_phase/docs/at_2_phase_example.pdf \ at_2_phase/docs/at_2_phase_example.ppt #at_2_phase_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/tlm/at_2_phase/build-msvc/0000755000175000017500000000000014342422106021551 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/build-msvc/at_2_phase.vcxproj0000644000175000017500000003146414342422106025203 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {487A123F-10AC-4532-8D27-48DB8F6D4684} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) %(AdditionalOptions) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) %(AdditionalOptions) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 %(AdditionalOptions) ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 %(AdditionalOptions) ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_2_phase/build-msvc/at_2_phase.sln0000644000175000017500000000233014342422106024272 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_2_phase", "at_2_phase.vcxproj", "{487A123F-10AC-4532-8D27-48DB8F6D4684}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|Win32.ActiveCfg = Debug|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|Win32.Build.0 = Debug|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|x64.ActiveCfg = Debug|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|x64.Build.0 = Debug|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|Win32.ActiveCfg = Release|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|Win32.Build.0 = Release|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|x64.ActiveCfg = Release|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_2_phase/build-msvc/Makefile0000644000175000017500000000056114342422106023213 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT=at_2_phase OBJS=\ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_2_phase.obj \ \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/at_2_phase/docs/0000755000175000017500000000000014342422106020434 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/docs/at_2_phase_example.ppt0000644000175000017500000103200014342422106024675 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`( */ 0`DArialr Newmanx2 0x"D-3 00000ewmanx2 0x" DWingdingswmanx2 0x0DMonotype Sortsx2 0x@DArial Narrowsx2 0x"PDTimes New Romanx2 0x`DTahomaew Romanx2 0x"pDCourier Newmanx2 0x1@.  @n?" dd@  @@`` xT     4C19-?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8%<4dddd 0g4^d^d 2 0ppp@ <4!d!d 0<4BdBd 0 ʚ;ʚ;U)___PPT12 %___PPT10D-3 00000ewllp2 0p"DTahoma0ewllp2 0p" DCourier Newllp2 0p1 ? O P!7, / 8 * # %405/p@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <4X(PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> j( ???G   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  Nܱ3?Rectangle 4P 3 T Click to edit Master title style! !.  Hд3?Rectangle 5P0 3 RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   N<3?Rectangle 6"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!  drs/shapexml.xmlVnF;,HT$GBjCX,ɥz.yh^6~B٥l($ Ktf|)[K[F$̊+d^LDi+xkJƪ*ReӦ`71Iˑ&v3OȜ%WoL q& A^o鈱8Q.ں w EfU8D-*TQ@9љWqPAJ{#}"Ԉ d /z*B P4q |pfwOݔSaB rsM9} y.o3 w/na\$K;Xc{scz:9IhtPx@t&8ԎƱŮҧIC=M|㩝4˛Gq4N*['aqQ+ƹy6:xf:{9>LFQy=Ά`r .Xc͐ \6eQPs;oa4$ *M5nKt6K/qv)-M@o} LQ8+{ay!mŹ!^ǐ[Oׇ?uo;LDQi);D|Y9~ FȁBXA# 7@ŏX(7f#eƿ PK!FPdrs/downrev.xmlDj0D٢1ʼn$mQK28_Ef8Y'ӳ|Jg0Sڶ>?Va,I8Sjr'[Ѹ-KJ8#ak7S-WO nz.MQ1Bėnwy*E6Iy{3=.ExWt)PJB1 `|ZU"y /&S_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!  *drs/shapexml.xmlPK-!FPtdrs/downrev.xmlPK{, 3   hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!o!drs/slideLayouts/slideLayout1.xmlX͎6;:x mp6F gZת)J%)c["]1QHW F= 2M0vGn YhwB_dh2-h331.op%XåXrQz~G81`$BA,{%w^^802-{ōAZp2Bn)r5CՑ)<مwˤ`*y$֩\ .K(຀%aN# EA&MȺĤ6`5o9"`]{=ۺ^,3*ORDd <ٮ,Flu::Q KBicw\g(Xv<΀o'l] >ȗ8 鞸Mc@#.k*v+;t (8q ^u+<cAx^$P<`8H(pPBpNH(pX\NpP<$4G%CB5AxbRnO}?w?}vu><)2TY:Ĝr}G>P 5+I8&9w0ch7Z9b#ZJJ 瑂n8C|Pۍ5T*P/xPxPxPxPxP~x_}}uw4=;D}w׾e'M]Gw#+޺_+Nc(C )ɴ2!3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!o!drs/slideLayouts/slideLayout1.xmlPK1PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> x"( ?E x x A"??"system_c_title_9Picture 2system_c_title_9 x N3?Rectangle 4P 3 T Click to edit Master title style! !. x Hyt?Rectangle 5P0 3 RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB x s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0planH 0 444U4( xL 4.  4 `Ky˼y˼?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!O drs/shapexml.xmlVo6~kΒ1ItS$QjH?;Rhx}|iX)k290B–yǻOR@$mVy/6?2YMG#_Ԫ%v`W4 xqRc2E7wlM_gRjAI+q*G[AHcfrKh0C%Ĵ5kVTz.UL9a!˺t9rÖ䇽*=O[bn*[cJl2Vni6Axzy14R !g|љ>(jxጽk>X6#֙z4  4 `y˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!ebX drs/shapexml.xmlVMo6 x-cE4n`Yh׈B^%YM!Q<|rQ2DMUjz 4 H ?Rectangle 4    4 `@y˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!~r'8drs/shapexml.xmlXQO#7~`BBrCGz!Z/~ ^UD7ͬyLZWMΤNMV賄:9sЙPF˄_J~ͻj* OKZnl))zըn Mz_%.`Ig)N{֚qn+pUS2Yˉ.Ur2G$޸FuM.> E ynU!;&He»[BF0b 瞥Xu'KI6=!:Abd( x:NBU!A*vN/8= )f(R|E ,9GԫE c>*DQEj> H+.3ULAn%M}2y.SXM,wT}qN? [5QGf<r# dD9?+B2yO6Cf8:C PgʊL'b2Fk >jK1֒@A&3rS.R8g B NEY(h7Pvzwn?Ѧv^Ʝ0ؘ=N%k#)5E[b g&ddH2+Pf`RYIղ_~W5{D{-f2:kҡIG᳒.t6=-nkM5^糒']w1ˬYfu_uxx^p PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!e˽] drs/shapexml.xmlVn7}/ Z8!6관j>sw+.ɒ\]9C$y(93gMJ)Ð3i*[+\O'(L-5[_&16a MP-d+^c}+"y DՃ| e52y3UhQVYKv[>!V"~&ڋ5 O/-Mxo )@_# K S-X:dD^ o'|XzShjf/[bi|{l9tmhGEL& [W!*x/Еl΁<G袂{42(V C gS{ [j|:N ͭBsV-P_򻩓KJgj0oMP싛[[o)@SZX D >Kp5:;cbZ$p_wLYJ ,w+"mS3w9h[x'vN~?7)@q 8tJhX[LH@FfXN#HF4Mt6XjuZD;JKC'MFTІ̩X-E4| = xu֜HY7UG=ӹlQ;7%~z1+SyHxP.2{X&ҁ*>fmh7H)є뻄#&njV܊~ݫ%(f?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!e˽] *drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,     hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 f0y˼y˼?Rectangle 7"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!  drs/shapexml.xmlVn6;{m/"Nn`YXH'E/)Zz o(ڸyh 3|Я߬ VV1^u8:1ibmkYN2ZVVї_.UɰYW2Kq]%KY)ƻB8,U v:v!r͏J̒fi{Cδ(pLÕ쀷C I&OrIAygQI3ckRqnIU#Sʥ\2w["JubC-ua P8[|cRD3Dי-,c87QۘA6cv,C uSgi+Nb(մrt6osרaM݁O8d#9ZT^}D3z'rlO??=ƞ~}Ԋ0%P4Chd,T<;4'D0K΄4W?QC(!x?u9PK!Odrs/downrev.xmlDKK1!\Mfc"*b>ܙ N!\p-H>hg%l픶XhΒ#XOOfX)wk7ebCPwd0L@6wc!MK!ܠÁ;6F8-^VEXKzB 4 s *ηo~ ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>x.lM0Yn+eQhr%E:Gwstt|%*\mz<.N[F5#B+%xQs"B٘$8s.ҌIbtΔK3C>zRv{HCurjLq~6z!$1E̽)-K ^WGjIN:u`KBB $͕6d*F(f)9ç , ů0'ʕl6 VB;ճeX"'1` L˲j) 3Y(`89=ai՚P uݝ[WX~!Kf ]Zkg\Y]u r˜zcÉ?uNb͈֠<>Yݮ>߮Kͨv"XksR !y^X겧 |-U*ΚRvz{`OPv0=`kĢN=Ib"6t"oE^ [YbT]ҬJB rpd(`?Td PhXh6Tv:ͼlU*k f{*nXn_PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10." 0 ME@(  @ @  x<0e0e?Rectangle 2P   8$AT System Example - Annotated Timing @  x@ٮ0e0e?Rectangle 3  MThe Goal is to Illustrate: Application of TLM 2.0 in a real system Non-blocking (NB) option of the approximately timed style NB annotated timing has been referred to as "2 phase" Medium complexity version of non-blocking/AT Possible Applications: Architectural exploration Early software development Crude Architectural VerificationbccVcc  V X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"6 0 L6D6  H5( ?E H H  xS0e0e?Rectangle 2P   )Example Block Diagram H L\?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H b?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx H hmo?Rectangle 21p ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_2_phase (m_at_target_2_phase_1)b* gGg  G  V]8Xx" H ho?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   SimpleBusAT (m_bus)` G gGG,  V]8Xx( H h4o?Rectangle 23` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_1)b gG g G   V]8Xxc  H ho?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_2)v gG g G  G   V]8Xx  H ho?Rectangle 25` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_2_phase (m_at_target_2_phase_2)L* Gg G V]8Xxb  H bЅ?AutoShape 26P@   hdman`  Arial&Monotype Typography  < V]8Xxb  H b܅?AutoShape 27P`   hdman`  Arial&Monotype Typography  < V]8Xxb  H b?AutoShape 28P    hdman`  Arial&Monotype Typography  < V]8Xxb  H b?AutoShape 29P @   hdman`  Arial&Monotype Typography  < V]8Xx6 H S ޽h ? ̙3380___PPT10. "" 0 QI@P(  zSmM P P  xۅ0e0e?Rectangle 2P   3How to run this example (Linux) P  x4t0e0e?Rectangle 3P0  PSet SYSTEMC_HOME cd examples/tlm/at_2_phase/build-unix make clean make make run >QA AAA>V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0 tlPT(  T T  xt0e0e?Rectangle 2P   2How to run this example (MSVC) T  x,t0e0e?Rectangle 3P0 t Open a explorer window on examples/tlm/at_2_phase/build-windows Launch at_2_phase.sln Select  Property Manager from the  View menu Under  at_2_phase > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run,DZ%A C A  $$ ((,,00 4488 <<      A $$88V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"] 0   `X_ (  XY X  xXt0e0e?Rectangle 2P   %Expected Output (expected.log) 1 of 2*& A    X c 8TextBox 3=0   hdman`  Arial&Monotype Typography  : Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic & Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path & Info: at_target_2_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns)"ffg/X  V]8Xx6 X S ޽h ? ̙3380___PPT10.ntDw;"{ 0   p\} ( ?zSmM \m \  x "0e0e?Rectangle 2P   %Expected Output (expected.log) 2 of 2>& A     \ c 809TextBox 3=!0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  0 & Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) 8gg'2 >KE9  M 6 V]8Xx6 \ S ޽h ? ̙3380___PPT10.ntDw;" 0  33`(  ` `  xpX0e0e?Rectangle 3P   &Initiator Module yz P  `C ,Group 129"P     `C ,Group 130" & .` Pd^?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /`C ,Group 132" > P  0`C ,Group 133" p 2` de3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3`  [B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1` T?Line 136      `C ,Group 137"  # (` Pd?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )`C ,Group 139"  > P  *`C ,Group 140"  p ,` d3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -`  pB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +` T?Line 143    `C ,Group 144"  $` P ?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %`C ,Group 146" B &` T?Line 147P P '` dt>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p `C ,Group 149"P p  ` Pм?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !`C ,Group 151"P pB "` T?Line 152P  #` j%,<>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ ` j֥o?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx ` J?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx ` ^$?AutoShape 156p V q  ` ^ ?AutoShape 157  ` ^ ?AutoShape 158 P  ` ^$?AutoShape 159q Vq 6z P   `C ,Group 160" P  ` dTh3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB `  LhB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   ` ^4h?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   `C ,Group 164" P  ` d0$h3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB `  p0hB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  ` ^Dh?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx ` d\]h>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx ` dch>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx ` dloh>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= ` dԄh?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> ` dh?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx ` ^ ?AutoShape 173  ` ^ ?AutoShape 174P ` dh>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ ` P(h?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB `@ Z?Line 177   6 ` S ޽h ?o`````````` ``````` ̙3380___PPT10. ""b 0 aaBBh_(  h h  xm0e0e?Rectangle 3P   )TLM Interface Module  x   hC *Group 35" $ =h N m?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >hC *Group 37" 8 P  ?hC *Group 38" p Ah bm3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bh  mB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @h R?Line 41  x    hC *Group 42" ! 7h N*m?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8hC *Group 44"  8 P  9hC *Group 45"  p ;h b 4m3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p hC *Group 54"P p 1h N$cm?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2hC *Group 56"P pB 3h R?Line 57P  4h h%,pm>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx h fzmo?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  h F}m?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  h@ Z$?AutoShape 6 v/"  h `8m?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   hAC *Group 59"`H  /h bm3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0h  mB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  h bm?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ h bm?Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" h bm?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM h bm?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx h \8c?AutoShape 80*3  h \8c?AutoShape 81   h \8c?AutoShape 82b  x   hC *Group 83"eB -h R?Line 84P P .h bXm>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   hC *Group 86"c=B +h R?Line 87P P ,h bn>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx h@ \8c?AutoShape 90*eD + h \8c?AutoShape 91c  h@ \8c?AutoShape 92*D M h \8c?AutoShape 93 s  h@ \>?AutoShape 94: <  h \>?AutoShape 95g: : : h \>?AutoShape 96&: < P  h \>?AutoShape 97* < @ T B h  0nBC+DEFQRUVW8c?u+ @  28ryU;@+Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE h PP%n?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  h Z?Line 101Dc; !h P03n?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB "h@ Z?Line 106; #h PAn?Text Box 107a O 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB $h Z?Line 108(  ; %h P6n?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &h P0Wn?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'h Z?Line 111vkB (h Z?Line 112;-u5< )h Pln?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator_socket*  V]8XxB *h@ Z?Line 114[+6 h S ޽h ? hhhh hhhh hhh.hh h,hhh,hh h,hh hhh h hh hhh h hh ̙3380___PPT10. ""F 0 F F00lD( " NhzSmM l l  xrn0e0e?Rectangle 2P   "Target Module 9v P  lC (Group 3"P  ~   lC (Group 4" " +l Ltn?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   ,lC (Group 6" 2~ P  -lC (Group 7" p /l `n3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB 0l  ؋nB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB .l R?Line 10      lC *Group 11"  ! %l N4n?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    &lC *Group 13"  8 P  'lC *Group 14"  p )l bn3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB *l  nB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB (l R?Line 17    lC *Group 18"  !l NPn?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   "lC *Group 20" B #l R?Line 21P P $l bn>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p lC *Group 23"P p l Nn?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p lC *Group 25"P pB l R?Line 26P   l h%,hn>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx l h]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p $pC *Group 76"P p %p No?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p &pC *Group 78"P pB 'p R?Line 79P  (p h%,Po>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8Xx(x   pC *Group 99" ^ p foo?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx p Fhp?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,2>)L 0 P2GGG  V]8Xx p \$?AutoShape 13  P  p \$?AutoShape 17PPP   p \$?AutoShape 4601P   p \$?AutoShape 47ppP `  p N`p?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (2)" G V]8Xx  p V?AutoShape 51   p V?AutoShape 52@ c p Nh$p?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx p V?AutoShape 54  p V?AutoShape 55   0  pC *Group 89" @P p b42p3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB p XjJ?Line 84 0 0 B  p XjJ?Line 850 0   0  pC *Group 90"P p b=p3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB p XjJ?Line 87 0 B p XjJ?Line 88 0   0  pC *Group 91"P p b3p3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB p XjJ?Line 93 0 B p XjJ?Line 94 0   0  pC *Group 95"P p bLp3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB p XjJ?Line 97 0 0 B p XjJ?Line 980 0 6 p S ޽h ? pppp p p p p p ppppp ̙3380___PPT10. ""H 0 HH,,tG( zSmM t t  xdp0e0e?Rectangle 2P  p #Expected Timing~B t VԔ?Line 4B~B t VԔ?Line 5B~~B t ^8c?Line 20}B t@ d8c?Line 21}1 t Hgp?Text Box 22p   hdman`  Arial&Monotype Typography  +nb_transport_fw(GP, END_RESP, SC_ZERO_TIME) , ,G  V]8Xx t Htp?Text Box 23m   hdman`  Arial&Monotype Typography  hTLM_ACCEPTED (GP, X, T1)  G  V]8XxB  t ^8c?Line 25{B  t@ d8c?Line 26/{/3  t H8mp?Text Box 27D   hdman`  Arial&Monotype Typography  -nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) . .G  V]8Xx  t H~p?Text Box 28    hdman`  Arial&Monotype Typography  hTLM_ACCEPTED (GP, X, T3)  G  V]8Xx  t NLp?Text Box 41 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8Xxh t Np?Text Box 42p: ?0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  2select_initiator (enable_targeting_tracking=true)$32$ V]8Xx/ t NTp?Text Box 53Y 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  y SimpleBusAT$    V]8XxB t XԔ?Line 312 B t XԔ?Line 32: kkB t ^8c?Line 33 j B t@ d8c?Line 34 b 2 t Hp?Text Box 35( L    hdman`  Arial&Monotype Typography  ,nb_transport_fw(GP, BEGIN_REQ, SC_ZERO_TIME) - -G  V]8Xx  t Hp?Text Box 36 |    hdman`  Arial&Monotype Typography  mTLM_UPDATED (GP, END_REQ, T1)  G  V]8XxB t ^8c?Line 37 r B t@ d8c?Line 38 z 3 t Hp?Text Box 39     hdman`  Arial&Monotype Typography  -nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) . .G  V]8Xx t Hp?Text Box 40 [    hdman`  Arial&Monotype Typography  r"TLM_ACCEPTED (GP, X, SC_ZERO_TIME) # #G  V]8Xx/ t NLp?Text Box 54U p 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  y SimpleBusAT$    V]8Xx t N r?Text Box 55U  0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ^ at_2_phase$   V]8Xx t Nhr?Text Box 56;   0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8XxB t ^8c?Line 256o6B t@ d8c?Line 26joj0 t Hr?Text Box 27,   hdman`  Arial&Monotype Typography  *nb_transport_bw(GP, END_REQ, SC_ZERO_TIME) + +G  V]8Xx  t Hr?Text Box 28H   hdman`  Arial&Monotype Typography  hTLM_ACCEPTED (GP, X, T2)  G  V]8Xx !t N/r?Text Box 41 h0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8XxB "t ^8c?Line 20*B #t@ d8c?Line 21* $t H @r?Text Box 23J    hdman`  Arial&Monotype Typography  iTLM_COMPLETED (GP, X, T4)  G  V]8Xx %t N=r?Text Box 41:  0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8Xx2 &t HVr?Text Box 22 j   hdman`  Arial&Monotype Typography  ,nb_transport_fw(GP, BEGIN_REQ, SC_ZERO_TIME) - -G  V]8Xx 't Par?Rectangle 42 6 9    hdman`  Arial&Monotype Typography  < V]8XxB (t ^8c?Line 33]r]B )t@ d8c?Line 34r1 *t H er?Text Box 35 T]   hdman`  Arial&Monotype Typography  +nb_transport_fw(GP, END_RESP, SC_ZERO_TIME) , ,G  V]8Xx +t H$|r?Text Box 36z'   hdman`  Arial&Monotype Typography  s#TLM_COMPLETED (GP, X, SC_ZERO_TIME) $ $G  V]8Xx ,t Nr?Text Box 56 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8Xx6 t S ޽h ? ̙3380___PPT10.uk"' 0 <I( NhN <; < fPy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2    <  ~@y˼y˼4?Rectangle 39 3   N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0 Da(  D; D fhy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   h, D  ~hy˼y˼4?Rectangle 39 3  h f- typical things   V]8Xx6 D S ηo~ ? 337 0 0Lg(  L; L fHy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   r2 L  ~ĵy˼y˼4?Rectangle 39 3  r l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33# 0 d{( h d; d fry˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z d  r0e0e4?Rectangle 2   rF d  ~Hry˼y˼4?Rectangle 39 3  r *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 d S ηo~ ? 33rT@m59@O]AA,! (%5* V/Oh+'0 0< ` l x AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne93Microsoft Office PowerPoint@ @q@ 8@P& Ghg  ,T%&" WMFC]* <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    Root EntrydO)PicturesT'Current User SummaryInformation(8PowerPoint Document(/DocumentSummaryInformation8systemc-2.3.4/examples/tlm/at_2_phase/docs/at_2_phase_example.pdf0000644000175000017500000022501014342422106024647 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xTN1 }cfIܜ<҂R*J * eUDh9slσ ,b<4Vk͈n ^7g+q׀gαγvhVyǍHQŇ~}=9nN\Q +k]&迦ʢ%F:Q_3(!&`MTɈo/oIK@M0y/?F͂ бi;3FRɱ(ɽ*X#KqF#tg> H`BC6.jfSvVE\zN,uL:y.\8E1v=oG:s?5zSD4 *Qt%`"F0VEBR)Kc@vQ$u|tWҭKHSj"ffl&穆 H,u G hendstream endobj 6 0 obj 670 endobj 14 0 obj <> stream xX[s[5x8'X[ 0x8qbK'Αvmĉ'js.U#ҧfh2K.}-F&ȝx5e&}n/I]hrt~[=1,Rt`ۯH|N U=̀ZNGɝ,7uWC9hŅi&30\b3ikr;jؤ9 ְA!w^x]k{-[ c2Dv$/]: =PEgc z?"c1;ZZˍRuEuiiǍwPҔey5i&&ul^sXN p J4H(J$U<`($ !.taA*3 %\p5܈qN(geU3[!h1c  ]s&si}[D*y Fε {*XvƕW-\[ G]J5Jn.ҌzU<߲ ܘBa8 !t ENip>ߜNyT\W'*5mXf 6Q&Yl2e7 }_ $*w2*ń`#̫;=osN%#KGd"mڱ.ZC@ ܡ`ڃ:l gJZqV 8q Hc>Ђ}E_r')&oY|oGFŎS&&-Σպz)M8'ezXnftEjvp]l6է( sD2_U3;p]!*eW!r!߹my40цslW\T^ֺ ܢj=ٗO̕~#rbS  HȔ.vbBN:.N82H"UE%,zglH!> PV%ȍDHwD/]`tzi$dM戉+ G^ƛ¾g9$ _ f+kCR"DO n n<8y'whʊdޚnC}nP.yݘM*4Gb2E\G_#IĨ|p]'8,ЅфN]8"CxրTKrMlKC'XRCp&hH{ 63{ ! I W$^t/$L ̟NGϳendstream endobj 15 0 obj 1452 endobj 27 0 obj <> stream xWKo7FImy!EdU]v]gޤ 4},߆|y),N$+i/hF*\c{?ׇ V[*Zb,{lK¼Qd{l WD6}qt O. ͕PDnPΌB+9謢5#[!H\RjzUbcw n7JGq˷vv#7:ˍvwOy&Mcg6lMRܚ͍)ʣ(2vc¬S].T=v3vc10yUN)56ߖj |#KvƛBi&JίoKJN~( tC= %'S70]P)i5+Xendstream endobj 28 0 obj 1275 endobj 38 0 obj <> stream xUj@}\mh( ũq괖c;1wv)F))ƶ8ٙ3#" Ix0U8'_'dm^h3Ȣ$^럘M p[O۳brX &^ Gǃ0:rبȝ[.UgeUx/Iœ+%פd8>x)&IU_EəFKKK40j-)덦fT0(p(x z )tE',p!%eoL;fmZJ n3⎎ե>-]"|?ZkK SBI+:6, 버~UAdɉ,؎ʍз*_yFJ R H`[*nR`BDBt ih{{F0 D]"cA;]i`ah'(M90Q.>xCD25"d{6/mKZ=UHH ^whX,PWY:@oݞnmN͎6ubY]9Ѹ#$9{$2Hv LL}Оmp;Ĩ endstream endobj 39 0 obj 621 endobj 44 0 obj <> stream xXn7E_+q׀h|CEu8(p,9raEp'/R:Imc̙Croj@<$|^T:GɄ_Wrr'Ϊ7{:~Jun^uvqSG$+UjS; md11Ԕ~6F[qU/p10z?]m%x^mo9Ӡ0uB/yA@X-0iV},hTf :Ỳ !@fEB-02沛k SV86mz|$n3D{L${WkQ/{ׄze}skqZ;es%bfUмk[ [k7ErSnAcrroՋq,i(הN4m,q]~lGA|:I vWnb6WC j fs$JY{Ҽ 1JRADas, he&C Z3 XDX[ɳVkӕBB+,e5{u1$4'iIIS \b'Y;`c${(tF}$ =%K X#iJVIzO+.Iv*0q 3"ъW$iAI q #gKaV즱zEcfTjVNE_~% fID1!z FqO6r(dL gI5lF@bx9y> stream xZ_o6קУԜ(Q"v CdA?I8vbg)wteC #O~xGǂ{(i2+xz?z7?ϷVfz=ɑwџ=5A|7s?`^&1-]xͳY_~[S,1JѸx8?W'1_Lb΢p A&,[pr\ad"`GL P$!e82Ԍ yjTQT?qG*x)2kf%L8O֜SŖMP}b)X&q#}^3} @LŽ,[0@k Fn($bIړ|k$JJ_`R%¡NEi]KZP#@8hp)ôp hL`8z$,g.tOh^lL燤sH: -')A=!Xsgq+ڝܹEY.;]V>*Dj7_wzk'c™ r.t|=bПVp>h;+~-1Q//1+,yhn7\9;bboA;ΩSt(r"r4 "Q",EG v跾.P[0J][.jlusv[*-w~kv9P>SQ"!z>9۶6 뗅-)s*b9S@@|Tb QSE'k3F_\.26qٗ${x>WmS&?Ik6?Il+7P7{J mQ":C[.xSox:\G 'DCr_R!Sbjoj#fDشH"rrE>~7FObdWVh#ȯ2Qoal l/#m/:W7:T}OVF3J.wn`7m:>4]EVv[n88-۴8Wy2%Fendstream endobj 51 0 obj 1554 endobj 56 0 obj <> stream xZmo6_RPsD[AiRdcq;R:; ޝsQ11`0$|wZLDzg1gE#k1G~׍Y;\ ZJ',9腜E)0fy'\JL FZ2X\ڌPEe44 ;frFl aWH&EpD,S3/a؉LbZ hWz㚌 kqWIM%-\4屟,VxmQ#S"K%<̧E>[qɄ¬Riij d _0UO_>ӌ?ӊ<€#4}fF{ K@:PRHOa H:gb1e-x9EX VSϚcCr!H3A.NFfo"1]@}~TY=^):Cg,_qpio$&h3@^sgM3[tF9\~5^qMd?:߀7@=^+I.|tp(Xvv ]jסvokZw2 ~E1hȤˏ{]Y\a.v4IDOĝފAqѲvmAYΈ] p U]Y"6һ * j TW>\M~R ڛΛnqcd38'=K{bKɺ*@o``{\tŇ@t c/q05 *>#hѸym2 8=jEnw)^cv@l1wnXŦxdH$'fJDR&xZ#yn%>33:X&qSЕ4[9B*} GWJzM-D+Qs+?Go+E-n&Y\\1eg4?8q厴U ߽"qN߅9t/їm/N9O7D]<޻0E=A]4|<x uc?(s:f{NI3+^*nؾ;uK[Aͪ]v}`X7+&endstream endobj 57 0 obj 1534 endobj 62 0 obj <> stream xYo5!J~k?"m"(J6m.\ʟόk{ܶ 袹9عh9resH[,dY܆ŧ?hw$U9Y7'?4{0" IF\m^DXU1AwnF~ǽ\4I GSG}˷W vs|4ǯAl~i՝d ՝&Ux 0e5wyKkc\O).g8G^7(ѭjcvء(cM^ 8(-t$: Vd$]%Uҭ9ˤvN(IϓtaC[Oa{B{oGAC׼.eȋ{V^^6d#Ĩ? rx}6^cBh 7g hg,I$${TG.zk0P&pt{zpi[K `4`@0aZ; J3$H*I$e䃥TH [c0܇۵gU&OMn5QĝE8I'EƘ,9V -"DzAcE_Ӱ-n Cp}fcQm'C8pyS: NS5#?Fw0L";zŀs{_X%7XJHOag#Wݝ 7wipy /B ݗ_YaPe\:g(w{*B.}bdĝ&'`n~zY1~* 9!1"1 U",N(*s/ C;d[EK38hL1@XV۪BM 2fjW2ό>'!ČxWtRs+d5bN2'r~!C*~qE4L:s"k* F:7)0r`0:["ZnpӞ.%qw1p+#E$:=jtPe.W #n8Ĺt CRB-\Nj^^&'Ks=)vE Ac#EҗxRgDv g$zsB 63Kڛ%Ƃ>v. F̍P=AÜ;.c_8VН$IV&Qrendstream endobj 63 0 obj 1710 endobj 68 0 obj <> stream x[[\qF?8mqNw޺ w61!yVxFZ]O}_oE4m -{5iR{4Ł,>a \WR5qþc)?'POatOչm.i*4/0˟_IvKq>?_&MnOWzһWZk\Z"j"D>Ka$UH4j`J (x1 Q}>jɗGη~ M8͏c[8COET\~p`čuЏ(lYMlXvU37t]7y5ڨJ7 j!?W8n -v.e8+ F@ T6E\Sq iG0\3rͮvA;e^a"jft bR";Hn~=j۬q<q~)ˑs xMap^rFd>'RvYGR'gQ'g|/@Tcx)#xl1} xB)}-Ȏ˞xzaP"RB2k *zQpbRfKsPkRO[wOD0)I B q`FCAG,6J劕(A؞-bbD[fzY8[wXjCCJ)zocXHY+Z"S c_LFaL*نubRB Pta&Q9@f78.IGw PhHGaR# c`10yWuvZVɁ9e1)h.¡wqG|ykvкsp8"cl@:ĴєR:b;iLL zw9(Ykv } RBB3)&/RD68Xjq!!?,&ebõzB%9lR`ۘ8d#>%L^sƉ3)Y/"n,6b] 1)18Gx80b Sʁ{N'R9 G݈Ⱥ5g%DZl17Eb처^v)gɃ;NwO >R ^p-vCZpqpljmm,2w|>WEGv^ꉥ6?w|bmk}FuhX',&%ms"լ]už%e6]J.w ^Uj3h',9G+}bRrs3m ʵ!rK&gZcȡ{6E<+ W*¼i'--+ۘRFJ)'ƉV>%R3Ό'R2 P靚RB^<(V1L@ZQpUJ90/ HeXkUxm81xjqq p"m0!ewз  Dfk7W,g?2@hAW\,&ϖ5.=s,pfF!/i^[ {y">ׇsU,C أYvd1)!w pZbPe 2"&U@6wKcY匋`0uaC7̼1o@X,~qΰ 9#)1xq6wdt8 r_ŤRڝ%Ua~w:޺-C_6.0"/&%j==?>lhNesA˧'t;k %lٹy}n*)GWﱔmūV͊䈹|,U|Y?Rj.,筶LzE*{Im@-إf(h8}TeYbR 7=Z.W}].\ wi o_Ώ/'Z\x{CAg Y0qY3 `G bV1_&mc\7Th e4F;w~} @e} 'goQ>q񗃼>8R=dNpYhtcb$8hT|P?=i n}[\]囝\[m_Y:0ٮh*n(x-duW᳸mLvZG46=1ljh8c Grh]84:\W9H]Ԏ!=ާ?^`D{uєX=`%Hib;KnN,niqk;~w?SՂMSᢤ!`خ=PZ '.pE:hp(jʅ ]#AG@l#endstream endobj 69 0 obj 5067 endobj 74 0 obj <> stream xY[G8 Ks"]}EDH",gCv|_UOϜqQ "|;S]]^&ǿ 8ڽ&w(]??=o1៛wMw:3e~K}p͋].Y3{;<;r>Ů΁4[|~5x)19_tyiÏu*a/? GK(asp9֕C!$ǁO2B>Z@!6즃Bg[r.wlT\MWQ%] pzy!J*qe{4ЫAw=lX޾όF?.zu@0PE}Zv $"?`/s#D,7v2i~y~\9t.BA(D倸 ׏;IeGAB_t5Í;hsocre{9m`y / mݥZK-g^%a>OQ`~)!$z8H=zg5,Djsnt_%ᾔn{oq۩q ̝b |ScjP P/\]j)"iD6OB<&L=PyDwS}^ʑZ{f8ETl#NmW 9P=G%z4) p p'MC!c%J:5n`Dhi N`f'sɳaOژCKC?ȣ`=GWC<\/ސ Vgn*115$m:MC)bhtXpZh"AJlǶc R:3>-{jR5%I(cR7)UP0=Qc\Ԗ87iH_Qň3'퀂˟oNs8M O7p:lf9ΉX|-V8ϓSj+krp-ay#%99 ldqX|>O -8WNb"+e99CeBT1I 2|AajkRN)Gy㼒&bfWN kR%#~m)T*`ny LNIu-pĞ̦I*j$"ܥͱ$<xw`rŰr22ng,jђ*$բW)>/3iLjs;8UT3ɴPlŲUX<"'g֜LdT-'4&-jYU 4-T&)=NY-h0i #UrܻmVMNA8꓇ja'U`Ztz}#b2JeF‘.!X\g-(g(;eZ)32I,=/CS13De44-cj DGZV{~7VFBp6FZۨFzv{^N-Y!cS zy^jt. .#^'^vCn|ұ,7s`&V2tWh4A]hS-;A-t2&lk~)+9A7G4Ďb<M&vhY&29 99Do~a؃хYBO0ۃ}Ap(NםLfΉ5CqRh"&me}gWɁI7VʌD)/&N\/[Uq7tr:&7}[^[/jY6W~u%> stream xWIoE>$ᐰZ9uGLSjC8Œ;ںf<x7Uoz{Uu֋IR/Suw)!z_Gdki|?dϟUW:?t{>[\D 8)2OQN IqVn4V?nZ:?)[gBh_CYNBHd?}Dr2b2h('kakx;I_.0MA049yz!(wɌ51$vx;FR 'u,cevvCNY-a y[Kty:^2~>OL A b,0-V;T_`lpdm )r$ \~r$v pz9msFӽ_ + ç@hr=~EÉqrf5pX$NJrjr(Yި9}i=:{m]%Fxm]LzCߏ?endstream endobj 81 0 obj 1458 endobj 86 0 obj <> stream x[,Y@6< Dmư']WU%ɑxHP8vqZǷ`LXgzYsNtwSi o<x!qG;qֶ ƿ{ɷaeOƟƃ\ }̏n\_2l='Si=r߾ko<14go4MeYqS<>{7Ԗ9<ǸÛ盦ƍ?NX뼎{myƼe_Z=^ }s]#"lo=3ivG~xd,{_ۨ,g:*}[Q0cYیenZ`"&bYͰa" &bYͰa"UUXVV&bYuXue``"UUXV V &bYUXUeUaUa"UU-yEU*a"U@fDܓ3`0*`0*`0*`0˪D, LIJ`5D, VLIJ`5DL\VM̴n蹙Vz71 mO,VYVh{.0 mO,VYVh{0 mO,+,+=;LIJB=7˪ =7 mDͲBͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7*@ʹ =s3m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7Ӫ=7Ӫ=7Ӫ=7 m/YVh{AͲB zn^se|mgL5}%m}[IOc o.~ZS,qMOWwOyjm᷏4C;DZoq_p649Gֶ֥-n[lK̷SdT1uo}Z}crr={Dimt78>ͧemYyWǧ4S?ݟikcb86oor{ȘC}xN{mll~ik1_۴z i<× ymOmyLZ[ᄀ?82y)S;r~0/'-~m3mS1zĿ֭Z~Wވʶ;~/>}OidcO}ܧ~K2 \vmsOqy[*q;JxsE9/_x5gMނ8/>*/oo{"#[(>nbU퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fZ蹙VznU큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fZfZfZfY=7 m/YVh{AͲB zn^se|*Ͳ(ry-pت-rVzs-nߖDOTvK~^/m{:د}X,Si_%ﯽ|{/ⱴ_(z:1T/̽BO4/7Ne}1/cOǭ/|~>n㎏Ϗ?s"svB=Ȩۡr}ܿ"Wܷ{!vϣXvE>[]g,}hqA+gjXV fYͰa" &bYͰ0!ϲ0˪êD,rUUXV V &bY5XU**LIJ0˪*aBJX%LIJJX%LIJJXL)UD,UD,U 9dU`U`"UUXVVLEV&e5jXV*׻ ys*׻V'znU퉞D=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sr큶znU큞ih{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB=큶znYVh{b=@ͲB=7 m/99LL\fY=7 m/Xm/h{AͲB zn^svjܳ퇶aWrȩ8ͿgMO멕%+h<'4wtvi( ~GܗQ wz>I]h|-ظ^"\;o3zl3}TGsZ+iy˥J犞G-3^]F[pe5jXV3fe5jXVV&bYuXueaa"UUXV V &bY5X5eUaUa"UUXVV&bY%&bY%&bY%&bY&bY&bY&bYXeU`U`"UUXV&e5jXV&i?L}-6nbU퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fY퉞e'znڞYVh{fZ蹙VznU큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fY큞eznYVh{fZfZfZfY=7 m/YVh{AͲB zn^se|kl_}COztQ3>Zy]žwJwךtY_OخS-^~f-e--q߲'o[ˣN:*^}_~6nOZGכ~6Ȳ1^>K;oiz'0h~cعu ic8Wv/0g/@]m} E]u;gn}1z \9QZ8V3LȋfX0j fXugYuXueaa"UU ˪D,*LMVV&bYUXUeUa0!WY%&bY%&bY%&U*`"U*`"U**0˪D, &" VLIJ`5D,n݄n]^>L\V>>LD=퉶'znڞYVh{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{TmL@=7*@j{큞eznXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞ezn^srm/蹙Vm/蹙Vm/Xm/h{AͲB zn^s^e,+b=7߬ʺZomۑWpcvNٷ_fxnk%}p_Уy~b/׮;yo2\36cY6X`D,V LIJZ`5Äj fX0jU yUUXVV&bYuX5LIJjj0˪„dUaUa"UUXVV rU*a"U*a"U*`BNY&bY&bY L! LIJ*`B.`5D, VLIJVMیD=7*DʹJ=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sڞh{fY퉞ezNN=@ʹ =s3m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY='^iUiU,+fY=m/YVh{A7ko5}%m?iJ쿎x?W} B)-ٗaS_e:u'\-?2ҷlT_?G]Nm rW@zE@z|-q3_%WqBZvg^᧖֮Wyk~vs}/pvQR>|9[<|fم3Σė.`D,V LIJa5D,V3LIJa5D,::LIJ0˪D,LIJ0˪ªD, V V V VVV LIJ**0˪D, VLIJ`5D, VLĴ\w3mOLD=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDʹ =s3mL@=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ʹ*h{Aʹ*h{Aʹ*h{AͲB zn^se,+fY=7_Ƴ v=}m_I]^gY_}+_պG^^4PKS7$+<zŞc9/5j]Q͇:G22endstream endobj 87 0 obj 6849 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 37 0 obj <> /Contents 38 0 R >> endobj 43 0 obj <> /Contents 44 0 R >> endobj 49 0 obj <> /Contents 50 0 R >> endobj 55 0 obj <> /Contents 56 0 R >> endobj 61 0 obj <> /Contents 62 0 R >> endobj 67 0 obj <> /Contents 68 0 R >> endobj 73 0 obj <> /Contents 74 0 R >> endobj 79 0 obj <> /Contents 80 0 R >> endobj 85 0 obj <> /Contents 86 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 37 0 R 43 0 R 49 0 R 55 0 R 61 0 R 67 0 R 73 0 R 79 0 R 85 0 R ] /Count 12 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 94 0 obj <>stream x]1n0^ T lM]LQȂ{N7MmZ_ۭ_m>󨭿uDy}ڻiwo=&齝~#^Oֺ㲔mC1>U'XP_Z4XM'Xouz= endstream endobj 29 0 obj <> endobj 31 0 obj <> endobj 95 0 obj <> endobj 9 0 obj <> endobj 96 0 obj <> endobj 20 0 obj <> endobj 97 0 obj <>stream x]n <o&H/ݥUӶ ĩ8 q҇mt~?,V=4/HtIVO1/gӇ?LzkYo|  DxgT%ՠ7mQ;P;v(բgu(@ײVw= 軺_ވٓQ W\byJo_r endstream endobj 32 0 obj <> endobj 22 0 obj <> endobj 98 0 obj <> endobj 30 0 obj <> endobj 91 0 obj <>stream x}{|ս9fMټ7汛 #<.$@@PEV|Tl mm% !k"WEzE=gfC@{LwΜ9~Y@!dD[ !-|s\է\l_GMXni߲k1_| !v*~|JoOWu> Pa<!]\g^v~޿r%]<Ч?>d꺦G_׭U;o'{7Z}'B!Cg&.ƞDfFy;!ѝ`G̽tE/6 Cc=a^ADkѻQ3t3NOj5چ@ݗ?*l-ܧT wU#w,D0y'7#r#/ߩ}2[< غ91L 1;~;r+a)j|<~>|;pV?C_ֱpoGX~ z͇=Ó nи4EhGS~ y|{͸ʊH$T\T, d}ތ4;tmY2 zV<2⸫~ޞTM;kq6?R.i존ˮ/GxSxjz/ql#l _Rj^h\O'f_lH }>Pߣ+*D{tzA۾=i8nDcQa<%gIYo o;֋wFn{ cIȪ@8.5q+n)~- ]W溠{NHJg/5^AGco' C~6'Ƹ%-&mЦ@݁:qPytJmw8zï ezұ@WG!hMZɛ>҃)o/f @*rBۗTQw`xjŧ|9.RklgMۛۻF.́{ZZ5vWσF77wq{M3E=~KGrzKcp 7E=Q<5{^4+gHU@cmG=UWApm2Z 3)>ӏPI %g;[wF W!cbdvX{űQǭXӡ@%.^w n"q~ސg ԛh1q((5H zDk[f%N8D6+iv~vK W"]ejR1©#[f͟w-wuɂ{i-CjI% Bi{.G+hhԙu qJLVD#DBzߗuORR9ifԍDxh6xm##S2{(CEQ-e=\x޼ ywz*8n,t(}PvA9 OP$1 e-P!MuksLثՑ>{}{F߮mvP;3 ,U)KF t% +PttߝUPUT]{]{Fr^ԟWFoϙ{k*J&:p V( @n^)n~BlBP{Lw(0_.!Y_}n'KA\ tW.De,^\ g## M456 gKqy+U@Ur3#UqըWޭǿU*~w~W]?,zoZKEI џ_Va_7y4;ih6Su0uL7+N"CFʼeH {Ñ Sav`'W ڻDziV}q>F{a50_ھ`{6X^-ݺtR=t껷ͬށܾvfnO_<߂ V~VMRdx mޠ[`zIs<m+% !ū>OIK(bl70:鴕^X8saFX`jƨz:xJ ji[1gі[3nws5c@6`{q| l׭Ƹ ב 0ejK 8nk c7x [n[KN{k5MLF?ߤܥ m & Z!j^ٞ:1z(-[l8`hu~+$g2lȎl4WbrИJL!dv2z @`H9pؙPE%8F9ŜRYnm)N}mwGk[LDq(0qݔ[nL/гfCgW@֑-Bvn9l5> Oon0R0gHr[cދF^uzPCƊib3 D***+R"a&7''7RHa:ĻS7aJ?l3K5g?96mOӾ~@]LU3h23u0Åx脎qA/\YtK|pWa }H: F9/ZV-~nëz``j>c AF'X^O3 &Q7Ți3 ,pmx-so8 t9,Arwf3 k guorN ;d8;=k{nmɴl }וzseN菦1in4G# v<٫3V2`l<' dzZ$]%d9(i dW ˗ٔ2rMY4~[K^(?+w7O,|47LX,%5o==ĭIa2m=?P-KE5jR!k7[;1?0Yh;MKu>@V9Yz3ЩoYج?a<'!,_#z,E7Vfv gRա3Aŀ&Ršp/)Aݑ!IQ^6\*0X.f&tuqāu}o/c~^Au~Qs_ /%,`I[ nĆs W̘ћ|xƪ. NY?t|CNW  hsaYq AOx>rST.x)FQ4 !@"Z[VkTWo㋃fڀ%-~ {W1?ؓ#cP:{pi>Zzs+s D%ŔׅAf9,E-)"ZAOec族AW@!%<ұ٨D~9(Nئ汎c7A95F]6!\uN, &hZ*Y a/0 b*ujEDym3džvGgm:9mwCxw}r+ŎP9Ζ}n5T6ۚKg3sSuy&Ka8m$ 55C sS $K%VrB $^%\$M:*> R8!i8My)lDŶD9a3 mLC1yH#ssz(Z̨FRDi"Ad^+XM"K/['ݗo۵kՋo+QV^Co慊rJV/}G߼*ʺJ=7xĬÌ1$Z ~MNi WnЇu#rrkZ4Ź#`294͵WYX60E}ELQQNŔp~^Amq1KodQj0A~ фW0 &urWprR KsI*v&ps=RA0pJeR+:큜Fn#u ^U'G`޺볎ŋt򭪒R{fMw-zD65~p]ՕӝR W{wu_aDzTMkm}ojmn)y':?rDN"JG~LF]RᙜY'dEC1 |.&$&Ky%e{7-VEHC~`͵sS4S< IIHz_PP&eL:!tRZ̗IKҒQy*B' 2CAgf%E'rAQ +<8pawX`hٍ9ɵ5:5W'~Τl>suhNYa"O5y_=5m zKXr8E'Օ ZL`ul)[&X3Ө<0Sl4:`|௴#W\|߭n6΂kM]oh%Q6N71e3egÖt [n DvfCC~t}_.RxFã^Kg!P2p6vL'Czi$w T%$޾_Q`|iisW1U|n5ma}:-E#y)\M9zv:pB."\]i8iZkDN яd ZAbTy )*Upߓ=t=&4:rjxX]6ݾPȭI {j3 x %䋁cMk!B]Xpc?Ħ - ˰g/dO\ ;^bCU-驆XG k55˙. N݋-B ,j)l}Yx`h!^@XY׌9Q 5ڊ|*:&ʼȡ?4}[/A#O#|%_%͍cH jR|sݺp0Nj]C1P5~ۖrnëTf;?ew?e9Q>iy[kζ a;\t7JKO%鏒GTl*aYP(7 Tme^EDuDuDDd(չRRJK .&VUq5bW/uQcB^9,7{UsΝsUlΜ{߹jy\zWhBM?s'xěKz,Y3iK,[1-SwgJcȋ ƥZҧڥiCFMj4ZWXjE 5'ս:\)y%R+D4E/qƦMrhRZ)0ۧZ1^4AJz4dV2wo?]??Y _T6ڶPݣY$Гd@O=$(zJ^-T#  8Ʋ(cB=5rcr|OAC!ſ::L2W1bffr9nf4/g¡ʊk~vBgtiwu(^>ZyRMc2 >lf$LS7=U{UR`>3}8ΟH+/{pCoF{|i2BkG5":V)d̷L"-4 iSr3st|촅Y= JRWOҼޒiiMk󘼠!7dތPƖ 6##3f'wZ}%/Sd"8bgFWo'a*)1eb9/P-p\6A m;IN?pRyrR:ם q,"Ÿ>Hroā ˠnIM2TmJfMMh%M1?si=yΙ1T\EҤ?nH~oO~VV|fbM-С>R3,;mW=zGHv0cCsJp|>KEPM0Ahn#ɜ;_S9rNn$&kPWC04K3EQ6"ZKA#ȉ?&EA/)֑iQwNޭKb;=Gm66L{} }v„ǩ DE!1N9đrޥV_W[Vd(᧘)ÙZf+z9wFq>;W\.EV#V; Yu>Vc)hFq@hT04q ! s_eӇ5k` p{Hܪ9El'CވH<˭7/Dh^n2 |w2mcP@بzYt"f͚-tU SH $2.gUTTUjR D>RTSi/1QjjUX]^2YI b7*YRaL( BDבJgjuAœ&K%%I3+^kq[.( A&IG<qKSs[8*l2Werj<.:luj iW8Ԁ6%˨|4C;h)$'uiUyql,%|Q,ڲxeoǎsjVYqSbݓ[91>O~fuF [q`:\<2>ŝokY_̪pJهP]ˇ99ZTI\ls`dѤ1ixVzX$Ehf4VOVlb{3Tx+8446sP%ҒEasU+¨*L-h4mF[)M]TfxE/tZvj 4a_ALȬ>xI!)-7#B` x{BvmSEnC$>vMQC|p˟~){ᭁ=q(',؆_'yw=>!s̘%ge%~ƟEZ)33?-Д"w.MS B~ޥ©b8sê!1.@e'TZꙚ*{::!ZKɔAftAXi TIYIE?SMn.n@!i:@-ЗY:3@Mw"&4 56vUۢE+JzX֧gN<ʔ)m̗,N[[}%c$Ԁ~= RrpJ;N e8 %hFiO IWjRr&d#mLA%)IMܯhRc4Au%rBۚ6fNi~w:}ʬ\|ۙ׏D=yC&85Px˕jLn14&bɩht&+* 2(XJ.BQjnM5I]T8J.iIwTXr#˖aQv!K- '%s%.MKYf^$&fj=#EpdV:m$d)9YJZ09/bĒRڲBTއ,fZ(vu&Yu~Z#Mɩ/έ츏e, n\؂kew43h=fKf淭r WO}Y@.Ji\Ԏ FQE&^=dѻM4J%-ґ,&e Dgj ddj<<=S"Gm6f+%ߐRHb駔@nd2|&Dn"T@GI2!H%2V?^;\$w0vW,H9!.ua=2q|p˖g wZշi*Qksrr2#7eq7C&aW펄4>zG&}TgEYȨ\RN AUXk fT+$UNI_C C'H B7Ar!\UO= WG46%'j4ZNHtcbueTU[ ]5]_sCorQks(3.1S8 n{e Ӊݎ# )NSikԛ:+gX4/#ʏ}TԨ]:<]N!8UK*Λr^tޒT'vEeVf#T1nDB4ihBi AFjVI2aN%sfm uV9MLҔ.\ leն$3|P;gNj iy-3ve/ml6U\kex,r$-CZhQGf94EHsG,JRs)6c29ǂ0HFelo@y933E|'E6CEa5$O0L0S\cM!.KؘUg4-J[xWد~-|T\ s`̋zriF;x*i-,RtB[P 1SB{P4Jg=rjb/Ng"<߀kI)'WpJQ5 ð@鑨uNdFLu*12,E7놞rX<8~0ɉ"va ~-A~r;d6~`{yn,'ҵAu|ǗIJLDxI K U`݊OveuYM]Ο4iIr'A&i*V1 I5$/\\O)BHeNN(=Oz<%aZz T )q#%ԅ|=`/ T{5 .##QUUFl U;uYn(?!D( Qi:M ICͪxh=;d|).Tl)Q1u0XfVz4ĮؘK]3(&w$Rpww]?^4y}aQ)˙To UkͅC\lS-.*+a?JZ൯Z}[+Zl-֖SOZ@95`kG漀i=rbO(+JQ-g@)5%uI٧K@WFo1TrGҖgN٧T֘氭bj07ZgCDLէr96BkR8#P$!4PϥFgkKo':0I5)Ab]SΛ8_a`3u]w߹)N8c3vĿ%^?i60͕cLȬV4X $7C$y\#Hy\L(d -P3葋"&4sxy_GU~o.A]cڬB7)k"1єE"2d 25 G%$G>J=?kk`/{^}fӿ_߼3$K.:;b4jx[HtHΊ|r~ˆxwIx_+nJk)RJgay7_2+)70miZj祿QrYXQr݄XҭkO?ȕmmm/XVisueNOmKTG Z)U;~W]7ѡ;6M,L8>! _XN+A]stE6]Ho>ԯuFtQ0R15|,+94!F.5U/A%/-8bgYI "t >Bde<~ "%gV:TbCR s;[sb*Dc+੤q&iz[p(9\| ڵnǮK;~ $?'8:*+jO2 Џzzi@O-~;iFfjjcc_]a)g?@甛JJ"F񁉃ZJ0vǺ`޴jhIQhu,Q#10Bz`/xFEd 38&Mo'5^oFF(t(֠:'S2E$VǔhMQuAJ%ta! SaFjl6U_ l.0p ?wsRznq[w~s_/nԮݠEeYq @|0 ECV̬W"dL^Sie}Tr br+.Vd$;G~cA.O؅p .Ru}%z%w\Ŭg^{;oskJ4 ktw A]Rf|T0&Yg-C)mQ93IvGܯ{-M8=ϸ~e_ٯW+~e_ٯW+4g钬. @e7̭> endobj 92 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS> endobj 93 0 obj <>stream xZ{x[ŕ?szòXW$ۉOn,y8$&6M0GvhHKKJ䣥.vi)rK,.-[˒@[](-MBji\]v~}3:39:sΙsl<:7tk@IŦ]\;t4ዃx Fz_A*m7<o ϟ~{Ȍ #<0`;0k|_n|0ҟ̵ݓw%։86dzw'w =Ex?z#g qWP5?ǟsE̾@ qM$Av-&r=٦H$K:&<?XH_Tf?W-xD .KUc2hdI>>`=J:s acqr?cz/':XgsII4vl%)r%+[GM؈w3!:b'k'wHФx{նx&pq  &pxq|mUMLV&ͮco6 ¼ p>zI%$c7,=,U+\?w3}!CXגc]E_r>LLQbK&%3܆ #x?-+"u5UeKJ+z]Ef,<Ѡi5<2*\*҆>Rm.olOe==eX]x _& tb wR'v@"3~.=e4ACeLpi(i7O1˫! )퐥# 6\ {ldg'/l9DdML*zRR#ީ&B@:\e6zSJ {eW 7raoON`oYl}Yl:. !yXM {i3W>~uϥ>Z;Z(ʊܙT $v=w$ԑAEIEeh| |QT|HVRRA=Qum*K=ғhݱ'F'9_$T2 ^*\@{eǡlT<>ΒM 2I\IM6PoOR~o{*Jd'j#5O஝=8k&>+[äuO=}cOz M@B2*A-gZEE]F=P܍8WSGBmDj:l }>Gf$؊ y\ [i!G.8= ='7f9d]ŏR`7ˤOte[u39ĸY !-3!L(P3nG, S%Z#^|BW¹,R-ķA-93սeF8ciRB:B [:', My**r`ZoH3#Dp#/}B H`{r|LʓߛJ% 'q;wGGǐۛn94tei HW"!ŐZq%8Z/5v.:+h=͑Wi9:*2iO{r2`7}ؐlį#=5Q=_|)LG|Ҟ'7&vnko EF<:b\բmvXecVn:a=ieBQ@;'v*'Ld"s,й20~B }hf,e,G9z2㗉 [*xe4udW*]SPme3mmDLJe;rCtŕEcp]%K d1cR B #@Z$*k }'@{Å ޡ5 &{OKj|\y\OJRf5b{M~nVt>WՐߑ22}䕻O]IJFƁ'OO°T1gcBEMC<mq7"jހ>m@zs^g=v@|"%6At.4暚]hg~Qhjk" &{UvnؕH}) \UK+Kol,@~hsm<5FTQy,O,lIX;z{9\CߠdɝϠ;뤍Z!ć 9e0"6{kՆ"5qKuMa[ \kl\нPGxU` 5r45.Ōuu`xTz+wsNI>yg87WVT]>ZVgӞ*$P&p9E+zO}j8G-P8Ajf~dnEzXPC%[Vuh#\ܭd떡|pEMcp]/"ldyk-Ѳ[.i|ޟeTYהT-y4ά Ykg6O!z?g=O+Ekrf2YͽM$sPww<m?W 1:2!b4Bɕx!)DCZ*  EE˰\FF;ZUrƫ Xç0ZACUky2D!Bpo\^o7U8UW6\&4REμv*+B,0Nz]l+$FBд<w\8_@^WzVQgh9fmx.De6иw:Er!)r#_8QC5yN~aM\1Zn%[AnluqZ~ /pE|.䂤itNWar$NXS5LpTr5_csDg\@} c#Ő+{9T~yQchc{][}~ua@4Sq ak6nM^?XSs|q83@1l_c7 0L^<ޚyJV3 n#ZnǂGRGkg KJ.ƊaS9r Ouhg8sp_o3g*֍g2y3L/S+G aivִ :vnlhiLBO qP<;c|h1w#zh-qz:ʳ Vl=<mwHۖ9}kʭy븵%˜ vW]atX>wpfɃٟswsPw2hkjY8x=L7؉ F vh|Oh}>_=>%KJ"3_|/$% CK.ʓ>٥<)4s,żb^̋y1/żb^̋WtG.$ Ⱥή = O?ND9gf$6eA'tX AM׊:eiНٕhX1A=e 0U?I5k&Bݥa8ċp0w?D`Kbny9}Wߗ?6m󅝙<ƱzG0- endstream endobj 99 0 obj <>stream GPL Ghostscript 9.04 () 2012-04-30T18:27:41+02:00 2012-04-30T18:27:41+02:00 PDFCreator Version 1.2.3 TLM 2.0 Approximately Timed (AT) System Example - 2 Timing PointsJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 100 0000000000 65535 f 0000030213 00000 n 0000073293 00000 n 0000030076 00000 n 0000027726 00000 n 0000000015 00000 n 0000000755 00000 n 0000030278 00000 n 0000033213 00000 n 0000048958 00000 n 0000033153 00000 n 0000033183 00000 n 0000036208 00000 n 0000027920 00000 n 0000000774 00000 n 0000002298 00000 n 0000036238 00000 n 0000044110 00000 n 0000039148 00000 n 0000042161 00000 n 0000049117 00000 n 0000063315 00000 n 0000049738 00000 n 0000042075 00000 n 0000042118 00000 n 0000046496 00000 n 0000028116 00000 n 0000002319 00000 n 0000003666 00000 n 0000048471 00000 n 0000049892 00000 n 0000048812 00000 n 0000049544 00000 n 0000066190 00000 n 0000046548 00000 n 0000046591 00000 n 0000046634 00000 n 0000028312 00000 n 0000003687 00000 n 0000004380 00000 n 0000046697 00000 n 0000046740 00000 n 0000046783 00000 n 0000028508 00000 n 0000004400 00000 n 0000005879 00000 n 0000046846 00000 n 0000046889 00000 n 0000046932 00000 n 0000028704 00000 n 0000005900 00000 n 0000007526 00000 n 0000046995 00000 n 0000047038 00000 n 0000047081 00000 n 0000028900 00000 n 0000007547 00000 n 0000009153 00000 n 0000047122 00000 n 0000047165 00000 n 0000047208 00000 n 0000029096 00000 n 0000009174 00000 n 0000010956 00000 n 0000047249 00000 n 0000047292 00000 n 0000047335 00000 n 0000029292 00000 n 0000010977 00000 n 0000016116 00000 n 0000047387 00000 n 0000047430 00000 n 0000047473 00000 n 0000029488 00000 n 0000016137 00000 n 0000019212 00000 n 0000047536 00000 n 0000047579 00000 n 0000047622 00000 n 0000029684 00000 n 0000019233 00000 n 0000020763 00000 n 0000047685 00000 n 0000047728 00000 n 0000047771 00000 n 0000029880 00000 n 0000020784 00000 n 0000027705 00000 n 0000047823 00000 n 0000047866 00000 n 0000047909 00000 n 0000050107 00000 n 0000063512 00000 n 0000066410 00000 n 0000047961 00000 n 0000048896 00000 n 0000049043 00000 n 0000049255 00000 n 0000049819 00000 n 0000071341 00000 n trailer << /Size 100 /Root 1 0 R /Info 2 0 R /ID [<4B9C2278AD26EC7A0BAF97316A5658D8><4B9C2278AD26EC7A0BAF97316A5658D8>] >> startxref 74140 %%EOF systemc-2.3.4/examples/tlm/at_2_phase/CMakeLists.txt0000644000175000017500000000527614342422106022256 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_2_phase/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_2_phase src/at_2_phase.cpp include/at_2_phase_top.h src/at_2_phase_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/at_target_2_phase.h ../common/src/at_target_2_phase.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp) target_include_directories (at_2_phase PRIVATE include ../common/include) target_link_libraries (at_2_phase SystemC::systemc) configure_and_add_test (at_2_phase) systemc-2.3.4/examples/tlm/at_2_phase/include/0000755000175000017500000000000014342422106021127 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/include/initiator_top.h0000644000175000017500000000715414342422106024173 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_2_phase/include/at_2_phase_top.h0000644000175000017500000000464514342422106024200 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.h /// @brief This class instantiates components that compose the TLM2 /// example system //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __EXAMPLE_SYSTEM_TOP_H__ #define __EXAMPLE_SYSTEM_TOP_H__ #include "tlm.h" // TLM header #include "at_target_2_phase.h" // at memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: /// Constructor example_system_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusAT<2, 2> m_bus; ///< simple bus at_target_2_phase m_at_target_2_phase_1; ///< instance 1 target at_target_2_phase m_at_target_2_phase_2; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __EXAMPLE_SYSTEM_TOP_H__ */ systemc-2.3.4/examples/tlm/at_2_phase/src/0000755000175000017500000000000014342422106020273 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/src/at_2_phase.cpp0000644000175000017500000000511614342422106023007 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and call /// sc_start() /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "reporting.h" // reporting utilities #include "at_2_phase_top.h" // top module #include "tlm.h" // TLM header //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_2_phase/src/initiator_top.cpp0000644000175000017500000001103214342422106023660 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_2_phase/src/at_2_phase_top.cpp0000644000175000017500000001077314342422106023676 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.cpp // /// @brief This class instantiates components that compose the TLM2 /// example system. The same block diagram is instantiated /// for each version, but with different components // //===================================================================== // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_2_phase_top.h" // example system top header //===================================================================== /// @fn example_system_top::example_system_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== example_system_top::example_system_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_at_target_2_phase_1 /// Init intance 1 of AT target ( "m_at_target_2_phase_1" // module name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_2_phase_2 /// Init instance 2 of AT target ( "m_at_target_2_phase_2" // module name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of AT initiator ( "m_initiator_1" // module name , 101 /// 1st Initiator ID is 101 , 0x0000000000000100 // fitst base address , 0x0000000010000100 // second base address , 2 // active transactions ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module name , 102 /// 2nd Initiator ID is 102 , 0x0000000000000200 // fitst base address , 0x0000000010000200 // second base address , 2 // active transactions ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_target_2_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_2_phase_2.m_memory_socket); } systemc-2.3.4/examples/tlm/at_2_phase/build-unix/0000755000175000017500000000000014342422106021564 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/build-unix/Makefile0000644000175000017500000000057014342422106023226 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_2_phase VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_2_phase.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_2_phase/results/0000755000175000017500000000000014342422106021205 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_2_phase/results/expected.log0000644000175000017500000075762614342422106023540 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 20 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 50 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 67 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 87 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 97 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 114 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 134 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 134 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 144 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 161 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 181 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 181 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 191 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 208 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 228 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 228 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 238 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 255 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 275 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 275 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 285 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 302 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 322 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 322 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 332 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 349 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 369 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 369 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 379 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 396 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 416 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 416 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 426 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 443 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 463 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 463 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 473 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 490 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 510 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 510 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 520 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 537 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 557 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 557 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 567 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 604 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 614 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 631 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 651 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 651 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 661 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 678 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 698 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 698 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 708 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 725 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 745 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 745 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 755 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 772 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 812 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 812 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 822 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 839 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 879 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 879 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 889 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 906 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 946 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 946 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 956 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 973 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1013 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1013 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1023 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1040 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1080 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1090 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1107 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1147 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1147 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1157 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1174 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1214 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1224 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1241 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1281 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1281 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1291 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1308 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1348 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1348 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1358 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1375 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1415 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1415 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1425 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1442 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1482 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1482 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1492 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1509 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1549 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1549 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1559 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1576 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1616 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1616 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1626 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1643 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1683 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1683 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1693 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1750 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1750 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1777 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1817 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1817 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1824 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1824 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1827 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1834 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1834 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1844 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1864 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1864 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1864 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1871 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1874 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1874 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1874 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1881 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1881 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1881 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1891 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1911 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1911 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1911 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1918 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1918 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1918 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1921 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1921 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1921 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1928 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1928 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1928 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1938 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1958 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1958 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1958 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1965 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1965 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1965 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 1968 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1968 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1968 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1975 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1975 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1975 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1985 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2005 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2005 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2005 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2012 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2012 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2012 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2015 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2015 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2015 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2022 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2022 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2022 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2032 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2052 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2052 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2052 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2059 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2059 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2059 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2062 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2062 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2062 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2069 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2069 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2069 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2079 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2099 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2099 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2099 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2106 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2106 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2106 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2109 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2109 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2109 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2116 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2116 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2116 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2126 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2146 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2146 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2146 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2153 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2153 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2153 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2156 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2156 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2156 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2163 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2163 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2163 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2173 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2193 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2193 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2193 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2200 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2203 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2203 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2203 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2210 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2210 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2210 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2220 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2240 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2240 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2247 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2247 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2247 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2250 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2250 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2250 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2257 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2257 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2257 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2267 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2287 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2287 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2287 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2294 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2294 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2294 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2297 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2297 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2297 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2304 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2304 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2304 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2314 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2334 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2334 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2334 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2341 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2341 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2341 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2344 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2344 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2344 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2351 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2351 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2351 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2361 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2381 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2381 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2381 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2388 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2388 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2388 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2391 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2391 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2391 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2398 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2398 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2398 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2408 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2428 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2428 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2428 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2435 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2435 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2435 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2438 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2438 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2438 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2445 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2445 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2445 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2455 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2475 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2475 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2475 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2482 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2482 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2482 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2485 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2485 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2485 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2492 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2492 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2492 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2502 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2522 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2522 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2522 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2529 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2529 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2529 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2532 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2532 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2532 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2539 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2539 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2539 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2549 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2569 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2569 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2569 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2576 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2576 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2576 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2579 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2579 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2579 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2586 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2596 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2636 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2636 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2636 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2643 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2646 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2646 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2646 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2653 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2653 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2653 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2663 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2703 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2703 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2703 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2710 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2713 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2713 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2713 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2720 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2720 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2720 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2730 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2770 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2770 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2770 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2777 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2777 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2777 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2780 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2780 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2780 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2787 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2787 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2797 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2837 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2837 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2837 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2844 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2847 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2847 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2847 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2854 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2854 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2854 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2904 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2904 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2904 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2911 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2911 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2911 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2914 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2914 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2914 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2921 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2921 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2921 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2931 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2971 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2971 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2971 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 2978 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2978 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2978 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 2981 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 2981 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2981 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 2988 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2988 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 2988 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2998 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3038 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3038 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3038 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3045 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3045 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3045 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3048 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3048 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3048 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3055 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3055 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3055 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3065 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3105 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3105 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3105 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3112 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3112 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3112 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3115 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3115 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3115 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3122 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3122 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3122 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3132 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3172 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3172 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3172 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3179 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3179 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3179 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3182 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3182 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3182 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3189 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3189 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3189 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3199 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3239 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3239 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3239 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3246 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3246 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3249 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3249 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3249 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3256 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3256 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3256 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3266 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3306 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3306 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3306 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3313 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3313 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3313 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3316 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3316 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3316 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3323 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3323 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3323 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3333 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3373 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3373 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3373 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3380 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3383 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3383 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3383 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3390 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3440 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3440 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3447 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3447 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3447 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3450 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3450 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3450 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3457 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3457 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3457 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3467 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3507 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3507 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3507 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3514 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3517 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3517 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3524 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3524 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3524 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3534 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3574 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3574 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3574 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3581 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3581 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3581 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3584 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3584 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3591 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3591 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 3591 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to send-response PEQ Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3601 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3641 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3641 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3641 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3648 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3648 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: at_target_2_phase.cpp: 3648 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 starting response method Info: memory.cpp: 3651 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 3651 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3651 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3658 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 3658 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### Info: at_target_2_phase.cpp: 3658 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) systemc-2.3.4/examples/tlm/lt_extension_mandatory/0000755000175000017500000000000014342422106022270 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/test.am0000644000175000017500000000713314342422106023572 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: lt_extension_mandatory ## %C%: lt_extension_mandatory examples_TESTS += lt_extension_mandatory/test lt_extension_mandatory_test_CPPFLAGS = \ -I$(srcdir)/lt_extension_mandatory/include \ $(CPPFLAGS_TLMTESTS) lt_extension_mandatory_test_SOURCES = \ $(lt_extension_mandatory_H_FILES) \ $(lt_extension_mandatory_CXX_FILES) examples_BUILD += \ $(lt_extension_mandatory_BUILD) examples_CLEAN += \ lt_extension_mandatory/run.log \ lt_extension_mandatory/expected_trimmed.log \ lt_extension_mandatory/run_trimmed.log \ lt_extension_mandatory/diff.log examples_FILES += \ $(lt_extension_mandatory_H_FILES) \ $(lt_extension_mandatory_CXX_FILES) \ $(lt_extension_mandatory_BUILD) \ $(lt_extension_mandatory_EXTRA) examples_DIRS += \ lt_extension_mandatory/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details lt_extension_mandatory_H_FILES = \ lt_extension_mandatory/include/lt_extension_mandatory_top.h \ lt_extension_mandatory/include/lt_initiator_extension_mandatory.h \ lt_extension_mandatory/include/lt_target_extension_mandatory.h lt_extension_mandatory_CXX_FILES = \ lt_extension_mandatory/src/lt_extension_mandatory.cpp \ lt_extension_mandatory/src/lt_extension_mandatory_top.cpp \ lt_extension_mandatory/src/lt_initiator_extension_mandatory.cpp \ lt_extension_mandatory/src/lt_target_extension_mandatory.cpp lt_extension_mandatory_BUILD = \ lt_extension_mandatory/results/expected.log lt_extension_mandatory_EXTRA = \ lt_extension_mandatory/CMakeLists.txt \ lt_extension_mandatory/build-msvc/Makefile \ lt_extension_mandatory/build-msvc/lt_extension_mandatory.sln \ lt_extension_mandatory/build-msvc/lt_extension_mandatory.vcxproj \ lt_extension_mandatory/build-unix/Makefile \ lt_extension_mandatory/docs/lt_extension_mandatory_example.pdf \ lt_extension_mandatory/docs/lt_extension_mandatory_example.ppt #lt_extension_mandatory_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/lt_extension_mandatory/build-msvc/0000755000175000017500000000000014342422106024335 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/build-msvc/lt_extension_mandatory.vcxproj0000644000175000017500000003050214342422106032543 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {73DB032D-F15D-4701-B266-8432BB97D219} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/lt_extension_mandatory/build-msvc/lt_extension_mandatory.sln0000644000175000017500000000236014342422106031645 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_extension_mandatory", "lt_extension_mandatory.vcxproj", "{73DB032D-F15D-4701-B266-8432BB97D219}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|Win32.ActiveCfg = Debug|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|Win32.Build.0 = Debug|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|x64.ActiveCfg = Debug|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|x64.Build.0 = Debug|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|Win32.ActiveCfg = Release|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|Win32.Build.0 = Release|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|x64.ActiveCfg = Release|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/lt_extension_mandatory/build-msvc/Makefile0000644000175000017500000000055014342422106025775 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = lt_extension_mandatory OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\lt_initiator_extension_mandatory.obj \ $(OUTDIR)\lt_target_extension_mandatory.obj \ \ $(OUTDIR)\extension_initiator_id.obj \ $(OUTDIR)\report.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/lt_extension_mandatory/docs/0000755000175000017500000000000014342422106023220 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/docs/lt_extension_mandatory_example.ppt0000644000175000017500000061300014342422106032251 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`v( v/ 0DArialicawman@x2 0x"D-3 00000wman@x2 0x" DWingdingswman@x2 0x0DMonotype Sorts@x2 0x@DArial Narrows@x2 0x"PDTimes New Roman@x2 0x`DTahomaew Roman@x2 0x"pDCourier Newman@x2 0x1DHelveticawman@x2 0x@.  @n?" dd@  @@`` h      (* ?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8<4dddd 0g4^d^d2 0ppp@ <4!d!d 0<4BdBd 0 ʚ;ʚ; )___PPT12 %___PPT10D-3 00000ewllp2 0p"DCourier Newllp2 0p1 ? O !", / * % 4 5/T<4X@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> L(  ltnc ltnc   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  N6?Rectangle 4P  T Click to edit Master title style! !.  HL?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     St   N@\?Rectangle 6"nhPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!uEa` drs/shapexml.xmlVMo6 x-8* o gcAIT"U}CʉwQ{d93o=CNZWgR禨C?/{3Μh'x]ðYyͼwV½1X+ǣ}7V:Th0kQi~nӬ-YnmYU$|:GiQ#̑ăl_"䏮KF|I2{TIL ,&Sk~+EojJ4[dTq9zi9j9$|[pkl)ph"b~(m}nEt)Kl:@ox0F9b.Xh g9<Ɠ ޘy6ҜnPح!(6Js5*}1lh fD"xQhKeQijD8pm' 3|*Q[c9[j8jəUCJvzaT9NMxY4O4|n_Mq t1far# tr~ gBک!1V 9_D!Mˎ;&u eN!j N$RA)EIHm%E5ϷKQW DM'm+ԑ1F!- jaWu0>G20PGo)V>ht3heRfhy8>4F&@G|/2N;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!uEa` *drs/shapexml.xmlPK-!Xdrs/downrev.xmlPK],    hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!<^y!drs/slideLayouts/slideLayout1.xmlXn6w t!uu6[nj.zMt4r\3lo+;eKY[o+^ rTj*O$-.rW+HSAkWjYav[+PЮD[Ăh:.{{ʘ:u77ipպhWױ^'܈Ie|xxWtl9 }&;:e1Z^m:6TA0i艎?mEok mimU|2ѬUF^2QN+7iОr_TNPkx'5 v E+#_G$Ծ>y<ǿ_ڝwC NI{(sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!<^y!drs/slideLayouts/slideLayout1.xmlPK@PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #/PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!$/!drs/slideMasters/slideMaster1.xmlZ͎FG;>f5`  M4RdŻʹm 4i{{f!)()9%oyyT7?'PEu2 aiSiU.]FJ10E[~r8rƷ!IpAShy "N pns˖9ouuU5(ʯg>^,|P9a$$-E}E]G 0[tqњQ'A,N8M"%/4f h#LI ې3Y9I)wr& k I vM%Sp Tª]$ůKv!/bϤSK d>%&{* NdoZ廳g ~]~vN_\4A1)הa0?P:aKe eI mB^EB.,CpO׿*׿\vs7W?#% :Qn]40HWhyx\ K^ CȏttN'# sҍ.IwttN)H%r 7J(q{(.{ 8,~xk9{Rm CwVoNjFev}dLƐj:.sO.tk|֥,Zoуmn᭡AlKo={WZS 3To@c3wizQhe?~V]fҀОH)K@* _EcVXF5}lpb J{Z%&gZq_gH"xHE߄J#J>K5K3Dvy0UA|'ΰN+MRѲۧ1B1fX9#;2D1x*K9m6p\ Xj(_(OԳ7}(d骽B)R|X(_SvBǔ,kUoS=F9.@}L1uWKX6b]kDcv=m4LPz D 7PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!$/!drs/slideMasters/slideMaster1.xmlPKP TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> h"( Ba@{> h h A"??"system_c_title_9Picture 2system_c_title_9 h N?Rectangle 4P  T Click to edit Master title style! !. h H?Rectangle 5P0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB h s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #/PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!$/!drs/slideMasters/slideMaster1.xmlZ͎FG;>f5`  M4RdŻʹm 4i{{f!)()9%oyyT7?'PEu2 aiSiU.]FJ10E[~r8rƷ!IpAShy "N pns˖9ouuU5(ʯg>^,|P9a$$-E}E]G 0[tqњQ'A,N8M"%/4f h#LI ې3Y9I)wr& k I vM%Sp Tª]$ůKv!/bϤSK d>%&{* NdoZ廳g ~]~vN_\4A1)הa0?P:aKe eI mB^EB.,CpO׿*׿\vs7W?#% :Qn]40HWhyx\ K^ CȏttN'# sҍ.IwttN)H%r 7J(q{(.{ 8,~xk9{Rm CwVoNjFev}dLƐj:.sO.tk|֥,Zoуmn᭡AlKo={WZS 3To@c3wizQhe?~V]fҀОH)K@* _EcVXF5}lpb J{Z%&gZq_gH"xHE߄J#J>K5K3Dvy0UA|'ΰN+MRѲۧ1B1fX9#;2D1x*K9m6p\ Xj(_(OԳ7}(d骽B)R|X(_SvBǔ,kUoS=F9.@}L1uWKX6b]kDcv=m4LPz D 7PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!$/!drs/slideMasters/slideMaster1.xmlPKP 1_TLM2.0planH 0 444&4( r 4)  4 `3y˼y˼?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn8}_`"MƨR$] 8E)H|PӢ(8˙33omZ#VڇLN^жpec2!*[*V?v \aeFu+iVEQu6GǯGj)ZtsORq{є{|q&U->1<-NhPK7˜bXԯRzF߄!{>m o{*}Ƿ "REv.=z^p%!ˀlEJ\S}t@AM7oM츪L[z"p5՛( |<a&kwt$ eңtZB$.ȝuw1Ǧ9{9"cmr Ӵx%PؒUjLyU!yd}lX[[ܸrKrH hvYWh@ R-99;c"0g/O'ooFRLF)xFsm.w{|VA{UğtJ0"n1&m̄TKNǼKzgx/4bKܤY8pB&NY .5A3.JV=| I%6*w0:C`b^Ąd`H]}]+Up([7{i_ՉZp\yE4XmӺ*ImO>-b`Nhfm`݂%)J&NrP'K4覡gs\E2ŗ~)R4>\yމ*еoh5TȪV>hfŭZ{UE:@ g7MHW_PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!3]drs/downrev.xmlPK.,  3   hdman`  Arial&Monotype Typography  `   ab0|ay>z/  4 `ty˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!%zdrs/shapexml.xmlUn7}/ Z8|u`uZ@5A\ܒ\]=C$'6҃4s9sfMkJ-Ø3e}-ǓkBYU ?}즡cxlô+xc7lT+)VD*(E֌NQ+0eWnIOg*3+Zx}V1hP/˜9 C,RyF_>Co{n .TH)aq!*rD9(g :'+ DMc ;]__N8|LD&quzs5wWC,@rGP=JrYQsl)Gc58HȒVGm>TƯJ*Qhe$hl¼<>6,B--n]%%~A܅?|? 8 4A^qf~8ÙS}Lj$a%}Ňϵ3$)hSn NeܢnSq1q$$LYydbf2eFd[ r 4Ճl%PȓL!Cndi7ym@xN\_m+$@d/\ D Ǭx@+E a:<t \ƌdiVw7B'wuQM_G?ĶdNw~iyͅ :@ nizPK!gdrs/downrev.xmlDMK1E!z 4 H ?Rectangle 4  3  4 `Fty˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!\{3drs/shapexml.xmlXQO#7~`BBrCGz!zҽo~coZT]N<$f6gofoKfҺ脷_mr&ujB%F3΄2Z&R:vTW1lnP%|}5h\:pL%5rcKqkZNj/<*U*E.LٸYңȲ"KgZ8XLIF-pchs"/p ;H8Lqܳ\Ls[/Ք ^NLv [-#9"i 0Clrd/jos[1ypvDb/29,zߦ?YJv) VwҬ#C gT̆ǣGqJ ARUͰuzY\H1SEpOD G/ e`t=<^-BHQ}tU!*R逞DM 0QUKxvQ2>t{;++. :Մ{΢xqGgJW)).dUS85{dSQ*7@Fcޱ"$!Raq BghA ]YqDLh-wGm)zߞhLLejjh{Z|&U(l&(KAc__n-*񠱗/u]z>Pd{a4|~!@xdN1`{^Ei~-":Ro|l:GФ9:6 qv.-Ű%%4Ti©Jn vUМ k#kLN2y?3ȨhJ`qZrC(P7HdC`E l!PHU( ^: "Ѯnbw7^|OhwXT6fS|pȴpzJ债-4oLea^3Z bH]@LHg!b-&ۚt/n\>A8cеvL5֤{ϨO']5ˬYfu:k+PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!drs/shapexml.xmlUn7}/ Z8!6꤀jfomEJ"g9j@S'EL,k$U̺-Mx %@ ŷ "R]me=z)NpզgӬlf_Wb}sl:d5t[-"&jr 1fC02TpBj"AzpA|cͰuƧp,Yn4ˌn>Tb߶J*Qhe$hl¼<>6,B//nn]%%~Aܓ(^%Yqf脫!q3|}cΙVJX-xY"ND>״"NmO>B{ɺN2bB-Ƒ$[+3fUbjo2%DCcdY rFS`DDo3"^Hug<[ 7y|d;)!]gO,o:ATImDa gIs$_cS;oғRÓAg Vd qouw+p{Se#n4-t7$S|y~@2Mn%X*6d-$ZFrq/mzNj!|Pmɜ^% u>d7!мPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!*drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,  3   hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 fRy˼y˼?Rectangle 7"smPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!) drs/shapexml.xmlVMo7 x-}[u R@5A˵[}Cd'6joaÙ7CNZWgR&+c?>,ZcΜ:ht߽&b8ݤJjnt+KޘJjƖ>++^x\Tvӹjn],һʲ"Kx3L1<*Fݘa,MX?%b? i".4-nSk~+EgBՈb+DTvW9zi9R9$|؜G%afA19䶼4#cx<9;&||5F>b"0]b00# %f(j>T\gċB5T:`HY_F24[ A(ί 5І#VK I\w0Ƈ]3N5rF3e%R O{8"lǃwfmS(q!$NuIB=aBR,} Q@cY:t1L%YgT 5M9Sk>y1uy:5䯮yp`Ka"X܇ ߅"{5 @!֯ɍF8"FnÑ/A *]>=+-(V۞җiƮ(!hxS8a&626vi!iI0ghwVw>^5ޏl<jI1PȅEU(oE,p[qrMRx -0^YgOҸ'>gSx[YcrZS`kcc^皔Ҭk@HBqV>.DY(̯Ymu205թJݒ"v}fsʐM ͯ$O`:[ +W~#:tE3O@"Ÿ PK!1drs/downrev.xmlDN0DHHܨ VʥR[moћ/H>hg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!) *drs/shapexml.xmlPK-!1\drs/downrev.xmlPKbq2 , 3   hdman`  Arial&Monotype Typography  x*   ab0|ay>zB 4 s *ηo~ ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!|z!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>d.lMsgQz1B+)cJ`ɭF$:hkffBSygTS^8*uW$KhJr$ ˹\C[fv,Jv{**4nj7Y&kBq7"Ka.۪)9Eh1 )%LRK f31,Y*IŒwsm,JH-&;n|ӅW[1+,PDr FH@xK!Vf*k#ȥ XX2%{Y30 zx& M8|w-Y_yPub\M;J`Ơ $N2=KI?,?_+b&0TFؓ*`;{b}CL~X܉='I 1U;bN XTN!7p. ~43D ~s7 ly!T k {=l BW*AN^}+A5a{+U7JEb|ۗ'PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!|z!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10."] 0 @_(  @' @  x `0e0e?Rectangle 2P  ` [#LT with Mandatory Extension Example$# @  x`0e0e?Rectangle 3 ` ,The Goal is to Illustrate: Application of TLM 2.0 in a real system Use of a mandatory extension Possible Applications: Architectural exploration Early software developmentLF5F58@X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"5 0 U5M5  H4( h H H  x\0e0e?Rectangle 2P   )Example Block Diagram[ H Fw?Text Box 9 g D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  !TLM 2 GP with mandatory extensionH" GGG V]8Xxb H bp?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx H h@o?Rectangle 21! 1^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  s Target Module6 GG V]8Xx H ho?Rectangle 23^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator ModuleJ  GGG V]8XxR H d`.G(Left-Right Arrow 13    hdman`  Arial&Monotype Typography  < V]8Xxx t>C,? bK HC *Group 16"M c+ u   H h.o?Rectangle 23"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!-pW drs/shapexml.xmlV]o0}G?X~EQ 1x(ZxD,N?9N[B!qsϹZr&プ}Δ6]ƿ,O9A\hkTwϟi&alxB3,U-K(ouxuw)Lպw{ Rf=of"y9V2̈{* wZ!uYi+A%wb~A}WbuݔJh^g/ 1{`g'hEMb-\XT- ? 8]׈DL60FL"c4^BBჲFh;KT>)-h;ou_WZ;Zh,%4iEygPa@<@bm m2~z>z5~YoI]?D*(tUg@wL|oxAT:ŨFP #llY&-6NLYZq\,d~;/EbaH{B9av#Fj%DZia&1kɡ }Il\ gD )_r+j&&\IKAF74gL4kH6F*ș I;2WxDoe}]b]Cx2/7F'ejb6nSlVP'`vUmWTTqeNq̀Anv>\B5v#VѝM(STg}tu>W\Wt!ؙXV(kUQ/hc8; FBB5U嵨+~2R8"J4EmNH>H/H:.ط1F%Bx`l(=OaO![=~"/^PK!%"drs/downrev.xmlDN0H}k+qAiUD5)o~hlGۦoϊ=f5f Cfl"Av3j%W YVkw% ؐ.12 7e8o0[=^Xn&I& :鵣X1{ bwH_(SD)ޞS*4d u!WqPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!-pW *drs/shapexml.xmlPK-!%"drs/downrev.xmlPKP.t>C,? bK^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  hInitiator ID Extension" G V]8Xx  H h.o?Rectangle 23t>CP. bK^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  uGeneric Payload6 GG V]8Xx   H G-HZy>Rounded Rectangular Callout 17"<6PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!_~o drs/shapexml.xmlUMo8/@ZĨR$f EXl5)c#)Ի2Ù7o?TV)O>8*y)>\rfV"[a|'fجNʹzl%*t- m*rx5nmʑA{qRkRY=5SdE|ԍEEL$þq,vl0q-# 5N\l SE{ 7Dۤ|4Lqmp8%>;ch<SxXg||)P;'.g&ks$!S'xp\G@cd<>XXJ}V2+/X(JPe - /F=-l|jR{I(0+$Ar\b2gB')M ;H~#Na)v \ T9s0ܧU3)pRIHEjLJTLo5 S0zZ"7p"&am87NC+ TdSi x*HX.9-f&kq_н5aC \e@RWcQY8 ˬμalIaؤ:x܊NzS:y׮. |]4׽y2/ pqk 4]I|*+ >K""n3sY8{߲Z-NKYë\օSu4H/P6^=Q~,O}:IsZ!9tEեVwTu^VdmX8}YJLlfOOO/v}}? }gʧd =zkeꪅSz{BLg=ى~PK!drs/downrev.xmlLJ1@Ff=6- EUtv3Y71tb}$ Sf"CtP3,sSx  PWJ_II쑘c Zi9܃(8?zŸΟۍTF ?PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!_~o *drs/shapexml.xmlPK-!)drs/downrev.xmlPK+S U 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  |This extension carries a string containing the initiators  ID ,?>G V]8Xx6 H S ޽h ? H ̙3380___PPT10. ""W 0 @PY(  P P  x00e0e?Rectangle 2P   3How to run this example (Linux) P  x`0e0e?Rectangle 3P0  N\Set SYSTEMC_HOME cd examples/tlm/lt_extension_mandatory/build-unix make clean make make run ]C CCC C C $C$,.V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0 ^VPT(  T T  xc0e0e?Rectangle 2P  c 2How to run this example (MSVC) T  x c0e0e?Rectangle 3P0 c Open a explorer window on examples/tlm/lt_extension_mandatory/build-windows Launch lt_extension_mandatory.sln Select  Property Manager from the  View menu Under  lt_extension_mandatory > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and runhZ C C CCC  $$ ((,, 004488<<       $$ ((,,0C044P# 7V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt" 0 ,$`X(  XR X  x!c0e0e?Rectangle 2P  c Expected Output (expected.log)* A X X Tc?Rectangle 1028M    hdman`  Arial&Monotype Typography  .. . . Info: lt_initiator_extension_mandatory.cpp: 275 ns - invalidate_direct_mem_ptr Received invalidate request - valid request Info: lt_initiator_extension_mandatory.cpp: 350 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000002 Info: lt_initiator_extension_mandatory.cpp: 350 ns - log_start Creating read transaction - Addr: 0x000000000000000C Info: lt_target_extension_mandatory.cpp: 350 ns - nb_transport_fw Extension present, Data: generic ID Info: lt_target_extension_mandatory.cpp: 350 ns - nb_transport_fw Read request - Addr: 0x000000000000000C Info: lt_initiator_extension_mandatory.cpp: 450 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000003 Info: lt_target_extension_mandatory.cpp: 450 ns - get_dmi_ptr Extension present, Data: generic ID . . ."//g ( $ :$ 9$ #! 2! $ 9! 2 V]8Xx  X ~pUcG֎H<Rounded Rectangular Callout 3"kePK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!c2$ drs/shapexml.xmlUn6;^[?HM 8DP@Rcyh^6yBCYET8|}o֥d+alỤW=΄JuVE?^vƜY*FXo^WS[1ܬ촊ҹjt)Jt%ڔ,V(*e %a(W3z53b>LAGZe"c7"Dނvw]> ݏjq%uvO:7eS|I {ac> ɐMOF`t곃X;C4F"`3 xXGg|ߋl!>]+Agy)H։ƃ ^~o[ɾW4GMXXղ. )F?4 ~)u$GjGOMcsb1OZ%84 InՂ3 ^ xpxWH٭!ށG{DKoK826J@OgR"OOLB*sdXX /t$ (zn?8浞/;]M|! "us؄ =,Dss.hܐ!WH~PT8 Le"dČ? ԅ#\+wNL"a-/q<*A-*Y##Z+5v"w;qn!Ź)̿$w6ɉ ԙ t{WqPK!>drs/downrev.xmlDMO1E&晸2R!ฅ}LL  .o͹9h P;i\vz8:;pne:!.(@ԗF8=ܵ>XL9ˀC[ß[.?(i9366[zUӁ !ǷW`?V>g`mu=-w-fK_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!c2$ *drs/shapexml.xmlPK-!>Ydrs/downrev.xmlPKZ: j 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  kInitiator ID: 101*G V]8Xx6 X S ޽h ?X ̙3380___PPT10.ntDw;"P 0 JPBPp''\O( o \ \  xwc0e0e?Rectangle 3P  c IInitiator Module  x   \C *Group 35" $ "\ Nc?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   #\C *Group 37" 8 P  $\C *Group 38" p &\ bzc3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB '\  cB`CoDE FQRUVW3fjJ?`8o@I`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB %\ R?Line 41  x    \C *Group 42" ! \ N\c?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    \C *Group 44"  8 P  \C *Group 45"  p  \ bhc3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB !\  cB`CoDE FQRUVW3fjJ?`8o@I`oFreeform 47P    hdman`  Arial&Monotype Typography  < V]8XxB \ R?Line 48  \ N c?Text Box 50 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx x   \C *Group 51" B \ R?Line 52P P \ bc>]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p \C *Group 54"P p \ Nc?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p \C *Group 56"P pB \ R?Line 57P  \ h%,Tc>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx \ f,o?Rectangle 2G    hdman`  Arial&Monotype Typography  < V]8Xx  \ F,?Text Box 4@,i XP   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  4Initiator Module (lt_initiator_extension_mandatory) ^5 2G GG G   V]8Xx  \@ Z$?AutoShape 6t0x P   \AC *Group 59"7F \ b!3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB \  )B`CoDE FQRUVW3fjJ?`8o@I`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8XxZ"  \ b@?AutoShape 781F5 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8Xx  \ \8c?AutoShape 805 7 \ P`H?Text Box 10580(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   b_transport*     V]8XxB \@ Z?Line 106[ M= \ JG?Text Box 113~M0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  simple_initiator_socket*  V]8XxB \@ Z?Line 114P\%$  \ lG9HT>Rounded Rectangular Callout 53"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!ir$!drs/shapexml.xmlVn6} :I:E-Cq=e(' { ;$%[)0 |%^sֹd+MV ^8*.L-&i3cI%$ %&F^cS2̸5Rd^PK ŭ^tK-P,e덺9ea*S|5,K&|Ǚk^JD.DJ$^Eep{n +L۞`ͯ &XTu5M$gӸHS`Eg7.e1Qs#ap q6gQ\sMH簫1X"Q}YK ":p7B~;?8m$`2گ;FM S,9ͤY(^Kv;Ao[V9( /B>jL~6EڵTv=t H(d%oԂ3 H2WdM]d npl#eHC]噹foJBAܕ3)|L~M&ʭ.v)ĹM0>)uxtYBlIت%(u90vfoص vctrgAp& *x-X"KnAh Lې/L+BZ({9'ʀ/ҰibG ~ۤqM=g+W˵v^n7)ܜ>!иg d<ˋYOPw3@/:pZ52VgW^m3qv%;| ]7;Fev+[aT1E8ɴ "T3U0z1ߋ zm#HكRM^ǞGRQ!Wf1qVf6^RIT9[6sO)wz/NӉbmf^:l=18(A:௥cų^ʞ+>KT2%M:#;=1:#E m3vBk>PK!5drs/downrev.xmlDQK0Co.U)up W|6MisSu>;|h{'Z .'o[!"k#X.NOXhw؈PPH*C ĩS n{ye3i`p+*|3e^mͪ+ND1?^f_z )[+HrI5i\PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!ir$!*drs/shapexml.xmlPK-!5ydrs/downrev.xmlPK~g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yextension data populated here,G V]8Xx  \ oGHz>Rounded Rectangular Callout 54"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!Z& drs/shapexml.xmlVnF;,Z("g[nChKrI.eGyh\6~Bgg)JN r PCpv7B46/uWgR2<;Y:Uj?ƶb* qkB`_ԸfޭR;pQ(u 5?Pz9&[r91,O>r=Z2eWR`&ZagTY;6nAhtwZ\dwev% Uf"Rwø2Jh0} qgcrLCobzqtt0$nHŻVƺewZJL5Q8O!eB,Xg0G] 80lCţш"ahmjYRyԏ85͉%hCF @d E4z9O8C)P.^RR*$GWP'bv o:en]4 r$n-toDԔ9,Cr!o,i3EvR=P׫?T@j.[YJl}! "uSVr߄Mݯ,Dsplh\H~|c 22(f\pO-ڝ=g`2H\oؐ#Nj-hGO+ [p1J8ٗ&+]=ɨ[kVg5zE}kc%\̐d"Wal`_q u<'\)FD/>t7䷤)YJ,!bUS-zU.rb2#;͍OmΔ "u[)jeS1Y`Z(wJkB j*LTKrUs(rvF-XIDv|~çO?>=0LaL$˄w7a77Oߍ>mGcyIN$hǾ<'&'" av_SZ7#PK!"ȉdrs/downrev.xmlDQK0Co.]Ne eaS&IJ|9|oM.vV|#[;m+Xh%vΒlW+,.زD*ƾ<Ԋ ɦq`Lѷ\zt<ϲnP|6N@^}.Q|!X-ExEHEM'C$/ %դ |PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!Z& *drs/shapexml.xmlPK-!"ȉ~drs/downrev.xmlPK{ W6 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  9socket is bound against the extension making it mandatory,:9G V]8Xx6 \ S ޽h ?O` \ \\ \\\ ̙3380___PPT10. ""]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p `C *Group 23"P p ` Nݝ?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p `C *Group 25"P pB ` R?Line 26P  ` h%,>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx ` hdo?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xx ` H?Text Box 29:ld   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  .Target Module (lt_target_extension_mandatory) r/ 2GGG G G V]8Xx `@ \$?AutoShape 30P-" ` bD?AutoShape 31&    hdman`  Arial&Monotype Typography  w b_transport"   G  V]8Xx0x P  `C *Group 32"P ` b$%3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB `  -B`CoDE FQRUVW3fjJ?`8o@I`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx"2  ` X8?Oval 36V0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8Xx  ` \8c?AutoShape 40   ` b8c?AutoShape 41 `  ` NRounded Rectangular Callout 39"}wPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!/' drs/shapexml.xmlVn7;~-[BNขb˕6r$W}tho+PiUNa=|^ZZ̕uyi)2If:pLJ4j(Ne5pfPμKf ZVڂ<^QY䑨ЍvkyPf>F6X|dEeP yU&UR LkMV&ڋN_6B BhluX۷eTyil,- ? ,<궏})d}jp4P /ԍx@#YYVޠD4**/p+!4]LYĜhun,`۩qzG.Z@Ry8 z@8$z\ ( ~$9>d3 #15ȀX}ۡBe<̢JAzLe;׸"d`+WZ,:R,׆~ba?T ma2*T*VH,mBveD/OA7agezL=G^xll,3ԦY~7i/ f{5Y+ d/z#`D(M*lu!RX]3{S$f<ÐƔ&LWI0\5 =ȲxsߕoVO3a1zN^@pD\a:y|cm輍H9*cls)"|K.u,C%uKFl(-jliQS=YsGg<9%+ADX) ^ay-HAA$դ rPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!/' *drs/shapexml.xmlPK-!?]hdrs/downrev.xmlPKlw0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  yextension data extracted here,G V]8Xx  ` VG\Hz>Rounded Rectangular Callout 40"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!S%" drs/shapexml.xmlVn6?^KNl*$m40,z ekCI9v)Zz ebC C{3~nUJZ%<~q&TBs™u2ZNm5×W _8W].D µ\ޚy2 Fh-PC崚oˉaE3%yk݈3 )uqĻ{> Cݍkq~iƫܔM5EdsJxotuNF(>XK=8 # xXg|?l.?^+Z^Jb BwߧӉpp܍taSh/)'a,BqBq! 2wDU˺D ~\W0l|jR{Hj%,+$Us@Q{3m^!e"5c3. R^ȵrgDX RPc쇓ZA˴Jat֊Mǹ?5YճnfuVoW쬞>%\# YK&q%? "{_E?T8Bu>Lq0"zolkїu'M^?eq5 7xC. ?u]:';+ Om. " k5.HBiVׄP}kTrH1B.+R*\jgD )`?^f<˧O/O~1L'5''e;;'\n^ӣdFM$鷑g DZo!ϙ)@~ě#{Tav/=: x3bhPK!Idrs/downrev.xmlDMO0DHk $Bݪ Aphuo>DNm&z,pj3A޲t UP?_߃Y`a>?[at,B+"} \J_wd/H:!FJfY,C#=uT_FAu*_CeŴ}h 6o_ԫVphvszG)rQ5j\PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!S%" *drs/shapexml.xmlPK-!Izdrs/downrev.xmlPK 2O 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  9socket is bound against the extension making it mandatory,:9G V]8Xx6 ` S ޽h ?_```` `` ` ``` ̙3380___PPT10. ""i  0   dk ( Θ@zSmM d d  xī0e0e?Rectangle 2P   #Expected Timing~B d VԔ?Line 4B~B d VԔ?Line 5B~~B d ^8c?Line 20} d HԮ?Text Box 22_   hdman`  Arial&Monotype Typography  b_transport(GP, delay)  G   V]8Xx0 d N?Text Box 425I0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  z lt_initiator$    V]8XxF d N0?Text Box 53s[0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  lt_target or at_1_phase_target(K  V]8Xx6 d S ޽h ? ̙3380___PPT10.uk"' 0 <I(  <; < f/gy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2    <  ~$fy˼y˼4?Rectangle 39 3   N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0 Da(  D; D fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   , D  ~Xy˼y˼4?Rectangle 39 3   f- typical things   V]8Xx6 D S ηo~ ? 33" 0 0Lg(  L; L fy˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   2 L  ~y˼y˼4?Rectangle 39 3   l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33rDޫ~>;37?tTfJ Q/ ^Oh+'0 0< ` l x AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne88Microsoft Office PowerPoint@97@ @ aP@&Ghg  ,T%&" WMFCv <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsuvwxyz{}~Root EntrydO)PicturesT'Current User|SummaryInformation(8PowerPoint Document(DocumentSummaryInformation8tsystemc-2.3.4/examples/tlm/lt_extension_mandatory/docs/lt_extension_mandatory_example.pdf0000644000175000017500000014113714342422106032226 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xTMO1F]3>U@YJ AMB ߙݬmT"73os/\#](\OpٝMMu -Ew}Н5Ŏ{*2ǐן8:t#s057JXޅ=7,i˿-\Qg"kbm ,z`(z݅5|/ φΑD'RxY ě‡HߠmtRgT~QJYm"ԛ=OrIcY d VbɖG +n-`:圴9`}:]$ lkٵ'ppA'O> stream xVn7E_+@,gx[A}(*r@[vGrC*YA[ۂr 3sfBO1VJ˖K_΄Ѽ~~&9Xc㺻~]~=wbB\d%)>o߂/)9ofvٍ'w t.Hմj'^, + R`JAb)iAx-Q,w/s/\4cU5`۰͗o 4Հk|n|I-VC*80bAY6hOZa3نQgt7ãrJ#4-ny=h@% `QCͰ],3cyh"څ%H+ݒ21Z: Wt9t7B>跥3[t5b +kV3M{6VY@7BM#c.WNGϾBeO7\Zw3[@} ͥEXfW!38& E:dϖ"m̲J~=ƦIT6YJ7df Q?&@My/&KVaE1=aL0ĂNG:n,źVhM D׭kHReOp7bDz!G) hZ x#MFG?׶2!sTʟ[nL+3B$j?p/ b/ROc͆b7Qو,xju70#/Ȍ j%SOif1:<#.t5I^v=endstream endobj 15 0 obj 1005 endobj 27 0 obj <> stream xWKoEP !_Va{&ij{ØyK4_~F.CuQZiz݇-118S&=U1kRpt ?+rJ2 *:J{)}2hʻLvPL$ʎG"t:"Y79d5yjRXKPd!n):z)"é?A%bD H]o /ZM CbޒU\B}q⣷@Q1 eR Sr]l퉦t0uTb/mQ1OSLh1 ы5UEKHQqYwkQ:ZDm R d %3_l\y`?vsXcuV/\*RM(b4xBhm`\Ƞdle=YF6=i!oF0쁄]Iwe:)# Hha>zoؗN%og ert2%F vp]0vmRB f_agmS-]DJpձ}Y2++bJu=*0б`#4Qo'P0QǶi,y뿋:vk-H`T4xE1+~g3 5$ؚxZlpXo^E-uKQJ Kh&GaTQcze2c ɏiy<դf̉keirƵ5M?áE4jh(.ד1oAu\X*nscU;1 iڗ@+ݔu"1"KK"[ `afeٚ\hyID46 n>::iE?b3Ȟ9bʨL| }.]n!H5,lLgv ""Yw]ω=S4"j4}^ycP.U!{o7սo>Dendstream endobj 28 0 obj 1363 endobj 35 0 obj <> stream xmoAr >?UјK P[@흽Sm cag3J4qIHIk!(k]v𶚒3rX]^} "_~>T]s/^3$Qi ȕBZZ\CRhOK|4iQOKᔳڳw-CkQYvϭG%Kꄒ>Dhf4[nU[In*ؚ֔{ak"lʵ&ȶ5FH%7OE00|W,lHMGnWt> mAd-V- +G3^|#kC50F  \VC+::MhY%*&UFGG@ Ez4D:GzWS5x@YGM-F0{Mx%'5blFH% ]#QRbk1D"m;itvT5tX;2~vt6o^Gļ#v{Npaw[ [#Gf%P$b':?v]= 6Gv,endstream endobj 36 0 obj 624 endobj 42 0 obj <> stream xXn7E_@ >E&H ñą$ے@LmpHΜeÙ ?8]M.'&_%_ˉ{tO~yЬ'?W(f1`zo;4N)e_ <9u"z cUˉg*Ky4]Qq>f8>4S ob&o;Ό0Z3L) Ltm:FN3V0 (p(&vH)lpqMĒOiUzמ!2LE'S.KOqמ ޶o䊾wmj.a#X6sվNTeӢ}u_f?m%o ͆Ɉln,3.~ ʥbl2MP^_@0(U[#wM*2ʙJWy+Q\ޛv ;hOarP$L<}\wɸ=MWkpS'=&SH-Z E!jUv*rêyPH-R+kH!u^+g:+ RHWGU~`y+;j;\yc4gג׃~Jx*D|JB[:3<D651$!\Α :YlVKr=!GyDN RI&\]7kcǠ6gx&UJeNcʈ詛XW:f]w3'9xKƂ=@* \2a~D0 e(>C^jE+hm !.r}ҁ !ɒЅAdb0JR2B- [VnF2ۡZ5$pze^?O} ϼ*@[]QqzG}TfƆrtyQ-3dHSҔ,k$5#{qɅARW./Bl~KyXˋM뾪Ҋ~[%l[+.eowD} RwPVfU8/zPhLrɢK)ETB d /Ɣ$g ;)tR`G$'ii؀ {6)0g<R3"y]+dNtqg |;c(D ǵTwi^䨻(<\w^\-$ 栟`a9a@և$3Jɟ22endstream endobj 43 0 obj 1498 endobj 48 0 obj <> stream xZ[S7~_]&Vuo-0Ҵ)>$ CƗ&=Zy%>4e v3(V荋Y!#oH /~?"'w>s|Qq~֘Ncc.%'PgBay"7k#OC,QroL~삭HA"k)cդ + q<8ծVJP+,&A-{QZTZ*a\?̰$ I*_Wr[3W5Z\EQ/]b˥emhu?/!*iSX*jong0F+M4: E~DhFK$"*%XHFmUu?ݦt)}-ť!jBs\hǛVGJkYᨁɯћ,otO"}NPKhE.7 @dNG]R"ԖIp#17'H:uƘ~G;S){NmRVɐ;)̐ ijʕiwQR^˿aenA>H:o!U16gbY، ,diC4H.GH[`c_-9ϜkYRajڶmdt|om!<# C y`„2d_ GXCl>&=t*:?cG # ˤ> @'(, 9GAqKwb=hat?Er@"6 'Y` FC,Ggy}q:v9rXl^m)Cɓ::>VEnyƷU :vs }q7 oRK,\ns_)QV2f543`E&*KIWsl:-r2sJx¢+Mlendstream endobj 49 0 obj 1339 endobj 54 0 obj <> stream xXKoE>A!lm"""Ė86Mxw g{q@@"=Lp,7y`IǺ3vXbXut/6l8OP2`>}J f-f]>:͞g9L}YiŅaϰXr!dl.Iio_fk@AT\hW3U4֩9n,imgyE#Ф;|3ˍ{h*~]V6S>ҞIs\~8m.]i#tPqAۆ&M#- *|v^Z F˂N Zt5C?S\pc`ct"hPJ`##\*n]` s0QTM5Mg^u* O@d/fs\Fh hy#Hl< |]Ц#ZtM|ҁUwYhmOZ0pn\kȃKS\跄knAb`X1 QAAgtQPPN5,5[F0+3>r3޸>k{ot"iaJiʝ;EnUП5oN0 Ҁ#ј#5xrD*H)"$cAXZ͖͸s&f"b`DyB17)'98RaӖG:2 6rD1\qx#8UXWk Wԙ[lybcT>z03ۜQ{7|Ry>* !8T(<`(jQ+}i<|u7smh4ń>a^ĸH:ԱxbШ|56o1w8IFګ15dn!@xBh=T]Sxsy1ͺ7Y,N~g HJK$—͈-}hڤ1%chVeY ě'^W d%^ґ0xIsUA֒lZ9Ņ+lL^N-r\iZ9u2_*Za[')@V. k^k E֊r$c {jTقM\^0=qD/3̬&m,")j#`ktq ?Q .X.+:-]CP7%|]:"y%r!cA8a`G $= 9b'<ĊGC .2iz]Nάo gsioyλu]fe[5˷eQC~m)O{(m\YIA?"̅ޮ/h$T2]'RDFr0K+NX/ Oi-ipbR@3r"倢$"A%oq2XvR(SR dDPF*V1b2%cO4Im1Hhّm'A`ZY\wXoز0ɉ: + b1z\0 SY9d"9GKdy ҧQbQ:,EAUMQ`G+Is!vxVTi/u̔zÉU1m(Sv8M@}4P' *C ;*B -;mxi+ eyUF$ m"`UNYT~t$R@NIJyV,2osջx`ic,RwY'&bgMFd}t"G^ƾ…mx8W#]Mɋflŋ2LIqj"oI[ӿWc\Oosj\w/YOo'3)CL)qRS)Psb5_tendstream endobj 55 0 obj 1920 endobj 60 0 obj <> stream xXKF`ľ_L7A F|w@XώWfvI}*v9;-;dXd}j@U;;yZ kl3||i:W6?jM{jG+Q& ڿx"]KYqO9oگ8gy\M7okJу{,A)]oolt7vL0mU."5z#8إU0QZXjuEYKzp~ LYULewUA>j8kE͆ZUB?g0# rDŽ. M%Z&e4h`hcܗGJ]*okNi B# ?? h .vdAK0~ JFO zYСۂCwm yqCdy/s&-M/Vkñuq^Voʉs)~[?+=xAw$+ܠke>68~7/}apbp !D`wp뫦sR=7_ E>ޮi>uV-5t\*,N1WtUٹmO]U`MU6p"M r`tr^pkGH &J$zAc wAِѦі(EUX2N>1UV!lj.A=Cwb6UuY%qĹ8S/^ݧ& vEs~;e?"k8h0gY&Dלh71H3i.)ڞ3-_Tu4L笹/`.,IP#`& 8[m,A CG=IYRCМD1)pˊTq8huqQ^: X95uA\NyEl)vٸ]2R^`Tpvhc!" 耊4 OVeHG<@p)Rl շyf|Qo;CёY?{!)yJ:PSձek7gyzFPΧTEӑd8 7uBw㑐G~ʀYj,\]1W%Mi˘/ ә{УlTX2@h rtT YYAʯč"V0$ *:NJXOj{5eǔ&$A@t!NӢ4idfȹ4u\|X=8D_J x1W#KH`Ƙrh%aOd< ΚeAFb~$Aviy\mp3|%{yJwWU@Awy 8KDT3 =d:).]XOw Z> stream xSKkA|"x}zvUb%.x0uk  N)xHY+X.f>`6eu㈕Wm09}~}jvg` ~ D(C%Jh>'0 R-7x 3<)1{ї||W x _4Bht]}TUX#¼n~v΄R–-\~-62NY?l; ~vlr baL)MWmMΙ~ KߗD~屣8,{mM.HϤbt:p'=Qr&.=r8h־2$Im`f(ܰAb$Xz$v7B*6nBX̋mZ(zP))%B­^,FSl>br,+Nb\"8e)F`':C%-)Aj.k66dG:UzY 9O3^V3Vendstream endobj 67 0 obj 669 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 34 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R ] /Count 9 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 73 0 obj <>stream x];r0{N Xg<8d2I.Ca`0.r#Ng@mN4nuӰ}~ _ǩPc~ɞ/Usz헯kqZ>'ߗ>OWt,*3.9]Vw6(F@y`gdxP^18"*2y b!D] E^#XEM0i(A-77i(hUW4ߨF(h+oԣCqEl#qEHCE(ھE_(H)?BcR~+ϫfЮz6Qfg-5Nם˼ZR?v endstream endobj 29 0 obj <> endobj 37 0 obj <> endobj 9 0 obj <> endobj 74 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 75 0 obj <> endobj 30 0 obj <> endobj 71 0 obj <>stream x| xTչZk?=睙I23'aI2l0`$(lxmZG=:GX+*Xzk=!={ٳk5 !ځ84}a$ا$\3ϙ-78T!_=fT1!$6J{ɁP鬾U=w"^ >02>oFi?!ʕ+{A/Ce`CU*~O)kf=>ª~e.FH#p'HBhפ{]wQ=Gu BWhzt;=^AL݉F@چWhEc}9*q`wǛaݨz2q2K%ioĕZrP7ʝ~1^D?h3z9~~ |Ow+ CF 88-D߄6G^ն3+>d?pvrk$#$Eύox G??G?:5A?}<BWqwqlMC+zסnZzCO~h4R(Зz%yZGԺx*ZYR^.-).*,ܜlדv9vUMF^Ոp*sGr{}+L!|ON_BTk1)H!loR; MyzGsH ZOGTT{ P*}yڣ7h1Hk=iMe)[8E ZhYo #'㣷L~[+NM) {o`mJI{FoЊ7۳ 88A\AK_c -}j-}eGK_7CsZԹ38KڒS3Nz;83OՕ`@e]#)/ShR۽s]ųe]`U [iKl 6*7vAK:.JmOx+0mAgE,S>Qӭ@EKab0HVRhAgӪZ4)O C{)pw{5b!`k{p5h߱"B{Z;}[RRw к3 Z23T .wz.`|pʕ*(n-XeѪ 4`0HaԎK;ZBr$ OF3O'ݻC}Δpk\)oRMt)q҇R0AsN d@0v@(5*T@C=})QڶS8c:PBOpPJ~![.BQ%MߚqLpMM t$pSGkO><<@HfJz7jѲ2B;SU:mD2uxNfuSN. O^D5sh&^$$ECLIt6 Ip¡ -ge ɸoqyLCn_loM gCr#P~ED8', ?>erfg%CU*__<x/}N'IѵW*z= 9TC ] Eb*`.d!=`PULKU 'HzJK>*Q^гk0({>x쭫Upv(B^K/@5 ޡ^!#. 7(8d}Lrg1`ڐ\#!^'*\r놸, =QP?r#3pq W!3VJ\5$CV" +y/%/xKx%/KO)lxI~tX ;TIC!yhЎ{RC 6:=D[ 3,/&틖/"GJG=G>Ba.GC,`? `Mo&(AS"ߘXEUjMu&\kէ+m>)e>%;FFN_Ⱥ(E?h}ݠ5m`N^udz߶6ҿ |o[Ȏ{1Z1 N!]KaY#sR__A1y^b;;r0#=~om{a';fm eenj7o#Yz A H1C|= 8uqX8,y'o4 |G0/a蝲Ɣua]4ܖ]կ}-'uNwt k )|0|6m)%%P&zc7f-) -fr'LŸ0aX ™ċ6HSFPlK֚zuBݼ+8 rL$<%rcTYp}B)t/9*:͖k4IczH:}h0%\m*j06j+ dK|'|$y*l@DeNR\qX%[)86&G>z m7|g^Y 8j³G1Llf1̖DѽG ! ȉv'B^蜉g:]c20o%ogd SZ /DKD1[M5)*,,r}G~s]SϞ3mw!tٳ_^{=p֣-gS_gpȠF.(aRH E. )n1 =BIH:P40۷pF z]y4*DU޼w61w]hp/ .[mv_b`{0Rpki( RPLdglH]lH(/f'pr*`N%Ƣ *+ c PSd쪊BskW:ZZY-$0ՕϽW_7Z__f\ZaG.=1cտnr8L&9>9 R_kfZ}krjCWC{(Ig21]dbod S5~_C3b@JJ0v ?u]6¤*Jy&O/+U 3ن"T Xa<SMR_THjmX~ *ZA Z}p鳗_޻Xw`"BkAץD go^އsVX[jr#%.tlrQOi-#F6(fJ9I\6gg2R*·'5ܫw]ܽ\834'RsLhtI67qIuة(|Jٚ*k&;!>|4>|'wrE-:@8{-bn7vL 3P3{EEO1RYtvsW)4lٽXkI~[l:F:(\GE%n zoK5|NoBM=ʼHjog}TDU רe}bo&Bb`&NJ5m>L!e`+wJ4$6wQH 5 Mo& 6x ܹڳcsq7W!u@eSSsm9Ukj4NeU9ʌd1ɸ3ie|AAK{4]nH[9t]o@y}{?r<8wק;2ms(rá /&ٖo5WRC^2p}!{(Z._hD\qH+hd}FP@̜X,B}(Xl:EaAJ(v{F4S11%uudrOLARK4m_Cc=P `*>O)/FL_(oSh?weEٱIoOcS]M텉)~=kb~c<-bF)~y7Xm\1RFz#61z<>O%$e2LB``2Q 0H) P6<~zB@fkOSzo^KK)9 MzFl:~[XH} jD:pMG2Kq32=5>9Z{lg ()̾ Z&&5j,lwaer: fp(}M5(}~|ƀ`Nk|t,Ѷʾ] hekECxQfsiJɦ'FrUه/q5UR$Dfq {4ѓKOS#3_+$䳳c;B9OWPyaܑ>N񷸯W"lTH HwAI %/+XhbY6 \Ќq]K/4NyveǒĩcIJ<"b5Jd [|1 ' MJEm`}ZˉK'2q^V2,(Vf3PQ25KIі퍍Ol\`(/ZWy\vlȫ9kooٳ۫󞷖>uչ ϛ tf XI=ד`%TU)8Dv;Pn`_Zl6XbH 'Ÿ(hfm:Oj6}ƓcQ9Qб**b(i꼩k5^1,gd&{sqH}f& 3k`f23x@j]Pͧ=NwrL/[XanӴwlmit;PP;Ξn{iEs<Ǟ8ބ|#~+EaT 7ͨ`pV :2a)29I{E#OV^6Sf2 qL\-\gqev^tG-Nf2A(gS^[mit}dD0Z`Hq-cy"5F0iGjkobGhS}5*"dZz K/tJ k*-RgYZ*,kE\ŧ-g)9oc[5kB59HEea,LLH8z|SBIe>rnd,.K"X,@ e!.DŽ?uu Ly S V1'1317i7&FF|.^島W}pf5 ws[\dѪ;7Q}S/K˙_y8m@nڙഖ7"2)?]Yә3'bY" DP,6N;=YC0=(tJq{X8Uo6shs1Cчy*_,% ˤ3&/3wb'*Ew10M䕐q%ޟ>;7ݷv=}2%1< K8 ҿJϿ|ZKKZs4y9h?2|R B\[qvBǵLǵjR luO^]ʜ&fs.h?X}293dV4~kiELﵬ^˜VYjazUdeyeBm2 w4Aїi[GI/,N *(\dLS7,mYotƉ.a0YeӝƫtZ):FM:efiEV:>m07,ଓQ:Q&>oHp@oɱq\soqiM w]i9(,a:f]PI3ci%+I%MY.UYY犽<˳z_xEތ{׃?b$&@iuBp%FYH$ԅϏ%WF%[7o<QwԻE۽/<O*|s)\x]AkFb՞v2s'IY{$w(]Su[]a!y+)ݺ,sw7><%˺K[[\ٿkD8%w#Ř!nYY%rp2H3dcc!Goi 6D3WcbD-SdfQ.ı'bTVR;3dép$,)֒)X4b˅5Vܭ&Ć2]|'۷%Eu)톚!W܅g5vjѲPȧJcu} `}6 e F^(ݘY$LZ&ryUIՆ/7|^Մ&VãiaA䣛LʄDQ ̃6x3~{bBŭ!9ieP]iگWTԌ9-w:䅱* _R5 rN x"\> hdiQ ZAQ~NZ32`0A9@IStFuR>8ήf -ҫcҫw/)YLJ*? 8jDNѩq<2\J B!_6Tz .2Z#|Ы]_aJ6[65!N8i juD huz` $3bn3/FڻY'lz4_T"*;vD͟?H?u!>sp=z21b4HgB E ~^GD A8` 2'&#կ'^&_4>yVTF#純zi) :A}"v;`h Q 45Gz6A8z6IoMxO͘VIeC]S޹SE+5h?o*{+;/;&x1%|z )%U^HLBޔD\e" 1x*k[ 4]NCA{iuLX,8s|r% :pU"/#GGH @=E-:.[ $ [R~@Q嬅'=`dzݯp%g5_t p|{U~Ed Wg*6hLn‘YU20nLgMوԣ-Y0$ p'~(֧ӟ ;#BǕQvw]@8@cyxY9sbqY+j_={ZsÀ͎LYYiub;n;nqgqx\<.qx\<.ڃ/w~@ E UK^6ҙ -t Ɩ?ã>v)Nӿ8^y8QUϜU%h. ]fhZfh1:Q;*CE2 #jD-h!RX @vkBitz i' فIJ(s2\Qh7M)er%3K~O@dh|OT&nk=S IqDNTGBހ&r³Q.sxk NB6ޓzrKÇȧOGmk:ݩ߯m[I/t|j endstream endobj 21 0 obj <> endobj 72 0 obj <>stream xW}pT? |Ҭ[HaX5ɎuC좖|`"A"0Y n-JPрDEtl:-TNkt:sMRb[3xs;odBnm,V>m-c]l K[7/:]w%&R gjk{[Wy7`vTo7o9uvnh?߇]nSo_+W׆ME?/ۻ6uuk$k0}ϠGaC LlĠ~l#Y hoF3UhkA&V}i˺ s!tHA=^)8ş`.(C2FC%|||_I" r}r\hq9-l Cs2ni?5i%GP;1 73Ѿ8r3;Uo % GH? Cz2\u.?eQ!},BQVOh ƖABСn8Fι,e+`?8)8c9x.d*" %l#;p=z=q2DN ЙN^r;}o_(~60{)Jt^&iTܩ6uC}.J1zXY`&[a7$]KPFJz<.JYMd=DLf y c;(sO/3K.RӒB#Q8}O=Iߥcrtv Jma ;α17tT%JǸTfrP^.#o{'DcZ%WYR+C{%uBjڭVGՏ#F{)ynKx_w*ePHieu:g6ٸSA,bC2Oal ϳj79ɢl%b=cڣFՏp_r:,{]7z#i΁&ݠ>Ļv$S6r=Ka;a!L̆YxeC̹~uEkUrsY2v*(RfqԔZ1TĮPDMU>^\5ONzzJu0Y1}ՖN&vn|BtDunO>ʰ5mvO)0R$PE (h8+:ǧ`" 5>񔚤h66J,1S;x:ЫJO%-q;&E%͆ϼO0y)lj 4C}:|>ZNMx>g7b Aλ.o_iu:gmtƊ%e8Ii ?DMQm'f&LX>ZX=#DSp\F$*=Cu^nSrfNMo82lMڬ[8뉥&|FFSoq&aäEjDK%a\\h¹o\4`}:U(E L9O͒s~RZY_)6FS7d Cen7a/4cnj7E_fQDLS+%>a|tS+d9sM 6aS\c^Wq4 UL$HDtНF" &щӧz]/NpQb5ܚ0sшhQxC-z7X34&(=0 Nl-G?M{@]r5o>LoQ;R쪲[.:!d2YYMϸ`79QK,a7K}Ho^4;N>(<ea]>oA;ȝ3p䑿Wƥ~IzIr`x[ic):.'(Ujᅎc!"ol^K|}>'7Z9~[ VusW+b$I,yzLL ;pC0(7~nhR'd-A;82Cr:&? endstream endobj 76 0 obj <>stream GPL Ghostscript 9.04 () 2012-04-30T18:54:26+02:00 2012-04-30T18:54:26+02:00 PDFCreator Version 1.2.3 TLM 2.0 LT with Mandatory Extension - System ExampleJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 77 0000000000 65535 f 0000013764 00000 n 0000047285 00000 n 0000013649 00000 n 0000011887 00000 n 0000000015 00000 n 0000000707 00000 n 0000013829 00000 n 0000016764 00000 n 0000031880 00000 n 0000016704 00000 n 0000016734 00000 n 0000019759 00000 n 0000012081 00000 n 0000000726 00000 n 0000001803 00000 n 0000019789 00000 n 0000027661 00000 n 0000022699 00000 n 0000025712 00000 n 0000032039 00000 n 0000042521 00000 n 0000032173 00000 n 0000025626 00000 n 0000025669 00000 n 0000030047 00000 n 0000012277 00000 n 0000001824 00000 n 0000003259 00000 n 0000031523 00000 n 0000032314 00000 n 0000030099 00000 n 0000030142 00000 n 0000030185 00000 n 0000012473 00000 n 0000003280 00000 n 0000003976 00000 n 0000031812 00000 n 0000030226 00000 n 0000030269 00000 n 0000030312 00000 n 0000012669 00000 n 0000003996 00000 n 0000005566 00000 n 0000030375 00000 n 0000030418 00000 n 0000030461 00000 n 0000012865 00000 n 0000005587 00000 n 0000006998 00000 n 0000030524 00000 n 0000030567 00000 n 0000030610 00000 n 0000013061 00000 n 0000007019 00000 n 0000009011 00000 n 0000030662 00000 n 0000030705 00000 n 0000030748 00000 n 0000013257 00000 n 0000009032 00000 n 0000011105 00000 n 0000030811 00000 n 0000030854 00000 n 0000030897 00000 n 0000013453 00000 n 0000011126 00000 n 0000011867 00000 n 0000030960 00000 n 0000031003 00000 n 0000031046 00000 n 0000032530 00000 n 0000042718 00000 n 0000031098 00000 n 0000031965 00000 n 0000032254 00000 n 0000045340 00000 n trailer << /Size 77 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 48065 %%EOF systemc-2.3.4/examples/tlm/lt_extension_mandatory/CMakeLists.txt0000644000175000017500000000534214342422106025034 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/lt_extension_mandatory/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (lt_extension_mandatory src/lt_extension_mandatory.cpp include/lt_extension_mandatory_top.h src/lt_extension_mandatory_top.cpp include/lt_initiator_extension_mandatory.h src/lt_initiator_extension_mandatory.cpp include/lt_target_extension_mandatory.h src/lt_target_extension_mandatory.cpp ../common/include/extension_initiator_id.h ../common/src/extension_initiator_id.cpp ../common/include/reporting.h ../common/src/report.cpp) target_include_directories (lt_extension_mandatory PRIVATE include ../common/include) target_link_libraries (lt_extension_mandatory SystemC::systemc) configure_and_add_test (lt_extension_mandatory) systemc-2.3.4/examples/tlm/lt_extension_mandatory/include/0000755000175000017500000000000014342422106023713 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/include/lt_initiator_extension_mandatory.h0000644000175000017500000001064014342422106032740 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __LT_INITIATOR_EXTENSION_MANDATORY_H__ #define __LT_INITIATOR_EXTENSION_MANDATORY_H__ #include "tlm.h" // TLM headers #include "tlm_utils/simple_initiator_socket.h" // simple socket header #include "extension_initiator_id.h" // extension header #include "reporting.h" // reporting utility routines #include // assert () class lt_initiator_extension_mandatory : public sc_core::sc_module { public: typedef tlm::tlm_generic_payload transaction_type; ///< transaction type typedef tlm::tlm_dmi dmi_type; ///< DMI type typedef tlm::tlm_phase phase_type; ///< phase type typedef tlm::tlm_sync_enum sync_enum_type; ///< synchronization type typedef tlm_utils::simple_initiator_socket< lt_initiator_extension_mandatory , 32 , extension_initiator_id> initiator_socket_type; ///< initiator socket type SC_HAS_PROCESS( lt_initiator_extension_mandatory ); lt_initiator_extension_mandatory ///< constructor ( sc_core::sc_module_name name ///< instance name , unsigned int num_trans ///< number of transactions , sc_dt::uint64 base_address ///< starting address ); bool ///< transaction created create_transaction ///< create new transaction ( transaction_type &trans ///< transaction ); void log_start ///< log start of transaction ( transaction_type &trans ///< transaction ); void log_end ///< log end of transaction ( transaction_type &trans ///< transaction ); void initiator_thread ///< initiator thread ( void ); sync_enum_type ///< state nb_transport_bw ///< non-blocking backward transport ( transaction_type &trans ///< transaction , phase_type &phase ///< phase , sc_core::sc_time &t ///< time ); void invalidate_dmi_properties ///< invalidate DMI properties ( void ); void invalidate_direct_mem_ptr ///< invalidate DMI pointer ( sc_dt::uint64 start_range ///< start DMI range , sc_dt::uint64 end_range ///< end DMI range ); // member variables public: initiator_socket_type m_socket; ///< socket private: dmi_type m_dmi_properties; ///< DMI propteries sc_core::sc_event mEndEvent; ///< end event unsigned int m_transaction_max; ///< transaction maximum sc_dt::uint64 m_base_address; ///< address unsigned int m_transaction_count; ///< transaction count unsigned int m_data; ///< transaction data }; #endif /* __LT_INITIATOR_EXTENSION_MANDATORY_H__ */ systemc-2.3.4/examples/tlm/lt_extension_mandatory/include/lt_extension_mandatory_top.h0000644000175000017500000000430614342422106031542 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_extension_mandatory_top.h /// @brief This class instantiates components that compose the TLM 2 example system //===================================================================== // Original Authors: // Charles Wilson, ESLX // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __LT_EXTENSION_MANDATORY_TOP_H__ #define __LT_EXTENSION_MANDATORY_TOP_H__ #include "tlm.h" ///< TLM header #include "lt_initiator_extension_mandatory.h" ///< initiator header #include "lt_target_extension_mandatory.h" ///< target header /// Top wrapper Module class lt_extension_mandatory_top : public sc_core::sc_module ///< SystemC base class { public: // constructor lt_extension_mandatory_top ///< constructor ( sc_core::sc_module_name name ///< instance name ); // member variables private: lt_initiator_extension_mandatory m_initiator; ///< initiator lt_target_extension_mandatory m_target; ///< target }; #endif /* __LT_EXTENSION_MANDATORY_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_extension_mandatory/include/lt_target_extension_mandatory.h0000644000175000017500000001045414342422106032227 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __LT_TARGET_EXTENSION_MANDATORY_H__ #define __LT_TARGET_EXTENSION_MANDATORY_H__ #include "tlm.h" // TLM header #include "tlm_utils/simple_target_socket.h" // simple socket header #include "extension_initiator_id.h" // extension header #include "reporting.h" // reporting utility routines #include // assert () class lt_target_extension_mandatory : public sc_core::sc_module { public: typedef tlm::tlm_generic_payload transaction_type; ///< transaction type typedef tlm::tlm_dmi dmi_type; ///< DMI type typedef tlm::tlm_phase phase_type; ///< phase type typedef tlm::tlm_sync_enum sync_enum_type; ///< synchronization type typedef tlm_utils::simple_target_socket< lt_target_extension_mandatory , 32 , extension_initiator_id> target_socket_type; ///< initiator socket type SC_HAS_PROCESS ( lt_target_extension_mandatory ); lt_target_extension_mandatory ///< constructor ( sc_core::sc_module_name name ///< instance name , sc_core::sc_time invalidate_dmi_time ///< DMI invalidation timeout ); tlm::tlm_sync_enum ///< response nb_transport_fw ///< non-blocking forward transport ( transaction_type &trans ///< transaction , phase_type &phase ///< phase , sc_core::sc_time &t ///< time ); unsigned int ///< byte count transport_dbg ///< debug transport ( transaction_type &transaction_ref ///< transaction ); bool ///< DMI granted get_dmi_ptr ///< get DMI pointer ( transaction_type &trans ///< transaction , tlm::tlm_dmi &dmi_properties ///< DMI properties ); void invalidate_dmi_method ///< invalidate DMI method ( void ); // member variables public: target_socket_type m_socket; private: static const sc_dt::uint64 m_min_address = 0x0000000000000000; ///< address minimum ( 0 ) static const sc_dt::uint64 m_max_address = 0x000000000000018F; ///< address maximum ( 399 ) const sc_core::sc_time m_latency_read; ///< read latency const sc_core::sc_time m_latency_write; ///< write latency unsigned char m_memory [ m_max_address - m_min_address + 1 ]; ///< memory sc_core::sc_event m_invalidate_dmi_event; ///< DMI invalidation event sc_core::sc_time m_invalidate_dmi_time; ///< DMI invalidation time }; #endif /* __LT_TARGET_EXTENSION_MANDATORY_H__ */ systemc-2.3.4/examples/tlm/lt_extension_mandatory/src/0000755000175000017500000000000014342422106023057 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/src/lt_extension_mandatory.cpp0000644000175000017500000000515414342422106030361 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file lt_extension_mandatory.cpp /// /// @brief Example main instantiates the lt_extension_mandatory_top and call sc_start() /// //===================================================================== // Original Authors: // Charles Wilson, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "tlm.h" // TLM header #include "reporting.h" // reporting utilities #include "lt_extension_mandatory_top.h" // top module //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// 'sc_start()' is called, the example's traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point (int /*argc*/ // argument count ,char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); // REPORT_DISABLE_INFO_REPORTING lt_extension_mandatory_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/lt_extension_mandatory/src/lt_extension_mandatory_top.cpp0000644000175000017500000000526214342422106031243 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* -------------------------------------------------------------------------------- @file lt_extension_mandatory_top.cpp @description This class instantiates components that compose the TLM 2 example system. The same block diagram is instantiated for each version, but with different components. Original Authors: Charles Wilson, ESLX Bill Bunton, ESLX Anna Keist, ESLX Jack Donovan, ESLX -------------------------------------------------------------------------------- */ #include "lt_extension_mandatory_top.h" // our header /* -------------------------------------------------------------------------------- @fn lt_extension_mandatory_top::lt_extension_mandatory_top @details The construcor method calls the bind methods to connect the example components. -------------------------------------------------------------------------------- */ lt_extension_mandatory_top::lt_extension_mandatory_top ( sc_core::sc_module_name name ///< instance name ) : sc_core::sc_module ///< SystemC base class ( name ///< instance name ) , m_initiator ///< initiator ( "m_initiator" ///< instance name , 5 ///< number of transactions , 0 ///< base address ) , m_target ///< target ( "m_target" ///< instance name , sc_core::sc_time ( 25, sc_core::SC_NS ) ///< invalidate DMI timeout ) { /// bind the initiators to the target m_initiator.m_socket ( m_target.m_socket ); } systemc-2.3.4/examples/tlm/lt_extension_mandatory/src/lt_initiator_extension_mandatory.cpp0000644000175000017500000002523214342422106032442 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_initiator_extension_mandatory.h" using namespace sc_core; static const char *filename = "lt_initiator_extension_mandatory.cpp"; /// filename for reporting lt_initiator_extension_mandatory::lt_initiator_extension_mandatory ///< constructor ( sc_module_name name ///< instance , unsigned int num_trans = 5 ///< number of transactions , sc_dt::uint64 base_address = 0 ///< base address ) : sc_module ( name ) ///< instance name , m_socket ( "LT_initiator_mandatory" ) ///< socket , m_transaction_max ( num_trans ) ///< transaction maximum , m_base_address ( base_address ) ///< base address , m_transaction_count ( 0 ) ///< transaction count { invalidate_dmi_properties (); // register transport methods m_socket.register_nb_transport_bw ( this, <_initiator_extension_mandatory::nb_transport_bw ); m_socket.register_invalidate_direct_mem_ptr ( this, <_initiator_extension_mandatory::invalidate_direct_mem_ptr ); // Initiator thread SC_THREAD ( initiator_thread ); } bool ///< transaction created lt_initiator_extension_mandatory::create_transaction ///< create transaction ( transaction_type &trans ///< transaction ) { static bool new_transaction ( true ); ///< new transaction flag if ( new_transaction ) { // initialize DMI state: trans.set_dmi_allowed ( false ); trans.set_data_length ( 4 ); trans.set_streaming_width ( trans.get_data_length () ); if ( m_transaction_count < m_transaction_max ) { trans.set_address ( m_base_address + ( 4 * m_transaction_count ) ); m_data = m_transaction_count; trans.set_data_ptr ( reinterpret_cast(&m_data) ); trans.set_command ( tlm::TLM_WRITE_COMMAND ); } else if ( m_transaction_count < ( 2 * m_transaction_max ) ) { trans.set_address ( m_base_address + ( 4 * ( m_transaction_count - m_transaction_max ) ) ); m_data = 0; trans.set_data_ptr ( reinterpret_cast(&m_data) ); trans.set_command ( tlm::TLM_READ_COMMAND ); } else { new_transaction = false; } m_transaction_count++; } return new_transaction; } void lt_initiator_extension_mandatory::log_start ///< log transaction start ( transaction_type &trans ///< transaction ) { ostringstream msg; ///< log message msg.str ( "" ); msg << "Creating " << ( ( trans.get_command () == tlm::TLM_WRITE_COMMAND ) ? "write" : "read" ) << " transaction - Addr: 0x" << internal << setw ( sizeof(sc_dt::uint64) * 2 ) << setfill( '0' ) << uppercase << hex << trans.get_address (); if (trans.get_command() == tlm::TLM_WRITE_COMMAND) { msg << " Data: 0x" << internal << setw ( sizeof ( m_data ) * 2 ) << setfill( '0' ) << uppercase << hex << m_data; } REPORT_INFO ( filename, __FUNCTION__, msg.str () ); } void lt_initiator_extension_mandatory::log_end ///< log transaction end ( transaction_type &trans ///< transaction ) { ostringstream msg; ///< log message msg.str ( "" ); msg << "Received "; if ( trans.get_response_status() != tlm::TLM_OK_RESPONSE ) { msg << "invalid response " << trans.get_response_status (); } else { msg << "TLM_OK_RESPONSE"; if (trans.get_command() == tlm::TLM_READ_COMMAND) { msg << ", Data: 0x" << internal << setw ( sizeof ( m_data ) * 2 ) << setfill( '0' ) << uppercase << hex << m_data; } } REPORT_INFO ( filename, __FUNCTION__, msg.str () ); } void lt_initiator_extension_mandatory::initiator_thread ///< initiator thread ( void ) { transaction_type trans; ///< transaction phase_type phase; ///< phase sc_time t; ///< time ostringstream msg; ///< log message // make sure that our transaction has the proper extension: extension_initiator_id* extension_ptr = new extension_initiator_id (); extension_ptr->m_initiator_id = "generic ID"; trans.set_extension ( extension_ptr ); while ( create_transaction ( trans ) ) { // initialize phase and time phase = tlm::BEGIN_REQ; t = SC_ZERO_TIME; log_start ( trans ); /////////////////////////////////////////////////////////// // DMI handling: // We use the DMI hint to check if it makes sense to ask for // DMI pointers. The pattern is: // - if the address is covered by a DMI region do a DMI access // - otherwise do a normal transaction // -> check if we get a DMI hint and acquire the DMI pointers if it // is set /////////////////////////////////////////////////////////// // Check if the address is covered by our DMI region if ( ( trans.get_address () >= m_dmi_properties.get_start_address () ) && ( trans.get_address () <= m_dmi_properties.get_end_address () ) ) { // We can handle the data here. As the logEndTransaction is // assuming something to happen in the data structure, we really // need to do this: trans.set_response_status(tlm::TLM_OK_RESPONSE); sc_dt::uint64 tmp = trans.get_address() - m_dmi_properties.get_start_address(); if (trans.get_command() == tlm::TLM_WRITE_COMMAND) { *(unsigned int*)&m_dmi_properties.get_dmi_ptr()[tmp] = m_data; } else { m_data = *(unsigned int*)&m_dmi_properties.get_dmi_ptr () [ tmp ]; } // Do the wait immediately. Note that doing the wait here eats // almost all the performance anyway, so we only gain something // if we're using temporal decoupling. if (trans.get_command() == tlm::TLM_WRITE_COMMAND) { wait ( m_dmi_properties.get_write_latency () ); } else { wait ( m_dmi_properties.get_read_latency () ); } log_end ( trans ); } else { // we need a full transaction switch (m_socket->nb_transport_fw(trans, phase, t)) { case tlm::TLM_COMPLETED: { // Transaction Finished, wait for the returned delay wait(t); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: { // Transaction not yet finished, wait for the end of it wait(mEndEvent); break; } default: { assert(0); exit(1); } } log_end ( trans ); // Acquire DMI pointer if one is available: if (trans.is_dmi_allowed()) { trans.set_write(); dmi_type tmp; if (m_socket->get_direct_mem_ptr(trans, tmp)) { // FIXME: No support for separate read/write ranges assert(tmp.is_read_write_allowed()); m_dmi_properties = tmp; } } } } delete extension_ptr; wait(); } tlm::tlm_sync_enum ///< response lt_initiator_extension_mandatory::nb_transport_bw ///< non-blocking backward transport ( transaction_type & /*trans*/ ///< transaction , phase_type & phase ///< phase , sc_time & t ///< time ) { tlm::tlm_sync_enum response; ///< response ostringstream msg; ///< log message switch (phase) { case tlm::END_REQ: { // Request phase ended response = tlm::TLM_ACCEPTED; break; } case tlm::BEGIN_RESP: { assert(t == SC_ZERO_TIME); // FIXME: can t != 0? mEndEvent.notify (t); // Not needed to update the phase if true is returned response = tlm::TLM_COMPLETED; break; } case tlm::BEGIN_REQ: case tlm::END_RESP: default: { // A target should never call nb_transport with these phases assert(0); exit(1); } } return response; } void lt_initiator_extension_mandatory::invalidate_dmi_properties ///< invalidate DMI properties ( void ) { m_dmi_properties.set_start_address ( 1 ); m_dmi_properties.set_end_address ( 0 ); } // Invalidate DMI pointer(s) void lt_initiator_extension_mandatory::invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ) { ostringstream msg; ///< log message msg.str ( "" ); msg << "Received invalidate request - "; // see if request is in range if ( ( start_range <= end_range ) && ( start_range <= m_dmi_properties.get_end_address () ) && ( end_range >= m_dmi_properties.get_start_address () ) ) { msg << "valid request"; // invalidate the DMI properties invalidate_dmi_properties (); } else { msg << "not in our DMI address range"; } REPORT_INFO ( filename, __FUNCTION__, msg.str () ); } systemc-2.3.4/examples/tlm/lt_extension_mandatory/src/lt_target_extension_mandatory.cpp0000644000175000017500000001647514342422106031737 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_target_extension_mandatory.h" using namespace sc_core; static const char *filename = "lt_target_extension_mandatory.cpp"; /// filename for reporting lt_target_extension_mandatory::lt_target_extension_mandatory ///< constructor ( sc_module_name name ///< instance name , sc_time invalidate_dmi_time = sc_time(25, SC_NS) ///< DMI invalidation timeout ) : sc_module ( name ) ///< module , m_socket ( "LT_target_mandatory" ) ///< socket , m_latency_read ( sc_time ( 100, SC_NS ) ) ///< read latency , m_latency_write ( sc_time ( 10, SC_NS ) ) ///< write latency { // register interface methods m_socket.register_nb_transport_fw ( this, <_target_extension_mandatory::nb_transport_fw ); m_socket.register_get_direct_mem_ptr ( this, <_target_extension_mandatory::get_dmi_ptr ); m_socket.register_transport_dbg ( this, <_target_extension_mandatory::transport_dbg ); // prime the DMI timeout mechanism SC_METHOD ( invalidate_dmi_method ); sensitive << m_invalidate_dmi_event; dont_initialize(); m_invalidate_dmi_time = invalidate_dmi_time; } tlm::tlm_sync_enum ///< response lt_target_extension_mandatory::nb_transport_fw ///< non-blocking forward transport ( transaction_type &trans ///< transaction , phase_type &phase ///< phase , sc_time &t ///< time ) { ostringstream msg; ///< log message assert ( phase == tlm::BEGIN_REQ ); // check for extension extension_initiator_id *extension_ptr; trans.get_extension ( extension_ptr ); msg.str(""); msg << "Extension "; if ( extension_ptr == 0 ) { msg << "not present - ERROR"; REPORT_FATAL ( filename, __FUNCTION__, msg.str () ); } else { msg << "present, Data: " << extension_ptr->m_initiator_id; REPORT_INFO ( filename, __FUNCTION__, msg.str () ); sc_dt::uint64 address = trans.get_address(); unsigned char * data = trans.get_data_ptr(); assert ( address <= m_max_address ); msg.str ( "" ); switch ( trans.get_command () ) { case tlm::TLM_WRITE_COMMAND: { // write command msg << "Write request - " << "Addr: 0x" << internal << setw ( sizeof(sc_dt::uint64) * 2 ) << setfill( '0' ) << uppercase << hex << trans.get_address (); memcpy( &m_memory [ address ], data, sizeof(unsigned int) ); t += sc_time(10, SC_NS); break; } case tlm::TLM_READ_COMMAND: { // read command msg << "Read request - " << "Addr: 0x" << internal << setw ( sizeof(sc_dt::uint64) * 2 ) << setfill( '0' ) << uppercase << hex << trans.get_address (); memcpy( data, &m_memory [ address ], sizeof(unsigned int) ); t += sc_time(100, SC_NS); break; } default: { // unknown command msg << "Unknown request"; REPORT_FATAL ( filename, __FUNCTION__, msg.str () ); break; } } REPORT_INFO ( filename, __FUNCTION__, msg.str () ); trans.set_response_status ( tlm::TLM_OK_RESPONSE ); trans.set_dmi_allowed ( true ); } // return completed, no phase update needed return tlm::TLM_COMPLETED; } unsigned int ///< byte count lt_target_extension_mandatory::transport_dbg ///< debug transport ( transaction_type &transaction_ref ///< transaction ) { unsigned int num_bytes = 0; unsigned int address = (unsigned int) transaction_ref.get_address(); if ( address <= m_max_address ) { num_bytes = transaction_ref.get_data_length (); if ( ( address + num_bytes ) > m_max_address) { num_bytes = m_max_address - address + 1; } if ( transaction_ref.is_read () ) { // read operation memcpy ( transaction_ref.get_data_ptr(), &m_memory [ address ], num_bytes ); } else { // write operation memcpy ( &m_memory [ address ], transaction_ref.get_data_ptr(), num_bytes ); } } return num_bytes; } bool ///< DMI granted lt_target_extension_mandatory::get_dmi_ptr ///< get DMI pointer ( transaction_type &trans ///< transaction , tlm::tlm_dmi &dmi_properties ///< DMI properties ) { bool dmi_granted ( false ); ///< DMI granted flag ostringstream msg; ///< log message // setup a timed event to invalidate the DMI pointer m_invalidate_dmi_event.notify ( m_invalidate_dmi_time ); // check for extension extension_initiator_id *extension_ptr; trans.get_extension ( extension_ptr ); msg.str ( "" ); msg << "Extension "; if ( extension_ptr == 0 ) { msg << "not present - ERROR"; REPORT_FATAL ( filename, __FUNCTION__, msg.str () ); } else { msg << "present, Data: " << extension_ptr->m_initiator_id; REPORT_INFO ( filename, __FUNCTION__, msg.str () ); if (trans.get_address() <= m_max_address) { dmi_properties.allow_read_write ( ); dmi_properties.set_start_address ( m_min_address ); dmi_properties.set_end_address ( m_max_address ); dmi_properties.set_dmi_ptr ( m_memory ); dmi_properties.set_read_latency ( m_latency_read ); dmi_properties.set_write_latency ( m_latency_write ); dmi_granted = true; } else { // should not happen dmi_properties.set_start_address ( trans.get_address () ); dmi_properties.set_end_address ( trans.get_address () ); } } return dmi_granted; } void lt_target_extension_mandatory::invalidate_dmi_method ///< invalidate DMI method ( void ) { m_socket->invalidate_direct_mem_ptr ( m_min_address, m_max_address ); } systemc-2.3.4/examples/tlm/lt_extension_mandatory/build-unix/0000755000175000017500000000000014342422106024350 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/build-unix/Makefile0000644000175000017500000000060614342422106026012 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = lt_extension_mandatory VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ lt_initiator_extension_mandatory.o \ lt_target_extension_mandatory.o \ \ extension_initiator_id.o \ report.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/lt_extension_mandatory/results/0000755000175000017500000000000014342422106023771 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_extension_mandatory/results/expected.log0000644000175000017500000001006114342422106026273 0ustar carstencarsten Info: lt_initiator_extension_mandatory.cpp: 0 s - log_start Creating write transaction - Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_target_extension_mandatory.cpp: 0 s - nb_transport_fw Extension present, Data: generic ID Info: lt_target_extension_mandatory.cpp: 0 s - nb_transport_fw Write request - Addr: 0x0000000000000000 Info: lt_initiator_extension_mandatory.cpp: 10 ns - log_end Received TLM_OK_RESPONSE Info: lt_target_extension_mandatory.cpp: 10 ns - get_dmi_ptr Extension present, Data: generic ID Info: lt_initiator_extension_mandatory.cpp: 10 ns - log_start Creating write transaction - Addr: 0x0000000000000004 Data: 0x00000001 Info: lt_initiator_extension_mandatory.cpp: 20 ns - log_end Received TLM_OK_RESPONSE Info: lt_initiator_extension_mandatory.cpp: 20 ns - log_start Creating write transaction - Addr: 0x0000000000000008 Data: 0x00000002 Info: lt_initiator_extension_mandatory.cpp: 30 ns - log_end Received TLM_OK_RESPONSE Info: lt_initiator_extension_mandatory.cpp: 30 ns - log_start Creating write transaction - Addr: 0x000000000000000C Data: 0x00000003 Info: lt_initiator_extension_mandatory.cpp: 35 ns - invalidate_direct_mem_ptr Received invalidate request - valid request Info: lt_initiator_extension_mandatory.cpp: 40 ns - log_end Received TLM_OK_RESPONSE Info: lt_initiator_extension_mandatory.cpp: 40 ns - log_start Creating write transaction - Addr: 0x0000000000000010 Data: 0x00000004 Info: lt_target_extension_mandatory.cpp: 40 ns - nb_transport_fw Extension present, Data: generic ID Info: lt_target_extension_mandatory.cpp: 40 ns - nb_transport_fw Write request - Addr: 0x0000000000000010 Info: lt_initiator_extension_mandatory.cpp: 50 ns - log_end Received TLM_OK_RESPONSE Info: lt_target_extension_mandatory.cpp: 50 ns - get_dmi_ptr Extension present, Data: generic ID Info: lt_initiator_extension_mandatory.cpp: 50 ns - log_start Creating read transaction - Addr: 0x0000000000000000 Info: lt_initiator_extension_mandatory.cpp: 75 ns - invalidate_direct_mem_ptr Received invalidate request - valid request Info: lt_initiator_extension_mandatory.cpp: 150 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000000 Info: lt_initiator_extension_mandatory.cpp: 150 ns - log_start Creating read transaction - Addr: 0x0000000000000004 Info: lt_target_extension_mandatory.cpp: 150 ns - nb_transport_fw Extension present, Data: generic ID Info: lt_target_extension_mandatory.cpp: 150 ns - nb_transport_fw Read request - Addr: 0x0000000000000004 Info: lt_initiator_extension_mandatory.cpp: 250 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000001 Info: lt_target_extension_mandatory.cpp: 250 ns - get_dmi_ptr Extension present, Data: generic ID Info: lt_initiator_extension_mandatory.cpp: 250 ns - log_start Creating read transaction - Addr: 0x0000000000000008 Info: lt_initiator_extension_mandatory.cpp: 275 ns - invalidate_direct_mem_ptr Received invalidate request - valid request Info: lt_initiator_extension_mandatory.cpp: 350 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000002 Info: lt_initiator_extension_mandatory.cpp: 350 ns - log_start Creating read transaction - Addr: 0x000000000000000C Info: lt_target_extension_mandatory.cpp: 350 ns - nb_transport_fw Extension present, Data: generic ID Info: lt_target_extension_mandatory.cpp: 350 ns - nb_transport_fw Read request - Addr: 0x000000000000000C Info: lt_initiator_extension_mandatory.cpp: 450 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000003 Info: lt_target_extension_mandatory.cpp: 450 ns - get_dmi_ptr Extension present, Data: generic ID Info: lt_initiator_extension_mandatory.cpp: 450 ns - log_start Creating read transaction - Addr: 0x0000000000000010 Info: lt_initiator_extension_mandatory.cpp: 475 ns - invalidate_direct_mem_ptr Received invalidate request - valid request Info: lt_initiator_extension_mandatory.cpp: 550 ns - log_end Received TLM_OK_RESPONSE, Data: 0x00000004 systemc-2.3.4/examples/tlm/CMakeLists.txt0000644000175000017500000000452614342422106020246 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### ############################################################################### # Add the TLM examples. ############################################################################### set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE) set(TEST_FOLDER "examples/tlm" CACHE INTERNAL "" FORCE) add_subdirectory (at_1_phase) add_subdirectory (at_2_phase) add_subdirectory (at_4_phase) add_subdirectory (at_extension_optional) add_subdirectory (at_mixed_targets) add_subdirectory (at_ooo) add_subdirectory (lt) add_subdirectory (lt_dmi) add_subdirectory (lt_extension_mandatory) add_subdirectory (lt_mixed_endian) add_subdirectory (lt_temporal_decouple) systemc-2.3.4/examples/tlm/at_ooo/0000755000175000017500000000000014342422106016757 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/test.am0000644000175000017500000000552514342422106020264 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_ooo ## %C%: at_ooo examples_TESTS += at_ooo/test at_ooo_test_CPPFLAGS = \ -I$(srcdir)/at_ooo/include \ $(CPPFLAGS_TLMTESTS) at_ooo_test_SOURCES = \ $(at_ooo_H_FILES) \ $(at_ooo_CXX_FILES) examples_BUILD += \ $(at_ooo_BUILD) examples_CLEAN += \ at_ooo/run.log \ at_ooo/expected_trimmed.log \ at_ooo/run_trimmed.log \ at_ooo/diff.log examples_FILES += \ $(at_ooo_H_FILES) \ $(at_ooo_CXX_FILES) \ $(at_ooo_BUILD) \ $(at_ooo_EXTRA) examples_DIRS += \ at_ooo/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_ooo_H_FILES = \ at_ooo/include/at_ooo_top.h \ at_ooo/include/at_target_ooo_2_phase.h \ at_ooo/include/initiator_top.h at_ooo_CXX_FILES = \ at_ooo/src/at_ooo.cpp \ at_ooo/src/at_ooo_top.cpp \ at_ooo/src/at_target_ooo_2_phase.cpp \ at_ooo/src/initiator_top.cpp at_ooo_BUILD = \ at_ooo/results/expected.log at_ooo_EXTRA = \ at_ooo/CMakeLists.txt \ at_ooo/build-msvc/Makefile \ at_ooo/build-msvc/at_ooo.sln \ at_ooo/build-msvc/at_ooo.vcxproj \ at_ooo/build-unix/Makefile \ at_ooo/docs/at_ooo_example.pdf \ at_ooo/docs/at_ooo_example.ppt #at_ooo_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/at_ooo/build-msvc/0000755000175000017500000000000014342422106021024 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/build-msvc/at_ooo.sln0000644000175000017500000000232014342422106023017 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_ooo", "at_ooo.vcxproj", "{085992EF-F59F-44A9-8971-D23785FB81D9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|Win32.ActiveCfg = Debug|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|Win32.Build.0 = Debug|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|x64.ActiveCfg = Debug|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|x64.Build.0 = Debug|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|Win32.ActiveCfg = Release|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|Win32.Build.0 = Release|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|x64.ActiveCfg = Release|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_ooo/build-msvc/at_ooo.vcxproj0000644000175000017500000003144614342422106023731 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {085992EF-F59F-44A9-8971-D23785FB81D9} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 /vmg %(AdditionalOptions) ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 /vmg %(AdditionalOptions) ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_ooo/build-msvc/Makefile0000644000175000017500000000062514342422106022467 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = at_ooo OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_2_phase.obj \ $(OUTDIR)\at_target_ooo_2_phase.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/at_ooo/docs/0000755000175000017500000000000014342422106017707 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/docs/at_ooo_example.ppt0000644000175000017500000102100014342422106023421 0ustar carstencarstenࡱ>      n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`( v/ 0DArial Boldman{x2 0x"D-3 00000ldman{x2 0x" DWingdingsdman{x2 0x0DMonotype Sorts{x2 0x@DArial Narrows{x2 0x"PDTimes New Roman{x2 0x`DTahomaew Roman{x2 0x"pDCourier Newman{x2 0x1DTahoma Boldman{x2 0x@.  @n?" dd@  @@`` x;      4C/9?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8%$<4dddd 0g4^d^d` {2 0ppp@ <4!d!d 0{<4BdBd 0{ ʚ;ʚ;)___PPT12 %h___PPT10H0D-3 00000ldllp2 0p"DTahoma0ldllp2 0p" DCourier Newllp2 0p10DTahoma Boldllp2 0p ? O P!8, / * 6 7 #%40/p<4X@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography (PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> M( /`HzSmM   A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  Ni{?Rectangle 4P { T Click to edit Master title style! !.  HC?Rectangle 5P0 { RClick to edit Master text styles Second level Third level Fourth level Fifth level!     Su   NC?Rectangle 6"oiPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!m4o` drs/shapexml.xmlVM6 x-zh[ޠǂ?Ru=27ݡVl'Ǹ3sST1)g ]eLQ:630ln֤|}3]poL#5JckhNj/<ժ? &ZT(4kKV~[[V)$xę5I<*&-yLdė$SXGyoQ1bhrno()WT)fANwm SW+CǼVP9LD CiK+sLY2z{` 则( u3U)DPib~EpRJţK"Ԉq G 3|*Q[c9[j8jəMCJvzaT9NMyY4O4|n_Mi t1wfar# tr~ ! gԐ+#ӆ Y/eQUAL[:ʅl'D5 ^ "$m%E5ϷKQW DMItؘM@d݁PH :@[rT =l(룷+}k{it3heRfhy8>4F&@G|/2EWkộ^C›ͿPK!drs/downrev.xmlDQK0Co.mpE!;}mMRe>;|M2#rQ#:m/}{s,D GgI™l֗+;نCYP!Ʃ< 7]xp3rQ7m~pǁگ÷0W">~VvϢ%/$Uz)xm_ԋP-X;V H^B˶PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!m4o` *drs/shapexml.xmlPK-!Ydrs/downrev.xmlPK^, C   hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!o!drs/slideLayouts/slideLayout1.xmlX͎6;:x mp6F gZת)J%)c["]1QHW F= 2M0vGn YhwB_dh2-h331.op%XåXrQz~G81`$BA,{%w^^802-{ōAZp2Bn)r5CՑ)<مwˤ`*y$֩\ .K(຀%aN# EA&MȺĤ6`5o9"`]{=ۺ^,3*ORDd <ٮ,Flu::Q KBicw\g(Xv<΀o'l] >ȗ8 鞸Mc@#.k*v+;t (8q ^u+<cAx^$P<`8H(pPBpNH(pX\NpP<$4G%CB5AxbRnO}?w?}vu><)2TY:Ĝr}G>P 5+I8&9w0ch7Z9b#ZJJ 瑂n8C|Pۍ5T*P/xPxPxPxPxP~x_}}uw4=;D}w׾e'M]Gw#+޺_+Nc(C )ɴ2!3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!o!drs/slideLayouts/slideLayout1.xmlPK1PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> x"( ۅel S x x A"??"system_c_title_9Picture 2system_c_title_9 x NC?Rectangle 4P { T Click to edit Master title style! !. x HC?Rectangle 5P0 C RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB x s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0planH 0 44464( ( r!8 4,  4 `Hy˼y˼?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!U drs/shapexml.xmlUMo8/Hmg1I.FDEZS_7lAX>#qyMJ9XlS&=ޝ|2%ikT&WN`.ut4EZm *Z xuO)L@F-5F^(ZtsVq;єc|q&QT OZS9-~BKh!1mh9?#(A5@XZmu@s&-{Yzd+W[bn*cJl2Rn 4U |<|ca9({4eҡt1;Z|`!8wǦsc:pBOnS$/Ӕ%PWGbָߒƖ[BJ]vQںg)֎hrrvń5#{\1}{kul$2Nd"o,>vff츓;nNdNJ?7)ha1q$%񬕞p* Xc xqOx)Y񅇢NM%4&S5Pw6zB]& 0'{!&5A-Y h doLMOK)_(!ޅʚpYt9sʉvżɾ3c{i_qYc!OcN(2)ۦ4T,ʜ|[%*K3iog,!cђb,FQp;ldVͳ+2=͝ی/ͱ O7[ad^tλ֜(J ?\wSA즻PK!3]drs/downrev.xmlDQK0C/%.SJ뵹i˚ĭ÷ގG v@thxy3i(vsyWtܧFd5) na8w)Hᮗ ÎC=T?Nw5_O\bRr7yո{hLq[z{hS%:}T Y/fQ_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!U *drs/shapexml.xmlPK-!3]drs/downrev.xmlPK.,  {   hdman`  Arial&Monotype Typography  `   ab0|ay>z2  4 `y˼y˼?Rectangle 3"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!G ѕ& drs/shapexml.xmlU]o6|/@wSI\ pkUSJR_YRPb?Ȥg#VڇB> Vυtt)EdK2Bnt_s;6B.blǃAP PZmV9P?Z"5fp<Vv5kGa5. y28RZóDĩe`)=}dnl{T~o )ci"nZ,>8G}}u_Ei|sh*')62pu KW!NYa*8!~`<7*ѥi5 IܧtZ|C/:;>K3sSG텩B<2mB"&QBPX[[\ߺr r~\hW)^< ?y-BWS(&IҌ;gR#Uص<\RY8p+wm/>قZ#$LobB l@J^+3f% gE[L?AU.WP/xL]ӄQ/V:ʻ(Q*R0_ZSS49Q-%&%m*t<Rږ4QdO4%(x؞S`1=GPUS3]VG}얻ЪM'_w8ɧujy7{ Qn[y?sƁpOÞm9%OeԍΤBg VYbNϮInFR,K(u]WgS?ҔI75_imꝫxqgqз޺b؞ۤ#{)[ T=@l[M{/PK!gdrs/downrev.xmlDMK1E!z 4 H ?Rectangle 4  {  4 `y˼y˼?Rectangle 5"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!~r'8drs/shapexml.xmlXQO#7~`BBrCGz!Z/~ ^UD7ͬyLZWMΤNMV賄:9sЙPF˄_J~ͻj* OKZnl))zըn Mz_%.`Ig)N{֚qn+pUS2Yˉ.Ur2G$޸FuM.> E ynU!;&He»[BF0b 瞥Xu'KI6=!:Abd( x:NBU!A*vN/8= )f(R|E ,9GԫE c>*DQEj> H+.3ULAn%M}2y.SXM,wT}qN? [5QGf<r# dD9?+B2yO6Cf8:C PgʊL'b2Fk >jK1֒@A&3rS.R8g B NEY(h7Pvzwn?Ѧv^Ʝ0ؘ=N%k#)5E[b g&ddH2+Pf`RYIղ_~W5{D{-f2:kҡIG᳒.t6=-nkM5^糒']w1ˬYfu_uxx^p PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!fᰜ+ drs/shapexml.xmlUn7}/ 8!6ⴀj>s\ܒ\]=C$҃43g |4ق> 9SVJx?,Da+aUߪ^K; -a&m1 ȅjDZeW;߈^eԘpx>hWռyj普 yxV4$0<w'`L\?X*/H_0u=2![ ޭJTFA·j -Pу ?q!ۀYU8.lj!>J-tD&uzu1Al|$y>E(dQ!κ{m̱ɧ=.tgdFI%|UrBl#Acu5꾬uՖrO0 P/@Kҳa W3(&E gNzv͝3%gټX\ӊ8VNvOo{DHUOMr4%&ybhIIkeFԬJL_hH`:+X^n4FMt68+uZЈTwƳ/q'/9iXlZZ^4ڠ_On!|Pk 1a2l\~F%Ȳ~*1~0)3^'QL c~MjlIGJHtD9sCIܶr&c&vԁ[UqZyؽeJ>mRϗeo#Og?<$׉zVTLxAYvnOI ɏy~_XN]-[n,ΖNbdڹwf_h_iIM/}ڛyj _cAlз DK7=WIox9{D2ِໝFkPK!ndrs/downrev.xmlDN0EH5H쨝 Vʦ-lMIl5#ۤcνgv`hP0rW>?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!fᰜ+ *drs/shapexml.xmlPK-!ndrs/downrev.xmlPKq,     hdman`  Arial&Monotype Typography  `   ab0|ay>z  4 fy˼y˼?Rectangle 7"uoPK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!vmb drs/shapexml.xmlVo"7~k)zPȩmI ISUA7}ޏb[i]at»:IЏ psЙPF˄?K?]j*V x_Mmnd)SIRx,cIAj:QjiJKˊ,ń3-Jz/S$->!¤OE\2+v(i0m>[TřfiZH9C~T52\ t*K?ja>l k! bmynE9x09{Nx4`1{R8&qO1^=! yVҜ@ hTlGqJ AQsð]'0$3 -f(j>T/ mt7-Bhg&{PErN1/tL03ٷ;;.F~ "jלEs3e%BcUت3'q0P?C=΄$ڪ.QVG&.BSd²u bO%ZQgTр+˶}Ԛw^ ʩ"T\B(Ϊ§[Q mq#8@D݀B)a APe)"}0pd-t:d + f `}~ jn h#$ȷ0W4B*]>=R4Pc&\^_uN>hޢibDFCb,܅Gɠ?k]wɠך Vf>o/p `BXt.^Ć`F.u*^Ua*:v)| Hn~[hg%l픶 XhΒ3X../X)w;ebCPwd0L@6wc)MK!ܠÁ:G#a?7mѼ:R$)H)zW^[qwY^H^B˲YPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!vmb *drs/shapexml.xmlPK-!1^drs/downrev.xmlPKdq2 ,    hdman`  Arial&Monotype Typography  x*   ab0|ay>zB 4 s *ηo~ ? 3380___PPT10.1?'PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>x.lM0Yn+eQhr%E:Gwstt|%*\mz<.N[F5#B+%xQs"B٘$8s.ҌIbtΔK3C>zRv{HCurjLq~6z!$1E̽)-K ^WGjIN:u`KBB $͕6d*F(f)9ç , ů0'ʕl6 VB;ճeX"'1` L˲j) 3Y(`89=ai՚P uݝ[WX~!Kf ]Zkg\Y]u r˜zcÉ?uNb͈֠<>Yݮ>߮Kͨv"XksR !y^X겧 |-U*ΚRvz{`OPv0=`kĢN=Ib"6t"oE^ [YbT]ҬJB rpd(`?Td PhXh6Tv:ͼlU*k f{*nXn_PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10."f 0 @h( r.zSmM @ @  x0e0e?Rectangle 2P  { 8$AT System Example - Annotated Timing$ @  xv0e0e?Rectangle 3 { XThe Goal is to Illustrate: Application of TLM 2.0 in a real system Show out of order REQ and RESP phases Target Initiator Possible Applications: Architectural exploration Early software developmentbO5O  5 X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"6 0 T6L6  H5( ltnc{/ H H  x00e0e?Rectangle 2P   )Example Block Diagram H LЋ?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H b?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx H h(]o?Rectangle 21  ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_2_phase (m_at_target_2_phase_1)b* gGg  G  V]8Xx" H hpo?Rectangle 22P!pJB___PPTMAC11   hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   SimpleBusAT (m_bus)` G gGG,  V]8Xx( H hto?Rectangle 23  ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_1)b gG g G   V]8Xxc  H h؊o?Rectangle 24 ( rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_2)v gG g G  G   V]8Xx  H ho?Rectangle 25 ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  1at_target_ooo_2_phase (m_at_ooo_target_2_phase_1)L2 Gg G V]8Xxb  H b?AutoShape 26pX    hdman`  Arial&Monotype Typography  < V]8Xxb  H b ?AutoShape 27px    hdman`  Arial&Monotype Typography  < V]8Xxb  H b?AutoShape 28 IF   hdman`  Arial&Monotype Typography  < V]8Xxb  H b+?AutoShape 29p X    hdman`  Arial&Monotype Typography  < V]8Xx6 H S ޽h ? ̙3380___PPT10. "" 0 _W@P( ` P P  x0e0e?Rectangle 2P   3How to run this example (Linux) P  x0e0e?Rectangle 3P0  LSet SYSTEMC_HOME cd examples/tlm/at_ooo/build-unix make clean make make run >MA A=A,V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt"< 0 PT>( X $8cjJ T T  xG0e0e?Rectangle 2P   2How to run this example (MSVC) T  xL10e0e?Rectangle 3P0  4nOpen a explorer window on examples/tlm/at_ooo/build-windows Launch at_ooo.sln Select  Property Manager from the  View menu Under  at_ooo > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run68Z!A C  A  $$ ((,,00 4488 <<      A $$4488P# 7V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt" 0 ` X(  X( X  xDPz0e0e?Rectangle 2P  { \Expected Output (1of3)*AS  X Nz?Rectangle 4`0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 1824 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000100 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns . . . Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path . . . Info: at_target_ooo_2_phase.cpp: 1844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000200 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) 4  g  ( X o] X bT V]8Xx  X Dz?TextBox 3IYl   hdman`  Arial&Monotype Typography  u%Approximately line #2976 of log file  &&g  V]8Xx  X D0z?TextBox 4v   hdman`  Arial&Monotype Typography  u%Approximately line #3023 of log file  &&g  V]8Xx  X Dz?TextBox 5 v;    hdman`  Arial&Monotype Typography  u%Approximately line #3043 of log file  &&g  V]8Xx X r?6Straight Arrow Connector 7 X r?6Straight Arrow Connector 9*   X t?8Straight Arrow Connector 11f  r  X ^zG8c?Left Brace 12g.~   hdman`  Arial&Monotype Typography  < V]8Xx  X FPz?TextBox 13^r   hdman`  Arial&Monotype Typography  iREQ for first transaction g  V]8Xxr  X ^%zG8c?Left Brace 14#p    hdman`  Arial&Monotype Typography  < V]8Xx  X F$z?TextBox 16 T    hdman`  Arial&Monotype Typography  jREQ for second transaction g  V]8Xx6 X S ޽h ??`XXXXX X ̙33___PPT10i.ntDw;+D=' = @B +"2 0 p\( zSmM \( \  xPz0e0e?Rectangle 2P  z \Expected Output (2of3)*A`  \ N ?Rectangle 4aK0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Info: select_initiator.cpp: 1864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000200 Info: memory.cpp: 1924 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1924 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1931 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1931 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 1931 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) . . .4 g  0 @QO8  M _K V]8Xxr \ \zG8c?Left Brace 4#    hdman`  Arial&Monotype Typography  < V]8Xx \ Dz?TextBox 5pg    hdman`  Arial&Monotype Typography  z*RESP for second Transaction (out of order) ++g  V]8Xx>  \ `zG;HzgOval Callout 6"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!Hdrs/shapexml.xmlUMo8/uڲ1I=QK"r}ɩz$7O ?~Z5S}KLn,X QSU^~74S z>_(Һݲ8 pP{~ԫ2[U1Rq5iqGZ6uiq+/ch)]a\8zĖ`GC)`n<ʆM&`|9H#a|>ʆ1'q|QR}ֺjiC~ 9^ŗ5 wb #bmN*^bpL0B) (؛0V#sW6YHW)Rζ`M!¶ *#ZRhcę*;`MH*KTcH6[[l ëHC|E: ˚H X>VS1ۻyZY`&0q^T-8LJR|)\Hي̭{Қp\` Wd}}r˼c|,:Ȣ9dܪ}. 7%=ENaZuޣ#),`[ ЬhUmURT<ʜ}{.))g۝|p3{mΑ p'H6DUīPW_~*^8ؙN+V}lr/ߴ}ϱ'pבc{/3/xk]*FRRx7"H*_U3EDZ8GB#>c3ٵ PK!Sydrs/downrev.xmlD]K0EC77]ݭ]D |iSl&%oA/r.g}StR"m1=^@%A&GJZ,a Ҩ T'җZʑ4 =q=J6ӗEq=t~{|#H_Mv֘(c^|?gkTt`[6͖?PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!H*drs/shapexml.xmlPK-!Sydrs/downrev.xmlPKw   hdman`  Arial&Monotype Typography  :Router has  modified address  V]8Xx6 \ S ޽h ?\ ̙3380___PPT10.ntDw;" 0 `( Wb0 `( `  xEz0e0e?Rectangle 2P  z \Expected Output (3of3)*A  ` N ?Rectangle 4n$R 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ^Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000100 Info: memory.cpp: 2604 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 2611 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) 4 g L+0 @QN8  M _F V]8Xx  ` Dȵ?TextBox 3   hdman`  Arial&Monotype Typography  u%Approximately line #3043 of log file  &&g  V]8Xx ` r?6Straight Arrow Connector 5 Tr ` \0G8c?Left Brace 6Ib    hdman`  Arial&Monotype Typography  < V]8Xx ` D ?TextBox 9l   hdman`  Arial&Monotype Typography  y)RESP for first Transaction (out of order) **g  V]8XxA  ` bpG%H2s Oval Callout 10"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!A`drs/shapexml.xmlUn8/@Hm9u$ԨSq1([ E $}ʲSg~(+kf20BY䏧>)H[fr|oo6?mfrB3 |V5Qku5|ՠq+(ZFxPSe5B͢h叛U\2) 8ۆ#mD61a`q E|j D6XDm.k G/]4e)3yu>]N&M6hr5>"b_EAJ$z6·=9)*VUUMy5p٨Kit4.$j{@`Pզ!~ xLհx?H ~dXSS/3rtk&h` HJ +h+3sxWJ9l7^?ɯ/rmM[+*B]hUƴjUH{x5m"@,USq̏m#)=lom,fr,#PO5hkjAI_DJ ":5!F{#O+ fw6De Ȃ4-E'Z.^A…ܺgv/ 7L%yĭayMf7oMZM <$FfQi@&V}nX)98LrZۀ]Z;lY鮡qܺg;x,(Wu2lhLfv DI Ћ#PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!A`*drs/shapexml.xmlPK-!@drs/downrev.xmlPKw   hdman`  Arial&Monotype Typography  :Router has  modified address  V]8Xx6 ` S ޽h ?/0``` ̙3380___PPT10.ntDw;" 0  33d( xzSmM d d  xc0e0e?Rectangle 3P   &Initiator Module yz P  dC ,Group 129"P     dC ,Group 130" & .d P(8?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /dC ,Group 132" > P  0dC ,Group 133" p 2d dg3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3d  $@B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1d T?Line 136      dC ,Group 137"  # (d Pw?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )dC ,Group 139"  > P  *dC ,Group 140"  p ,d dT3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -d  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +d T?Line 143    dC ,Group 144"  $d P<?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %dC ,Group 146" B &d T?Line 147P P 'd dX>]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p dC ,Group 149"P p  d P&?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !dC ,Group 151"P pB "d T?Line 152P  #d j%,>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ d j$?o?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx d JY?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx d ^$?AutoShape 156p V q  d ^ ?AutoShape 157  d ^ ?AutoShape 158 P  d ^$?AutoShape 159q Vq 6z P   dC ,Group 160" P  d dٜ3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB d  לB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   d ^8?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   dC ,Group 164" P  d d@3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB d  MB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  d ^`?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx d dw>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx d d(>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx d d؎>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= d d|?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> d d?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx d ^ ?AutoShape 173  d ^ ?AutoShape 174P d dX>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ d PD ?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB d@ Z?Line 177   6 d S ޽h ?odddddddddd ddddddd ̙3380___PPT10. ""b 0 aaBBl_(  l l  x00e0e?Rectangle 3P   )TLM Interface Module  x   lC *Group 35" $ =l Nl?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >lC *Group 37" 8 P  ?lC *Group 38" p Al b(3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bl  ,B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @l R?Line 41  x    lC *Group 42" ! 7l Nh?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8lC *Group 44"  8 P  9lC *Group 45"  p ;l bh3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p lC *Group 54"P p 1l NLzh?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2lC *Group 56"P pB 3l R?Line 57P  4l h%,h>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx l fdho?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  l Fh?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  l@ Z$?AutoShape 6 v/"  l `h?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   lAC *Group 59"`H  /l bh3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0l  hB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  l bh?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ l bh?Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" l b$Eh?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM l b4Ph?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx l \8c?AutoShape 80*3  l \8c?AutoShape 81   l \8c?AutoShape 82b  x   lC *Group 83"eB -l R?Line 84P P .l b_h>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   lC *Group 86"c=B +l R?Line 87P P ,l b^h>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx l@ \8c?AutoShape 90*eD + l \8c?AutoShape 91c  l@ \8c?AutoShape 92*D M l \8c?AutoShape 93 s  l@ \>?AutoShape 94: <  l \>?AutoShape 95g: : : l \>?AutoShape 96&: < P  l \>?AutoShape 97* < @ T B l  0xAhBC+DEFQRUVW8c?u+ @  28ryU;@+Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE l Pa?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  l Z?Line 101Dc; !l Pg?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB "l@ Z?Line 106; #l P`u?Text Box 107a j 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB $l Z?Line 108(  ; %l PD?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &l P?Text Box 110haq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'l Z?Line 111vkB (l Z?Line 112;-u5< )l PH?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator_socket*  V]8XxB *l@ Z?Line 114[+6 l S ޽h ? llll llll lll.ll l,lll,ll l,ll lll l ll lll l ll ̙3380___PPT10. ""C 0 =C5C..pB( +?(^zSmM p p  xĩ0e0e?Rectangle 2P   "Target Module 9v P  pC (Group 3"P  ~   pC (Group 4" " )p LP?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   *pC (Group 6" 2~ P  +pC (Group 7" p -p `3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB .p  4B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB ,p R?Line 10      pC *Group 11"  ! #p Np?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    $pC *Group 13"  8 P  %pC *Group 14"  p 'p b|&3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB (p  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB &p R?Line 17    pC *Group 18"  p Nh?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx    pC *Group 20" B !p R?Line 21P P "p b@X>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p pC *Group 23"P p p N T?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p pC *Group 25"P pB p R?Line 26P  p h%,5>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx p ho?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xx` p H?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_1_phase_target) J# 2GGG V]8Xx p@ \$?AutoShape 30P1" p bP?AutoShape 31wX c   hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  pC *Group 32"P p bt}3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB p  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  p b̊?AutoShape 35 { t 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  p Xh ?Oval 36 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxH  p b?Rectangle 37 u0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ~m_response_PEQ& V]8Xx  p@ b8c?AutoShape 40X   p b8c?AutoShape 41L p b8c?AutoShape 42{  7 p Nl"?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB p X?Line 44K+9 p N.?Text Box 45 6 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB p X?Line 46 v  p@ bZ8c?AutoShape 40cr w  p@ bZ8c?AutoShape 40uw w 6 p S ޽h ?opppp pp p p ppp pp p pp ̙3380___PPT10. ""I 0 HH88tG( ht@!8@!zSmM t t  x;0e0e?Rectangle 2P   &Router Component Gx P  tC *Group 56"P     !tC *Group 57" $ 3t NA?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   4tC *Group 59" 8 P  5tC *Group 60" p 7t bQ3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  < V]8XxB 8t  ZB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 62P    hdman`  Arial&Monotype Typography  < V]8XxB 6t R?Line 63      "tC *Group 64"  ! -t Nd?Text Box 65 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    .tC *Group 66"  8 P  /tC *Group 67"  p 1t bq3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  < V]8XxB 2t   OB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 69P    hdman`  Arial&Monotype Typography  < V]8XxB 0t R?Line 70    #tC *Group 71"  )t N?Text Box 72 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   *tC *Group 73" B +t R?Line 74P P ,t b@ >]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p $tC *Group 76"P p %t N?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p &tC *Group 78"P pB 't R?Line 79P  (t h%,#>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8Xx(x   tC *Group 99" ^ t f@0o?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx t F<?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,2>)L 0 P2GGG  V]8Xx t \$?AutoShape 13  P  t \$?AutoShape 17PPP   t \$?AutoShape 4601P   t \$?AutoShape 47ppP `  t N̵5?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (2)" G V]8Xx  t V?AutoShape 51   t V?AutoShape 52@ c t NP5?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx t V?AutoShape 54  t V?AutoShape 55   0  tC *Group 89" @P t b853fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB t XjJ?Line 84 0 0 B  t XjJ?Line 850 0   0  tC *Group 90"P t b53fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB t XjJ?Line 87 0 B t XjJ?Line 88 0   0  tC *Group 91"P t bd153fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB t XjJ?Line 93 0 B t XjJ?Line 94 0   0  tC *Group 95"P t b?53fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB t XjJ?Line 97 0 0 B t XjJ?Line 980 0 6 t S ޽h ? tttt t t t t t ttttt ̙3380___PPT10. ""' 0 <I(  RV <; < fl0y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z <  r0e0e4?Rectangle 2    <  ~\y˼y˼4?Rectangle 39 3   N   V]8Xx6 < S ηo~ ? 3380___PPT10.1?! 0 Da(  D; D fDP5y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z D  r0e0e4?Rectangle 2   5, D  ~=5y˼y˼4?Rectangle 39 3  5 f- typical things   V]8Xx6 D S ηo~ ? 338 0 0Lg(  L; L f5y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z L  r0e0e4?Rectangle 2   52 L  ~H5y˼y˼4?Rectangle 39 3  5 l- aux processor is TBD   V]8Xx6 L S ηo~ ? 33# 0 h{(  h; h ft5y˼y˼?Rectangle 7q2 %    hdman`  Arial&Monotype Typography  x*   ab0|ay>z h  r0e0e4?Rectangle 2   5F h  ~X 5y˼y˼4?Rectangle 39 3  5 *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 h S ηo~ ? 33rT@0p59%A]yޕ$z   Oh+'0 (4 X d p|AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne86Microsoft Office PowerPoint@f @@p&Ghg  ,T%&" WMFCEC <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesT'Current UserSummaryInformation($PowerPoint Document(DocumentSummaryInformation8systemc-2.3.4/examples/tlm/at_ooo/docs/at_ooo_example.pdf0000644000175000017500000021763414342422106023412 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xTn1 }cbCNXh(Et"v{-nߋ3$Tv(c{V`N ,7}cǺq us'n黽ʾv\5'W{12.zl888'PH: j!:cN 3 ʦO/AcQDw̠R$MYv-q[Ѓ)2 M0*:C^|[lvY[vʻr3s $7 {<ϗ;Fd(U>ZOtƣ]X,p@qtdG>LX+I $_! y2k iIEm_xLvY, aO LQdIS:h&ZxHz\w)F4+ n(M*Gș\羴S3q-EBoro1'Is,M;kjx ͙ms+(D.TP(ȼZ'ϖ|d.Y+Zd]υ2DdO*uvYrk@rRSuFS-&6qm 2iFS>mFE̪jz 8P<`Ujʡ"R@~endstream endobj 6 0 obj 707 endobj 14 0 obj <> stream xWn7E_b1-P;Po $ٖ6~ogvuAX`aLs=Jj?IXm(%wK6  ^5F /-ZVW?o.^4ߎbD\ :$е_h/\AYyQq3)m'o[n V$( HbyAZ*C ͇F3o$})iEp9jI{lӁ+eC/=֬i5\Q=As=`޷7 v3ƘIo.n!]UwzYJk^{Rh磝DB<&"_by> stream xW]o5vA}5k m#Р(4mi6~>]^z"&Ύg3ЊX;1Z9-?o7p_5<g >cnq!|$3 yNT| ns{t+7OXE?4S|t*!Vb%Қb+IFbwڼ[R.&+nY<5J^H#ǝ3RTV+GR8>@h|7_pL~)8Z9#t*gE%wv&-sk@$ܢUkxq.V0'@RVb*rmѷ jX,X M9zHmז8 p&grT1Ѷ(U'H+^}AcdPj@Vџ&Nw2b?TQqZ0pk6^P+}r)qqbݘJ?BL`rNlCZוU1Ŗ_݅IY+vB@ hK*xPl>мr:|z^zcs+ S ;r |Mx\'#>t-WB98]QTVJ͟WF(eߙREq(|wQu!kvfR~a:͡f8# v9=e*!s #ڂt^Sp(\:Ȭ+:/iNL/EQfgoĿ^؁˭}8EMJm6q)2դwwKgrqŘݎnjNTrS&暛(|3tq7q&A=n*u^6y a"7odPη=֡!0vFgOiPKni,cgƒݤ}gĽo u^@K3endstream endobj 28 0 obj 1360 endobj 38 0 obj <> stream xmkAr/oۆPLJiJjFE.%ETKEEz70Ȋh!hT58-|FD^Xcqܜu˱;A->$({x%=}LXF$ iW~H:jk<"Պ C\"Ȕ4@抖. F9,,7%?hT^1ZH]= pAɝk.5D(%b\t""tDn]<˻1qmkBq} lIx6F z28vzX8]Tj4>=i[`(>`T]di%ۘ^/r^֭M|I g.~Ѓt[aKR>*X0R:LrM RV"ݥ&K\{=4#% ڹpS3M?A+F}hֶHc Gn HY=m{dǽdkT~ mpiMڱmBڞnC2 ;4T=[a4x2˂ɲZEns,}М68OgbDڶendstream endobj 39 0 obj 611 endobj 44 0 obj <> stream xXn7E_+q׀h//}(bARe.,ɶ$8gH.\ih6,sCjJM|ZUM㦒v GxU٫gG+7qQ]UGwwuq`dL|B;m䀙fGU\S_b,'|ZpBe=ɌPʬG/_[Ax=V[JSf*"a<-#B[%e+ ,(0dDkX*¨= ެ0 N-\ܚ:>uYH h918| ѴYܢ`oV49Ɍ*@XYKEs!3Hּo[O[Nk.ErSn6ߵߪPR_o)~o(r?# 9BhnG JuHX "vRAѡJC6G(#'{?[h-E.dT B3hs&~ՒsS1t*c)r{`C0OBgn 2 Th?>3 2x@SDs|:V ov 8F4A4^4G>!RWr`8wq`^FiU" G,{y QwDũ*O3D$?6ù  F.Dnh mhIpȭX?A_km?a[Gnh)_ 6 -;"w?$-1Tl}L ,irO19Yv( '2̨(&kG ־F1] +>2Z"zBkAD\ y2[Fǘ،#{rgӕ0?Aew fD1v{{, au0[N .";z9Zo27dV0֩ "HE{5xIoM߉^!TM)fq'Qćn9$м8)ne-P%O'%zG >C]!1ۦ2C]3Y:$endstream endobj 45 0 obj 1374 endobj 50 0 obj <> stream x[G"`x$4c~? ǖBX,vϾݫنɧU=Ӛ^ {;N:#e2qg .QN{ε%9=ot;//w'B, " P2ltr/߽夋Ov {G9JB~~R.#t??>p1ŨE0 @D$ðW(N6$|eFC ó<#εBb =R)ԓcGʨfVx1+L!j?<"3- )8=GANp^h۫dE_.J'(sVg ŰY%99^%Wt M ۤyn aQ{x\ jT+Q7mgyvq qe]gyC |<ȩh B E: qU6q sYLJ|+|q-ytrYͧҎfhh$lX(YPַX%L$XK .)Fw-yIA$${\<g.AY%ߩ_5/T~ ެi-_h/8*e0us>H?oĶ֞3rF6Vv9wȊKE騭H@Tu798T"r Fܒ3^1=lqm"8鈑KE{ɜ罞IO#$H1Xj[SZ8"]-iKrGvUVS.mI5cF3NlwgZanYΛ[!鄍%^qjl1b%$7.5 Rq49_Hӗ_LS*&4HFzW;ENT'1l1*.} iERʺW l ɂ,,; @jx55X1akWF295^Wԯ"gRbf 6z߽[|;Ѿ? Qy2c-]El ֈM.5.~2r>d- +ݰOŸ%X#&(O4-X%)UYSଏ#vZK?5FXY'8RFв VME~ˀz&dR":}҅ `-.VDlADRe.0Z\ 'et5s䴂16M>ZЭ*XO6}䗉n ۺ/c<"Em*k є XpǼ(x횦1`ʺcnbOljS^xwfMwt) ?*'R`S.ɂ!qh(k P1 ,'~ueP/W V;% cnXd#<3,h:3SXF ta63x/^s|>l2T(.0+D[F=nl"г&iF-+* `)1rJ@oX)ܐ "W{جMu MHL ҄ɼM& +hAAהk̅g7:i;Bx[о $,b82zIvmԵN#;endstream endobj 51 0 obj 2344 endobj 56 0 obj <> stream x[oGPM?iwձ8H> ENVR-;?[rN7RNφ .ŗ%gB<ٲxY(oP6xVhnɓBiMjQ(e8iO`C/DunEkXU~eᙊ`z,oMAV(d\c,‡r">,N-AWojɜr: Z,Ykd.@e7oG8_@)덮Ԛ ^5DZqYyj4B%e'&QU&~V)͒N3cpL`yi:N[-2kjWzMqg8?:|ANbv/u廠Ƌyg-f嫳\1(,187@DA՜^fڤYfӠ9Ǜh; (dJg EpbBbћ [ "|MM=i˔AHK瀠AY I8 l4lжl3O(dog %園~JI>ѼV=f '!&fnM b / 1 TvKS}Kyɂm#)s·)U6z`2c҈ܲ#xTWMysS@"/#*{ъ~Fldߗh"b}O(sFU(oTZ;#*0RAhyH%l|џ6Y2kA җT3@3D 91 ZRƨà N2+FA&LX)|Xļ;\t +Q!|~k_ t{W`%c;vps^y,FE.~71?IOh&y_K})Kze?`քI9^G}D+3s>Ag S U;QR%|@}ˑCH8(PsBt܈͙!dJaU7z0Xbq6/P,ӼAP>>n@:F^&|L`;}ձ]K ^PAxFz:׫ t犐k?> u+w=ͱuYЌ(4"vOm@s_]{i2SP].BkW\=TivMGwNΨ("O;?7@zlX9F'v&bznWQHl\Od5 L+wwߝ-Hzr#L^53>3ψ̳qQ1S5=jk65F$n^0Be4PG4WҸ)WsnT*;@&1wV*;@UD?R[y ( ݕUB^/"e=I*.sI~˧gVocD1#57 @o ʰDat><,YS.DM3>R~p?jVHkBK?ڙR(֔T雸uO'\'K;Y*X*-W#^DʞJ }i,'Hfz\J]J/D0~[S}WTV!+& {W %_@_o܌",OJ9/k+St0A< gR -'h?4z xZ2%ve5gB٭#_a栭0if$8{ L#[Y֜kwAujm4\ْH98XobXpm +ք[ )m(akS:.[bV4Rِ^2~đ 1+&'nQxQ4\J:oKGRXy/I񈷸8$G96I4ऱHڴi &'endstream endobj 57 0 obj 2315 endobj 62 0 obj <> stream x[o GH7A_i&m?ɼV׎c C>=,;?Ľ;Incg͙GE͙5?=1V/*yN;*щܶO1p(D HREyZH_;=f[|g|Eyw̛Yb60m eQO zY> (fQL nEn iȏxD.=V(OYa2toc%0SVHʊB>B c)|W[y0 pݡOrV 9{3D\)W߃D_%=_46.S,F~GѵMx{mF盙_eW4sŚ A(CAmӶm0lFI ;xioWb-2ef [Y, IPxPww'1Q˖sjG T=P"fLS 1altЅ~$|PJSu@-x-mNBӹA/N^(Cb%ܦ&\3,)QE^ZpfQj ܣό 2tf$JW)q,"`ЖOD685,2ϯ2T"e].? G!/$XߢkJksmz'"d &DA>=+9㋡k@ə3B?XyG9rn o[ fԳȡ uYԌW{R~ekF7Cixk&p^5#]Aזӂ_pF̜RʽprJEy$\s׭# + qOQH\ 8(j ny{^w/#cdWR'6gSp~.4 o{׼O6nemOf^= BRYD?@y1䫌Ăگ2.rK/(ãO!7/s;_]UY2UY2%N@U OdeU&n-Ry%q)orK`^P5D"}I];TV1g-ȝSB4\:!pGH|h~36﷦]5?LrHm>E|ޑBUh!ZlhGm${x4ƽ}77k [˂4.˓?tT #>CF GUgπ5 .J5  v5VbBmD0đhIeOYHxgY"ʎTPj fuDZHg<#88إQ`ݨ,I5JwDKJGg RkRؔ[m)߄TU1^^ b"PVucҞ;EVBBL|/.O!ʂ1V:B_YWZaev 0}m<_/}۔lHc;IM dendstream endobj 63 0 obj 2424 endobj 68 0 obj <> stream xY[o\5!8GvN5@J}h(MJlό}dO6}3cL@we#9o ?rrl~{^4Wi2g}Ҝ>h9.aE|6b&pl2{l8o%0S,v!hR_]k%v &Ӫ@;K3J(Gaj4Vk/dwP'=5S\_AvI#@ c!nP[C9mQjnj90pQZ&0IgI(t*FvGINv[sWIq^$$I=†H{y„^ pD uy 'b]Ƶ#_UBlGQF8D|V0"$Foς 27 yI:,1JGIZGz=:02]%] `m0) 6  0gh߇`´v@Af %IIzUI KD@Iak(Lr֛Vk/HT ;;"IN"11P HnY9sNف."ZD96 I^?b`L-bubYbDKDkMD78QgN֌_C'}~,0aK>΅~a8l^`)!)>}\uz*܌ާq{$PF/ ,tߎ3f9ʸtQ!T] ɴ;=KHYm~Գ<#c:Tgݧ 1TA6sBbEb`%EX PTX!^5@4*w 8g]qtjwkU<eZ,ըd}&+OB頥2DW>kwTC/dN;B0T0ݻB㊴!riKRcur{DfiWTd31C=ejtVo0R` `tD ᙵ=]J.cVs'K @1{5Huz<ڧxk.Pe.W #n8Ĺt CRB-ċ^^&'Ks3)vE Ac#EҗxRgDv g$|zsB 63K%Ƃ>v. F̍P=AÜ;.c_8VН&iV%qs<ʋBgLGIy,gѰ? 0"^#R3%{1OUye~-a䚢d+⥞Y59z   ]E{95%bido+k-v3ҤѝqVSuف:m'-%ԴL8#!ǹNY~ ֊B׽_ B.(̅%";`%2}u@o6 ǚKI s4M^qDxK!a+'&Tc+nl/\#\LGyLk`ד걂óK ގ_OEDlx/Iv$(zDQV$(èǪ8:ʚd[A I.P}qO6endstream endobj 69 0 obj 1713 endobj 74 0 obj <> stream x[kqF/ͧiq}_E#l7uIy!rWGV ؂Ͼ8:M׷We9z_}cr|7ƫcxEW:ȠQWRM\fdlIաnqiV|}{ʫ\<>~esNj;^ mk=eYu_&.v:귐k~b=鲤ӳJ()^潫9\Z+뉞Mt$2KH8|-;\|:{M0ꖫ[Q}^t;ѓMTTe{:Ir~{1ZoFWp fg=NaC}6i%QIe< %wEo͡F 9(EGCt:of2ߐS~N!o@軛$ղ;Jv'v t׶-;Af~[`~45--ҧ-yW HՠwW$EkK %ГD'/,Ls6閊˱veM^T*U,c1~juhk5GFlipsw?&s> TFu}Ք@w Ӭ[I\&bK^EN[6־2ŭ#J"ZfGo|1Jtk5ur|NVG CU4r ~~pRp{C-i #Ed?ҁrO??'{|L޿8%.kMzKY5x➵4XI:d_jJ"inۜ1k Z76EŰJ}L*Ҥ (N"{R^U`pTEXi1Q@eCqV߷|\j.Jz?m<^81|R"jZXgI1;#};8wVSj S]dgE5lnN>V'V(C`X|Qz7t}Ɇokx3 !ZLӹDZbhzidT=/"JX/Cq!IIISM3ÍFDi"?lc@X{D7\%a~b?<%/_ NGx*u/ލ"\!P@R '|Ov!ȌK"`__$s7k3GtTӆOϥ\n܃xͅ4j`KU NMpI7|s$S$$,}4WZA4EXi1Q@E^E ߷I|]YI^kq ZkنGc^,rT# {DVB )&46ZG1"` &:0=#ҖN8( 2iIH8s0^ t-=v20֞=/?ZZ'0g g%]7`7aqӇп۞~ 'UС١ aQFk`u^:bE*o ),&%$c0Jqpƶ#=Y)mb%%fDxeZ:vÐ?j¬$`'ێb:xhPD`k=0 PlQhL<,&%T ) Q;lJ`ظK(+V"]b{r Ali&fla ?: Y( G]pU`!#{Hfk Lq:vg |1"wU0df"!I ͎3?ByQvpEPGy^N ^m4N`H,&%"Gd18C"S!Kj4E@i_QiY&"(ŤCy`pf9RGXuA" aZstfJkDSJ112-erj䠦zg15H ͤH!pcq;:pirbpfN dbڲImc␍:8X>0y'd@ڈvYLJh$@ ghSǤ !R,/%m9c8E#ԔR[9ю5oYzEEoq8 meZ(N1֐ŤL)gڳ:Hus,0u#b>L"^לQviHIbRz٥%z8yH9s<2K90xk i3&!PZo\z'vձףcﲘ5Ww Ω[Tvuؠfv)5O1xW(@z䌶1:!I5ΉR δ1+],i#%h7\ɋ^@ Z-Ɵ|ocCJYY*'nZ[dDK838Hx@wjCJ QzXmƈ3ʣjEcbRGW)( uQ`ATUav!;#F|UŁ&=.vhA.#3|\ :h31^=sQ>[t`p̱MXym5Ŋd,\vclW,/T"cbfy fbhԪjk9083WX!˚!RlBq\Zhfsr`ΘY0d3y%[KZXAfJCJBB2X,Wӎ,|􎥈md'EJh3%>$x#xv(FL\-vYLJhm|bH3)|98Cϐ!Ϻ+Ke1)L ~*b+gd>SSz"osƼhvU^Y7hG.IYpr`pWǽ 3άpXB9l3n* e!PKe1)Yˁ'챂8Ģ"nL ְ7UqXg0F`-XA;lPJF2& KAM+:UD)UT.cF3m1wVe5d5>4xbR r v1D(KbQKX"ʈ,~),j#*G/Mv6F(ŤDSx18i A-lvWX.%֏F3f]3.6ʦ0e#䆹YLJ0NkǼbYs 8 S#2pRd{y"ܑQ[/*}mS{[Hiw.Wqܩ\{Vx  gXÈ1t}K+bإ悞OOww\lKزsi6U iSRO&c)1 #|W7es]Y~ܥ!\-j-X[mK/TgVI%:ۂe9ZK%u 7PfAq ʲŤ 3oz] ]zg;;d=]j/r0_N߹.C}v<|R4s$!2O`~㞳f`1,-%NŬbMێǸvo7ѸAʸiv<ʒP)N}/ysP}q ={Ɇp1qy*Hpx7Ѩ!~ { a66x7;-=Ovm4w7aꖏ?G 2]b:bxxyaY6&;-#uў5c kF#Z94[r.|W.jǐSp/0ˎhwsPH4]Yp]h`$nàtbNЇ$H"_QLE{K!|kЀBk>4Wd|%vY'z)tj IpQ0\BlW[ na-X\ j8"u4Fp5erٮ #OǙendstream endobj 75 0 obj 5065 endobj 80 0 obj <> stream xY[oE֊}X΢"-O; !!!l@V1c'߯gzrՒ(瞪ꮯ. 5SHM!:iB &> h.vbAKaJJA'=躢4BKtFv1I.y7zs>/ƹJ⺤USEϚ7ĥN_Hpd/sƇ&_Sa$w`bVFf,3E,\/SPgBBw"fjn1jNKH%sh@z#hoٍDS{ݰ1\a@sd c#_ࡵ9x=5.z ]"<`9ګVl-ȾOq6?z1oYS͗<˵=aFOחTcA1rJ.+}IRSj\t`UvԤiz53g(L8F<;+SAʁ N`T&[&[ŎlAprU[`WP soVAu*4ߚlIX2!+MT٤qm!BzP2 KK7b3zlc? ئ!:ҁ KgwD*,jJHO4W0I)>N I,\)ޗ!| 7b\p,Z G&`grS[]C1|7UغM5.0EN;(Nh6 /ID9[%ԚM-9%qC"z~sq{  wpB\B烙VEH*}|8$|E_ղ*;ɺu#~! g:oli;0bjw6c E%v{o>v2R3roьkwĈdž<};YN(U̎d/$QIa Zm,4;|&iѳ1~4<$B !tYx a"xV:)R҉K !AhHmG&-aH2>jHd* '3۝sVO. aK,.Fksٝs̥% )Id T9ITlѫH@r *1L'&N Ő#QȅvQ*HB:psa˨/ L>4ZjS]}VJm`޲ܫ6ؚȤkLI%FJ;i_ ὏4Bfh`f i#O UU\3n - ]/"OEȳɢt>_̦):/,w\p^E&Žkh4\d1c? Le J"J0`{@.ۀiؒ4%!s*vJYnšД ,:vuvo#.endstream endobj 81 0 obj 1926 endobj 86 0 obj <> stream xWI5>$RpHXR yC2-qEL3DrdLkZ_o^LzlN 6"_N;N9ZuaqNpW8U4"z(]);r=b!=ʭƪXY'qkZd[VMB(IC4_o_4p:Zތf LS. #MN9s#zJa]2cnlG5 %^1ѴT:M2;;!B%DQ?YVyaSѶG=e3&q2=ʝֱG}]ǒrxRWt17D^k$CF&+ˆH`DO̢.i2BaOb?jpF!,hU=ٿ8H稳q @epIw_7|SѶGM: z\yJoӽ uAhh % v叚طrJ4F2 PAVi 'i{,HyqdWVt^QМyc,1um &JZrY3f7{%mѺ'R\;lwUJOr #䂤Ke3 >d7Qԃ!22HAfOY G"N}0ʥ'KbSzH !)6>Qj4=;[8帢zJ =|f,OW9'#_ά&n67@;+IIZOq3P7+ K/*+39 C˪Tt\ѽT ufo ʇnp\Zd\k-@1jYa5Bet(1w`)Mnt$Y& Ƒ֩qzzlJqŗH޸v CwˬAӑ(`I)pQv 01tRi/0O2jw󖖖@C -y{.q4==.H^;v(9`< YF}`;&ab,C!◛,)X&FW1 :f#9}i=l:{]}%Fx]}Lzm_endstream endobj 87 0 obj 1455 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 37 0 obj <> /Contents 38 0 R >> endobj 43 0 obj <> /Contents 44 0 R >> endobj 49 0 obj <> /Contents 50 0 R >> endobj 55 0 obj <> /Contents 56 0 R >> endobj 61 0 obj <> /Contents 62 0 R >> endobj 67 0 obj <> /Contents 68 0 R >> endobj 73 0 obj <> /Contents 74 0 R >> endobj 79 0 obj <> /Contents 80 0 R >> endobj 85 0 obj <> /Contents 86 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 37 0 R 43 0 R 49 0 R 55 0 R 61 0 R 67 0 R 73 0 R 79 0 R 85 0 R ] /Count 12 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 94 0 obj <>stream x]1R@ E{7Jd0 pgf\x|}%?oi~{:<R޶S(zq+u˥>yDqΗoj2?kP&wٽ[>?Oc9C.۰|18M*/N{$Wۘm6]rF moO1!B =/+tcrsrcrؙ-z^4%WxYQ ,D8FH,hĉFE땀FHԳ2hDa4B4B&8YBJ)#k _l]TN02 V%ooT*y#+U}64BuChLH>#q]ur ͞NP  endstream endobj 29 0 obj <> endobj 31 0 obj <> endobj 9 0 obj <> endobj 95 0 obj <> endobj 20 0 obj <> endobj 96 0 obj <>stream x]n0 > endobj 22 0 obj <> endobj 97 0 obj <> endobj 30 0 obj <> endobj 91 0 obj <>stream x|y|Tս9w{g$3> L&l0,l %,dQe%g E_KնZmm! !O)U[VhqOH}H&9Nj~9ws=$# hzHO 9ˮ[ң\Ͻ!|;}g*DV\s]J{+/>پPY* gu ͂뼕mܢ>xk-[\O1B[GwTcВ.nھNu6* ~זmо !~#sIndO!3BޒNwG(:ߠg=C7>4~FnAwѯ蓑(н݄Wmh7}=CY_}^*,cI |/jب;fp7>x&̯o2똸Rl GPUt+:߂ڈC?CxY֡h x +ch!`(&MHwmE?-blg&Fw]d9G' >F?κv8} |=gQh mbg+kz͇='7V pohܚb4ʣ) ]nvībъȘpIqQaA~^(7dg۬h봒xe0*)wӼM ;k)6` YhB/\g:gzZ SBM{фRȖ"o&SKP˪ z4́Ԅsu({uڦPrmY)ګa 0Z2H4B|[fxܱ]?<wFƭh#8Z^3&  w/p1O>$G@.rg0s1GpĂ촵Kar{r?ekNb|,a+ pQxPN} 4ެP-F@QgJX=d.Uum ǂH]Kn''˜p! *1o[3 N9cwΚ? '4u5v̓{i-CjI% Ji{A^zzY?FNaQ̙:8NuSF#t'B籋[ORR$I<43F"<Ȍd4.{pʃP@v( ՗]}e}VUT >m_oz/@@ay9l=:IZRѣ H9`iݡ{gfk"*`,>@%`y_e @v+Mg}%T`>}:]W7W}㝸fXll `7Х|@xB^N 6g!= Hkۧ㈬r`k}?^qŏk*#pq5DF~+pe/5@5r11GF~#7k yWy |kk^皟c@xST9}js_O۷/b>`߹>Zn~&oƦ99Lų#%uGG8:.ӇO;8X``UoQq)oL"CITEneU_Ǫr/NϟT?|z~s~?%S~$kt6}IMz3=ZZ],_zVس"{bt%k]b=ovwFK/\Kz0x=_ina{n"Daf&ߞzg~8>o{(=v,7U#0|#8 |a5!lBc;G ĆV+&2'03rzC-ղL-FySVјaոW[S3/~ڀ]NouD)ٰ6ؖвrIJ5o Fra/ؒ2j){ʔ=g [hS>xcA/ZCDNiEI]:0ٖpD3Dk@ S!R":NOAKВ' .s ?|ȏ+[:T5΅J"g+"?#cpF@mr3 !eD0bc#hE..!0di&qQCL:g 4F> B?r;,sg8,3VMeZ]k^kjڢ>B᠏ # Q+ 8!u0C`~,XBO`q:8Iz:pPr;FLd DV= 23d!h9S:[v aQ5o+.:~ܾ<2vY3yoBgui;f2}&{}GbyGm-;Ml88e_L?yƭыsѼ؟/_jk@K+A>/T1oQkc !r"YNB0D:ᗏ_>D AaYQa>q|I*"U0wzr*22(@E-Zw%7X'5?&4Ox6c&`{|쮥p8{NI>7(==Mv[lNX-"DyB0 &, })Mth>Dgf)eӬ@R aMK? ~UܪJK*Y*>4>|bͽ]h媰f߮8M&ӑ)b(qq`@sRĠd/\cw ީYk05|vng=Z<@%liv,a^ pV⚹n dlI,ֈVlUQ-F0=!4Wdr8Zryp V4D6(5cx&ZMɇvl3/yll۴WO2ky~cѲĖ7ׂ_\db.G$Ipx$S"1S96b:bOY >#z3Tk15 ?Pv{gjU#ʳq 4QUiD*RU&2LiZQoLS`!0D JIbTlxn(//c!vfg%;ˣA'mҽ3garΜsً9g|Su^YyO\8qF,[sY+]kiHl=ZvgZNmmo{{yʽ-lF=ס Oǝ5x|FIq:5#d2 ,Ed=,z 3?JS\+tk3lΏ(=#(% (ml ;[܃8DˬN"5ەλwǦM[W)/u;22ެ_r &'Rl=UNU_5 (.D'Du_@?e2B4DB{񟩅Rg/ؙf@Ѽu+^ e> TI%fR:$fobMz>J[1|.2vxb~.aHJE 9?ATۂߕ >Tm Z,͛g1c[Ab omڪj?8"-S$ /TW5=AP8=(=eB/Wj>$Xk-K@4맃|a&HTR!9=1W0'8'~mL{ .)!AFIK<<[5*ȃxFsctLNa$k:h]z Լhe[zE]2>>5O{fc~mZp\gw-mkf"cvnay8(5pLGLyy1w∍ }`cU n9CشY $|#4776!^3 ?ǭ@s̘M˃L0;$SnnqWPIC,83ź ])*s?;8[{,:r<'Mw:yr{,%K˞ jkxɐ/M %_πxP.R`1ewF;ADld;*./6PA IUb\T46F;icXƌ&5 IAV(0JB"E(رXn]A{9,}t3"Vu?]W)H d)T+ԟ-DtCU_tRJ2P왁R9\4v mMc[ܱe``ºw, 7z_t/@:8[x(I(ޣC&dF"*iyg1*P$+w H<48'7Z;3wCEF1`d q)euF|F}yP`PXKOyYYrOؾ'c|dYs{ݟ)G=G8b-TbN.W;>[SYi#b,e`A[j^j TgT./SI A* 1AkZM\#drr6ID@0z K檡~"MR.]Wj|Jeeem艩a: R i@%tRY$(兝SUUD1Ê*h~'mJ$6/6܀εGޙ֘¹eφgt 0sO=L]zcmYژYX{k_MI_:D$,NNPikЙFgX4gCPG~55b(:cˬF7jIy3ܮ[.6JlcNfk61/tADihGPчZunsF D=:gPnKd@ Mi*:,MږstL̉3q`?:lֆK;:߀ml6;3U\K|2<9j4bq@h q>eڜ]8"8%S mFE!8E:5*GZD{gH ь^EvƒEa 01Ie '1}Q\ck\KX>}:S<QhiOA{e40`xU.g ouNťeDky Ƽ~&شdL&' yi"[P H)q!Jt0YG)b~'lo(Ó xDF0L{^NШQעcJDi?ӲZ;3]ۥeɀAd)Y/ObzyT_ kLZMo_gnn!q%! 'jɸsK/20}b|ez4z;$6M~Ӝyn4'->IU|uWyK}'KY"|$Ԁuu3ٝ95`!$D8~c 2f@ɛ> W]HTiɢSj(b4I1dreFFD|9}:5mGFiQ~՟zOgŶRƭ*.$K!GIA֯zr4B8L> f/jV?fTޫEg4 Rh7%$sb}}?Mi4Ѭ6(w/2MnSěL@r%TY֖ڑBcfH^Π6D'bvcre-œ6U0ߘE,PPjtKn2c5E+0D[ e[+}[{֊[Gl-:[ (lmۜ0C.ڑ`ESB*LRuetع sJ(*PUћVwe2#D-*5'u^1s^l56N:2VC"vәTEbL1`OdCh;jǭFgg3gg ˮ)O{OOwAfLq<W~^zl`Ge-:79ɬ$->]ΥFqqQ@[f'UzkEvnsM+L:"߈{#C2UfȨäDS)ߋ^LTj$Nq?Kι$T{h'8[[p6~uK?g^}K͊g~%= l ^2!6pZ/[dylP6)lk(ƀ/RAk-31^]!~AY!^k`tCK sw'eg[ٻq ZYةw5TS8-Q0?.88$,F^Ar`dtNI @EEM-r4;@W~4S3fT;zeSut>Nު,([zBvD 4šjMmh d:Ure[Ul/v]cl m s({w* l@Z|4q+͐ifH](x0"/qu /]Rɫ.포񓭫7&Ɍ;cƛGzUE3וT\ʶ@ϳ=|ør2ocE3O'dm%n6p!%3avbM.m{ =_8}BS0wot˘hpcCQ-S_= ⠮qZ vHJdc7󃀎emSFKeF@՘`Y- Ɍ7fVYWꮡ4&Ά#a"-I!!dTAI 8R$I϶o vK1slO<ͬOEOB;61h fVV:a!Vy=.k] 5x:FH쪣elN"4f֞m},R#$ mtrc3 ڹ4\4%{s ?4 n" FRHԐxgD^Dz1ҝH4AX:{^uN_N^pHq[)+њ”J^o0F I:vKJq ybX|3nN~nZW3J[\-uk1-fqQ{fe^@+(x^j̒#d.#'D*JXԿ /J*%o Wb*O~,_`|K~C6y\҃R`Z>2F3 J@ 9#t"'j%F03+2v#M3[dFc'OE 4:iY^Ea s$@f0~ZxQ3Rk]IkX.w \$|F@A Un1MDsgǠح$_N|k}lW7?bJ"76xՠbP+,8[#f4ZASJj3<b/+xr,F.p$=,q'\@NR% xF2#l=^M_Hu HR2prV`2" C<\zk+5Wxl=<́)NK |79 endstream endobj 21 0 obj <> endobj 92 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS> endobj 93 0 obj <>stream x;kxSǕ3!}%[W$X6 ]l`Lv6(؄G@qB.4iJ ,6r$ݐ٦m4#Ҵ%PؖoC}gdlw̜9:sΙ3gx 2!D֖%R![ֳ{0[O!7l}N{o#0kn~^k-GD_w>kC0#[wdW 0z" !ӹ;_Ԉ> z7uo% lk<lSyT{=gzg_L#{5.ow܇W rw t=^@?Cu6ly[e]b؅o7V0-eh=Q=psMI~ mۨ;Q(UOSP_k8۱xnċjЧ:tMb^é^.;{}ZjS vkA]CG- yq{=aΪ}ҕ!5%4io7k5pOb<>eͭF٠J.7RsUDFcp85=615O67`v56wq#m3@'>c:YE`R`X:e; 5 2jkyAPK; v-!Vsb#2꫞O}ujg^ڝAR8"-'[lKId.?MD,[ZS43T4l{ZN,FiiCpkӎ%aPk9fOk;f<[۽)+Rr;%v%bLm^2)pbpćV_q?asoM#kӸVV|Ԕp՝}Knm? hk?EHRԼP}JBhHieRHi&iQYYWjvG>ZbP(7|F JCDA)p&& 6Nq͐Kh@^`&NPFoH,C_ i d\.P2j0BpQ)3Wif9f!&>h R).!Oj4z=)}Ŀ\ft Fr^WKp^'/DIϿp?YH@)7.K~ 'ϼ|%ߢ^~k_^ocpzDPiߏD`mdgFG;N:^{o<2^|[| OgN/I^0.iH' b4. Ơ<W8u3f$ی͜5qp0=H7k^M5֤ZΔjN*M3{S8U=YʻA@~ZݸbbLx0%,ⓠ`x'tQ:@KqYQ, W(xDEP+~ݮuEB{yMV+VX$K吅 Y^)HB0(FTR_'ދ/WE<&FI4'I*&VU&DSR )T"Qoac0[ҌV 咺\$Ԝ]\ﳟ-H(CcNUGZCn9Eܷe+lMө*ߝVTbLMb7ഐO @ mFo Mt B` ̫|:n#lо)3 BM& >knC\jB Ԩ@2(T p CVY}|27hEWIKrK/V ȍ$_FFs& VyA ګPph :Q2YY}EEET7X?S=|n>[Ϩg7mXM? r0b ͞vqCj F^V Łτ%[h<^*M͵*ʪڇl;؍Džw>T2e#! hEK/pr .Өyh..Skw1i5,c)Ӫ.h/gBd_v@T -rZLiM47E}Rߢ߫gMz Za`6YS}j5>}Z5q'c>fU?Nw0{0_feؑ PKl}V—EiN|V p|lKф[Q-q6O)6v{*?q,Gk%dE+/6KŔ[+{ Y)iI7 W]T]-hM-w/+zK|pyp ޡ([` Nʇk9(Ą>aNN~M<= ƮHKF@x 2 Heln. ~BF2R0n+HskhA޲6aJH ̦_7_i>;j fpbvbO!IqfBNv"(N$Y9"BhakTUU1w^[?Vg;ck]svMƙmF|kro-#L8f͎LZU3ѝR=mb3.k,S^7ֽXKa t4]$ofG;Wj{6+P5s_7X=-ӢƦw/Ca B<=-BOL3sDrvGRL̂V_ jIfC9<5:Vp`zܺ(<>/_ی텹G>VW g}}s3^)sy>o% XOZW bcD;0n޵?hP-ÒjM"lku:T8[ub'9RJy`N']pEf/cPQ%~&odАw)qǴb% p8f;k{e ͝]]E8[<q x,hns K߂O~3^e]P߱-Xy͔'CUDz5WUȥڍ cNCxnܙ|TY^ <~*k?MaaN!_+;9Mͤr3pChVyU6Q[ܾҳN:5!9t.rv>{2sy\**gu^/5>pO"Fg˞l~We2%kJN-.&l/;j헦޶pw(*?*oLūWE"vd>F PUiSAk6h 9.'6\M_Q"=Y$m1di G牧{E>?Os#^~D.c'-_{?hzDSzޭL6F4W1 Vr^CtPzdzy)nᤊok?3 ytBƉ33a'9O1i9O(LYCv\/+KyکV{fQ{Qw? eeh3GfآHmkDH.WI#d1`G|%(cW6m^ K"u1B8{U,6CA!QGx*{+!ڍ _쮋> w3 Osͱ]K׿{?4[6,X[^-sy\bMXӴGiֆ}Yc\PQMg?`e|r3LǑK6q4ԪYS!8uD/tdAK\jJTyiZh3$M턛 ܙ L%7C"8uCA{;e$e2m_a /Sxe~4&I3NUڣ^8OX0镴`7*F,e#  /V^.7Bx-A|囊HO9%}IZEO3UL~}FUKIJzC=O}@fܛ7t3L7t3L7t3L7t3gIwT_?3&$uI˼`@U$F7-^aQܨN=} jSrw]kbrLr3'Ԋ4Q;Z Q $b-G hjDsQPVpY@`*euͶ"|Hc.K7d7<T;@CZ/5q݃Lsl:WQ!" TˡshMEYg.)w@݃fK dϟ.5'O>T*?z_?ںvGv쇾b#;Hh endstream endobj 98 0 obj <>stream GPL Ghostscript 9.04 () 2012-04-30T18:40:03+02:00 2012-04-30T18:40:03+02:00 PDFCreator Version 1.2.3 TLM 2.0 Approximately Time (AT) System Example - Out Of Order TransactionsJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 99 0000000000 65535 f 0000026043 00000 n 0000070602 00000 n 0000025906 00000 n 0000023556 00000 n 0000000015 00000 n 0000000792 00000 n 0000026108 00000 n 0000029043 00000 n 0000044723 00000 n 0000028983 00000 n 0000029013 00000 n 0000032038 00000 n 0000023750 00000 n 0000000811 00000 n 0000002019 00000 n 0000032068 00000 n 0000039940 00000 n 0000034978 00000 n 0000037991 00000 n 0000044893 00000 n 0000058486 00000 n 0000045657 00000 n 0000037905 00000 n 0000037948 00000 n 0000042326 00000 n 0000023946 00000 n 0000002040 00000 n 0000003472 00000 n 0000044334 00000 n 0000045829 00000 n 0000044655 00000 n 0000045403 00000 n 0000061361 00000 n 0000042378 00000 n 0000042421 00000 n 0000042464 00000 n 0000024142 00000 n 0000003493 00000 n 0000004176 00000 n 0000042527 00000 n 0000042570 00000 n 0000042613 00000 n 0000024338 00000 n 0000004196 00000 n 0000005642 00000 n 0000042676 00000 n 0000042719 00000 n 0000042762 00000 n 0000024534 00000 n 0000005663 00000 n 0000008079 00000 n 0000042825 00000 n 0000042868 00000 n 0000042911 00000 n 0000024730 00000 n 0000008100 00000 n 0000010487 00000 n 0000042974 00000 n 0000043017 00000 n 0000043060 00000 n 0000024926 00000 n 0000010508 00000 n 0000013004 00000 n 0000043123 00000 n 0000043166 00000 n 0000043209 00000 n 0000025122 00000 n 0000013025 00000 n 0000014810 00000 n 0000043283 00000 n 0000043326 00000 n 0000043369 00000 n 0000025318 00000 n 0000014831 00000 n 0000019968 00000 n 0000043421 00000 n 0000043464 00000 n 0000043507 00000 n 0000025514 00000 n 0000019989 00000 n 0000021987 00000 n 0000043570 00000 n 0000043613 00000 n 0000043656 00000 n 0000025710 00000 n 0000022008 00000 n 0000023535 00000 n 0000043719 00000 n 0000043762 00000 n 0000043805 00000 n 0000046044 00000 n 0000058683 00000 n 0000061581 00000 n 0000043857 00000 n 0000044808 00000 n 0000045031 00000 n 0000045738 00000 n 0000068669 00000 n trailer << /Size 99 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 71494 %%EOF systemc-2.3.4/examples/tlm/at_ooo/CMakeLists.txt0000644000175000017500000000532214342422106021521 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_ooo/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_ooo src/at_ooo.cpp include/at_ooo_top.h src/at_ooo_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/at_target_2_phase.h ../common/src/at_target_2_phase.cpp include/at_target_ooo_2_phase.h src/at_target_ooo_2_phase.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp) target_include_directories (at_ooo PRIVATE include ../common/include) target_link_libraries (at_ooo SystemC::systemc) configure_and_add_test (at_ooo) systemc-2.3.4/examples/tlm/at_ooo/include/0000755000175000017500000000000014342422106020402 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/include/at_target_ooo_2_phase.h0000644000175000017500000001556214342422106025013 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_ooo_2_phase.h // /// @brief A 2 phase target that has been created to force out of order /// processing of transactions // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __AT_TARGET_OOO_2_PHASE_H__ #define __AT_TARGET_OOO_2_PHASE_H__ #include "tlm.h" // TLM headers #include "tlm_utils/peq_with_get.h" // Payload event queue FIFO #include "memory.h" class at_target_ooo_2_phase /// at_target_ooo_2_phase : public sc_core::sc_module /// inherit from SC module base clase , virtual public tlm::tlm_fw_transport_if<> /// inherit from TLM "forward interface" { // Member Methods ===================================================== public: //===================================================================== /// @fn at_initiator_1_phase /// /// @brief Constructor for Single Phase AT target /// /// @details /// Generic Single Phase target used in several examples. /// Constructor offers several parameters for customization /// //===================================================================== at_target_ooo_2_phase ( sc_core::sc_module_name module_name ///< SC module name , const unsigned int ID ///< target ID , const char *memory_socket ///< socket name , sc_dt::uint64 memory_size ///< memory size (bytes) , unsigned int memory_width ///< memory width (bytes) , const sc_core::sc_time accept_delay ///< accept delay (SC_TIME, SC_NS) , const sc_core::sc_time read_response_delay ///< read response delay (SC_TIME, SC_NS) , const sc_core::sc_time write_response_delay ///< write response delay (SC_TIME, SC_NS) ); //===================================================================== /// @brief Implementation of call from Initiator. // /// @details /// This is the ultimate destination of the nb_transport_fw call from /// the initiator after being routed trough a Bus // //===================================================================== tlm::tlm_sync_enum // sync status nb_transport_fw ( tlm::tlm_generic_payload &gp ///< generic payoad pointer , tlm::tlm_phase &phase ///< transaction phase , sc_core::sc_time &delay_time ///< time taken for transport ); //===================================================================== /// @fn at_target_ooo_2_phase::begin_response_method /// /// @brief Response Processing /// /// @details /// This routine takes transaction responses from the m_response_PEQ. /// It contains the state machine to manage the communication path /// back to the initiator. This method is registered as an SC_METHOD /// with the SystemC kernal and is sensitive to m_response_PEQ.get_event() //===================================================================== void begin_response_method ( void ); private: /// helper function for printing memory transactions void print_memory_transaction_helper ( const int &ID , std::ostringstream &partial_msg , tlm::tlm_generic_payload &trans ); //============================================================================== // Methods not Implemented for this Example /// b_transport() - Blocking Transport void // returns nothing b_transport ( tlm::tlm_generic_payload &payload // ref to payload , sc_core::sc_time &delay_time // delay time ); /// Not implemented for this example but required by interface bool // success / failure get_direct_mem_ptr ( tlm::tlm_generic_payload &payload, // address + extensions tlm::tlm_dmi &dmi_data // DMI data ); /// Not implemented for this example but required by interface unsigned int // result transport_dbg ( tlm::tlm_generic_payload &payload // debug payload ); // Member Variables =================================================== public: typedef tlm::tlm_generic_payload *gp_ptr; ///< generic payload pointer tlm::tlm_target_socket<> m_memory_socket; ///< target socket private: const unsigned int m_ID; ///< target ID sc_dt::uint64 m_memory_size; ///< memory size (bytes) unsigned int m_memory_width; ///< word size (bytes) const sc_core::sc_time m_accept_delay; ///< accept delay const sc_core::sc_time m_read_response_delay; ///< read response delay const sc_core::sc_time m_write_response_delay; ///< write response delays unsigned long m_request_count; ///< used to calc synch transactions bool m_nb_trans_fw_prev_warning; bool m_begin_resp_method_prev_warning; bool m_trans_dbg_prev_warning; bool m_get_dm_ptr_prev_warning; tlm_utils::peq_with_get m_response_PEQ; ///< response payload event queue sc_core::sc_time m_peq_delay_time; sc_core::sc_time m_delay_for_out_of_order; memory m_target_memory; sc_core::sc_event m_end_resp_rcvd_event; }; #endif /* __AT_TARGET_OOO_2_PHASE_H__ */ systemc-2.3.4/examples/tlm/at_ooo/include/initiator_top.h0000644000175000017500000000750014342422106023441 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example initiator module unique for the example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_ooo/include/at_ooo_top.h0000644000175000017500000000506514342422106022723 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.h /// @brief This class instantiates components that compose TLM2 /// example system that demonstrates Out of Order Execution of /// transactions //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __EXAMPLE_SYSTEM_TOP_H__ #define __EXAMPLE_SYSTEM_TOP_H__ #include "tlm.h" // TLM header #include "at_target_2_phase.h" // at memory target #include "at_target_ooo_2_phase.h" // memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: /// Constructor example_system_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusAT<2, 2> m_bus; ///< simple bus at_target_2_phase m_at_target_2_phase_1; ///< instance 1 target at_target_ooo_2_phase m_at_target_ooo_2_phase_1; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __EXAMPLE_SYSTEM_TOP_H__ */ systemc-2.3.4/examples/tlm/at_ooo/src/0000755000175000017500000000000014342422106017546 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/src/initiator_top.cpp0000644000175000017500000001140214342422106023134 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_ooo/src/at_target_ooo_2_phase.cpp0000644000175000017500000003423114342422106024504 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file at_target_ooo_2_phase.cpp // /// @brief Implements single phase AT target that has been modified to perform /// Out Of Order transactions // //===================================================================== // Original Authors: // Charles Wilson, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_target_ooo_2_phase.h" // our header #include "reporting.h" // reporting macros using namespace std; static const char *filename = "at_target_ooo_2_phase.cpp"; ///< filename for reporting SC_HAS_PROCESS(at_target_ooo_2_phase); ///Constructor at_target_ooo_2_phase::at_target_ooo_2_phase ( sc_core::sc_module_name module_name // module name , const unsigned int ID // target ID , const char *memory_socket // socket name , sc_dt::uint64 memory_size // memory size (bytes) , unsigned int memory_width // memory width (bytes) , const sc_core::sc_time accept_delay // accept delay (SC_TIME) , const sc_core::sc_time read_response_delay // read response delay (SC_TIME) , const sc_core::sc_time write_response_delay // write response delay (SC_TIME) ) : sc_module (module_name) /// init module name , m_memory_socket (memory_socket) /// init socket name , m_ID (ID) /// init target ID , m_memory_size (memory_size) /// init memory size (bytes) , m_memory_width (memory_width) /// init memory width (bytes) , m_accept_delay (accept_delay) /// init accept delay , m_read_response_delay (read_response_delay) /// init read response delay , m_write_response_delay (write_response_delay) /// init write response delay , m_request_count (1) /// init request count , m_nb_trans_fw_prev_warning(false) , m_begin_resp_method_prev_warning(false) , m_trans_dbg_prev_warning(false) , m_get_dm_ptr_prev_warning(false) , m_response_PEQ ("response_PEQ") , m_peq_delay_time (0 , sc_core::SC_NS) , m_delay_for_out_of_order(700, sc_core::SC_NS) , m_target_memory /// init target's memory ( m_ID // initiator ID for messaging , m_read_response_delay // delay for reads , m_write_response_delay // delay for writes , m_memory_size // memory size (bytes) , m_memory_width // memory width (bytes) ) { /// Bind the socket's export to the interface m_memory_socket(*this); /// Register begin_reponse as an SC_METHOD /// Used to implement force synchronization multiple timing points SC_METHOD(begin_response_method); sensitive << m_response_PEQ.get_event(); dont_initialize(); } //============================================================================== // b_transport implementation calls from initiators // //============================================================================= void at_target_ooo_2_phase::b_transport ( tlm::tlm_generic_payload &payload // ref to Generic Payload , sc_core::sc_time &delay_time // delay time ) { std::ostringstream msg; // log message msg.str(""); msg << "Target: " << m_ID << " b_transport(GP, " << delay_time << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); m_target_memory.operation(payload,delay_time); // delay_time = delay_time + m_end_rsp_delay; msg << "Target: " << m_ID << "(GP, " << delay_time << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); return; } //============================================================================= // nb_transport_fw implementation calls from initiators // //============================================================================= tlm::tlm_sync_enum // synchronization state at_target_ooo_2_phase::nb_transport_fw // non-blocking transport call through Bus ( tlm::tlm_generic_payload &gp // generic payoad pointer , tlm::tlm_phase &phase // transaction phase , sc_core::sc_time &delay_time) // time it should take for transport { std::ostringstream msg; // log message msg.str(""); msg << "Target: " << m_ID << " nb_transport_fw (GP, " << report::print(phase) << ", " << delay_time << ")"; tlm::tlm_sync_enum return_status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // decode phase argument //----------------------------------------------------------------------------- switch (phase) { //============================================================================= case tlm::BEGIN_REQ: { //----------------------------------------------------------------------------- // Force synchronization multiple timing points by returning TLM_ACCEPTED // use a payload event queue to schedule BEGIN_RESP timing point //----------------------------------------------------------------------------- m_target_memory.get_delay(gp, delay_time); // get memory operation delay delay_time += m_accept_delay; m_peq_delay_time = delay_time; bool ooo_flag(false); // every other request forces a possible out of order transaction if(m_request_count++ % 2) { m_peq_delay_time += m_delay_for_out_of_order; ooo_flag = true; } else { ooo_flag = false; } m_response_PEQ.notify(gp, m_peq_delay_time); // put transaction in the PEQ delay_time = m_accept_delay; phase = tlm::END_REQ; // advance txn state to end request return_status = tlm::TLM_UPDATED; // force synchronization msg << endl << " " << "Target: " << m_ID; if(ooo_flag == true) { msg << " out of order"; } msg << " transaction moved to response PEQ " << endl; msg << " Target: " << dec << m_ID << " with Addr: 0x" << setw(8) << setfill('0') << hex << gp.get_address() << dec << " and a delay of " << m_peq_delay_time; msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } // end BEGIN_REQ //============================================================================= case tlm::END_RESP: { m_end_resp_rcvd_event.notify (sc_core::SC_ZERO_TIME); return_status = tlm::TLM_COMPLETED; // indicate end of transaction msg << endl << " " << "Target: " << m_ID << " " << report::print(return_status) << " (GP, " << report::print(phase) << ", " << delay_time << ")" ; REPORT_INFO(filename, __FUNCTION__, msg.str()); break; } //============================================================================= case tlm::END_REQ: case tlm::BEGIN_RESP: { msg << "Target: " << m_ID << " Illegal phase received by target -- END_REQ or BEGIN_RESP"; REPORT_FATAL(filename, __FUNCTION__, msg.str()); return_status = tlm::TLM_ACCEPTED; break; } //============================================================================= default: { return_status = tlm::TLM_ACCEPTED; if(!m_nb_trans_fw_prev_warning) { msg << "Target: " << m_ID << " default phase encountered"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_nb_trans_fw_prev_warning = true; break; } } return return_status; } //end nb_transport_fw //============================================================================= /// begin_response method function implementation // // This method is statically sensitive to m_response_PEQ.get_event // //============================================================================= void at_target_ooo_2_phase::begin_response_method (void) { std::ostringstream msg; // log message tlm::tlm_generic_payload *transaction_ptr; // generic payload pointer msg.str(""); tlm::tlm_sync_enum status = tlm::TLM_COMPLETED; //----------------------------------------------------------------------------- // Process all transactions scheduled for current time a return value of NULL // indicates that the PEQ is empty at this time //----------------------------------------------------------------------------- while ((transaction_ptr = m_response_PEQ.get_next_transaction()) != NULL) { msg.str(""); msg << "Target: " << m_ID << " Starting response method for Addr: 0X" << setw(8) << setfill('0') << hex << transaction_ptr->get_address() << endl << " "; REPORT_INFO(filename, __FUNCTION__, msg.str()); sc_core::sc_time delay = sc_core::SC_ZERO_TIME; m_target_memory.operation(*transaction_ptr, delay); /// perform memory operation tlm::tlm_phase phase = tlm::BEGIN_RESP; delay = sc_core::SC_ZERO_TIME; msg.str(""); msg << "Target: " << dec << m_ID << " nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME)" << endl << " "; REPORT_INFO(filename, __FUNCTION__, msg.str()); //----------------------------------------------------------------------------- // Call nb_transport_bw with phase BEGIN_RESP check the returned status //----------------------------------------------------------------------------- status = m_memory_socket->nb_transport_bw(*transaction_ptr, phase, delay); msg.str(""); msg << "Target: " << dec << m_ID << " " << report::print(status) << " (GP, " << report::print(phase) << ", " << delay << ")"; REPORT_INFO(filename, __FUNCTION__, msg.str()); switch (status) { //============================================================================= case tlm::TLM_COMPLETED: { next_trigger (delay); // add comments ??? return; break; } //============================================================================= case tlm::TLM_ACCEPTED: { next_trigger (m_end_resp_rcvd_event); // add comments ??? return; break; } //============================================================================= case tlm::TLM_UPDATED: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " TLM_UPDATED invalid response to BEGIN_RESP"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } //============================================================================= default: { if(!m_begin_resp_method_prev_warning) { msg << "Target: " << m_ID << " undefined return status "; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_begin_resp_method_prev_warning = true; break; } }// end switch } // end while next_trigger (m_response_PEQ.get_event()); } //end begin_response_queue_active //============================================================================== // Methods Required by Target Interface but not Implemented for this Example // Not implemented for this example but required by interface bool at_target_ooo_2_phase::get_direct_mem_ptr (tlm::tlm_generic_payload & /*payload*/, ///< address + extensions tlm::tlm_dmi & /*data*/ ///< dmi data ) { // THis is not a fatal, print first as warning std::ostringstream msg; msg.str(""); if(!m_get_dm_ptr_prev_warning) { msg << "Target: " << m_ID << " DMI not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_get_dm_ptr_prev_warning = true; return false; } // Not implemented for this example but required by interface unsigned int // result at_target_ooo_2_phase::transport_dbg ( tlm::tlm_generic_payload & /*payload*/ ///< debug payload ) { std::ostringstream msg; msg.str(""); if(!m_trans_dbg_prev_warning) { msg << "Target: " << m_ID << " DBG(debug) not implemented for this example"; REPORT_WARNING(filename, __FUNCTION__, msg.str()); } else m_trans_dbg_prev_warning = true; return false; } systemc-2.3.4/examples/tlm/at_ooo/src/at_ooo_top.cpp0000644000175000017500000001153714342422106022423 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /*============================================================================= @file example_system_top.cpp @brief This class instantiates components that compose a TLM2 example system that demonstrates Out Of Order transaction processing =============================================================================*/ /***************************************************************************** Original Authors: Bill Bunton, ESLX Anna Keist, ESLX *****************************************************************************/ #include "at_ooo_top.h" // example system top header #include "at_target_2_phase.h" // memory target #include "at_target_ooo_2_phase.h" // memory target #include "initiator_top.h" // initiator #include "tlm.h" // TLM header /*============================================================================= @fn example_system_top::example_system_top @brief example_system_top constructor @details This class instantiates the example system components and call the modules bind methods to logically connect the model components. @param name module name @retval void =============================================================================*/ example_system_top::example_system_top ///< constructor ( sc_core::sc_module_name name ///< module name ) : sc_core::sc_module ///< SC base ( name ///< module name ) , m_bus ///< bus ( "m_bus" ///< module name ) , m_at_target_2_phase_1 ///< at_test_target ( "m_at_target_2_phase_1" ///< module name , 201 , "memory_socket_1" ///< socket name , 4*1024 ///< memory size (bytes) , 4 ///< memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) ///< accept delay , sc_core::sc_time(50, sc_core::SC_NS) ///< read response delay , sc_core::sc_time(30, sc_core::SC_NS) ///< write response delay ) , m_at_target_ooo_2_phase_1 ///< at_test_target ( "m_at_target_ooo_2_phase_1" ///< module name , 202 , "memory_socket_1" ///< socket name , 4*1024 ///< memory size (bytes) , 4 ///< memory width (bytes) // force additional out of order execution by making on // target longer than the other , sc_core::sc_time(20, sc_core::SC_NS) ///< accept delay , sc_core::sc_time(100, sc_core::SC_NS) ///< read response delay , sc_core::sc_time(60, sc_core::SC_NS) ///< write response delay ) , m_initiator_1 ///< initiator 1 ( "m_initiator_1" ///< module name , 101 ///< initiator ID , 0x0000000000000100 ///< fitst base address , 0x0000000010000100 ///< second base address , 2 // active transactions ) , m_initiator_2 ///< initiator 2 ( "m_initiator_2" ///< module name , 102 ///< initiator ID , 0x0000000000000200 ///< fitst base address , 0x0000000010000200 ///< second base address , 2 // active transactions ) { // bind TLM2 initiator to TLM2 target m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); m_bus.initiator_socket[0](m_at_target_2_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_ooo_2_phase_1.m_memory_socket); } systemc-2.3.4/examples/tlm/at_ooo/src/at_ooo.cpp0000644000175000017500000000511614342422106021535 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and call /// sc_start() /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "reporting.h" // reporting utilities #include "at_ooo_top.h" // top module #include "tlm.h" // TLM header //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_ooo/build-unix/0000755000175000017500000000000014342422106021037 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/build-unix/Makefile0000644000175000017500000000061714342422106022503 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_ooo VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_2_phase.o \ at_target_ooo_2_phase.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_ooo/results/0000755000175000017500000000000014342422106020460 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_ooo/results/expected.log0000644000175000017500000077714414342422106023010 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 10 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 10 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 20 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 40 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 47 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 50 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 50 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 50 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 57 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 57 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 67 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 87 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 87 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 87 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 94 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 94 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 97 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 97 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 97 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 104 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 104 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 114 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 134 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 134 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 134 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 141 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 141 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 144 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 144 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 144 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 151 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 151 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 161 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 181 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 181 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 181 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 188 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 188 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 191 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 191 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 191 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 198 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 198 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 208 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 228 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 228 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 228 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 235 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 235 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 238 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 238 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 238 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 245 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 245 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 255 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 275 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 275 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 275 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 282 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 282 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 285 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 285 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 285 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 292 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 292 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 302 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 322 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 322 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 322 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 329 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 329 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 332 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 332 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 332 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 339 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 339 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 349 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 369 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 369 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 369 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 376 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 376 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 379 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 379 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 379 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 386 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 386 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 396 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 416 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 416 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 416 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 423 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 423 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 426 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 426 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 426 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 433 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 433 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 443 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 463 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 463 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 463 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 470 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 470 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 473 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 473 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 473 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 480 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 490 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 510 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 510 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 510 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 517 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 517 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 520 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 520 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 527 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 537 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 557 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 557 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 557 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 564 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 564 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 567 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 567 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 567 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 574 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 574 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 584 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 604 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 604 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 611 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 611 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 614 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 614 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 614 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 621 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 621 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 631 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 651 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 651 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 651 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 658 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 658 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 661 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 661 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 661 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 668 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 668 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 678 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 698 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 698 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 698 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 705 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 705 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 708 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 708 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 708 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 715 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 715 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 725 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 745 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 745 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 745 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 752 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 752 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 755 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 755 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 755 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 762 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 762 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 772 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 812 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 812 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 812 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 819 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 819 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 822 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 822 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 822 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 829 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 829 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 839 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 879 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 879 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 879 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 886 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 886 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 889 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 889 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 889 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 896 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 896 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 906 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 946 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 946 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 946 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 953 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 953 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 956 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 956 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 956 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 963 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 963 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 973 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1013 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1013 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1013 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1020 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1023 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1023 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1023 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1030 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1030 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1040 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1080 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1080 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1080 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1087 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1087 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1090 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1090 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1097 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1107 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1147 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1147 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1147 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1154 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1154 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1157 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1157 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1157 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1164 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1164 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1174 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1214 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1214 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1214 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1221 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1221 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1224 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1224 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1224 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1231 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1231 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1241 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1281 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1281 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1281 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1288 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1288 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1291 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1291 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1291 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1298 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1298 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1308 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1348 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1348 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1348 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1355 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1355 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1358 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1358 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1358 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1365 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1365 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1375 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1415 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1415 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1415 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1422 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1422 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1425 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1425 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1425 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1432 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1432 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1442 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1482 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1482 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1482 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1489 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1489 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1492 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1492 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1492 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1499 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1499 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1509 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1549 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1549 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1549 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1556 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1556 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1559 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1559 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1559 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1566 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1566 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1576 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1616 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1616 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1616 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1623 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1623 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1626 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1626 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1626 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1633 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1633 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1643 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1683 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1683 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1683 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1690 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1693 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1693 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1693 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1700 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1750 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1750 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1750 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1757 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1757 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1760 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1760 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1767 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_2_phase.cpp: 1767 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 transaction moved to send-response PEQ Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1777 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1817 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1817 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1817 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1824 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1824 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 1824 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000100 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 starting response method Info: memory.cpp: 1827 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_2_phase.cpp: 1827 ns - begin_response_method Target: 201 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1827 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_2_phase.cpp: 1834 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, END_RESP, 0 s) Target: 201 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1834 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1844 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 1844 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000200 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 1864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000200 Info: memory.cpp: 1924 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 1924 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1924 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1931 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1931 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 1931 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1931 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1931 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 1931 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000204 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 1951 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000100 Info: memory.cpp: 2604 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 2604 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2604 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2611 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2611 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 2611 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2611 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2611 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 2611 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000104 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 2631 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 2691 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000104 Info: memory.cpp: 2691 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_ooo_2_phase.cpp: 2691 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 2691 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2691 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2698 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2698 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 2698 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2698 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2698 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 2698 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000108 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 2711 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000204 Info: memory.cpp: 2711 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_ooo_2_phase.cpp: 2711 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 2711 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2711 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2718 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2718 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2718 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 2718 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2718 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2718 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 2718 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000208 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 2738 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 2798 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000208 Info: memory.cpp: 2798 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_ooo_2_phase.cpp: 2798 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 2798 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2798 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2805 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2805 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 2805 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2805 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2805 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 2805 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000020c and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 2825 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 3478 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000108 Info: memory.cpp: 3478 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_ooo_2_phase.cpp: 3478 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 3478 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3478 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3485 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3485 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 3485 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3485 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3485 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 3485 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000010c and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 3505 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 3565 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000010c Info: memory.cpp: 3565 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_ooo_2_phase.cpp: 3565 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 3565 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3565 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3572 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3572 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 3572 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3572 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3572 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 3572 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000110 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 3585 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000020c Info: memory.cpp: 3585 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_ooo_2_phase.cpp: 3585 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 3585 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3585 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3592 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3592 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3592 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 3592 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3592 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3592 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 3592 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000210 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 3612 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 3672 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000210 Info: memory.cpp: 3672 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_ooo_2_phase.cpp: 3672 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 3672 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3672 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3679 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3679 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 3679 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3679 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3679 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 3679 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000214 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 3699 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 4352 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000110 Info: memory.cpp: 4352 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_ooo_2_phase.cpp: 4352 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 4352 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4352 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4359 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4359 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 4359 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4359 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4359 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 4359 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000114 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 4379 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 4439 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000114 Info: memory.cpp: 4439 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_ooo_2_phase.cpp: 4439 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 4439 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4439 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4446 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4446 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 4446 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4446 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4446 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 4446 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000118 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 4459 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000214 Info: memory.cpp: 4459 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_ooo_2_phase.cpp: 4459 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 4459 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4459 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4466 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4466 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4466 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 4466 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4466 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4466 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 4466 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000218 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 4486 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 4546 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000218 Info: memory.cpp: 4546 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_ooo_2_phase.cpp: 4546 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 4546 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4546 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4553 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4553 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 4553 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4553 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4553 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 4553 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000021c and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 4573 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 5226 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000118 Info: memory.cpp: 5226 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_ooo_2_phase.cpp: 5226 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 5226 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5226 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5233 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5233 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 5233 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5233 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5233 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 5233 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000011c and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 5253 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 5313 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000011c Info: memory.cpp: 5313 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_ooo_2_phase.cpp: 5313 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 5313 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5313 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5320 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5320 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 5320 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5320 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5320 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 5320 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000120 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 5333 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000021c Info: memory.cpp: 5333 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_ooo_2_phase.cpp: 5333 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 5333 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5333 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5340 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5340 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5340 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 5340 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5340 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5340 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 5340 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000220 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 5360 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 5420 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000220 Info: memory.cpp: 5420 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_ooo_2_phase.cpp: 5420 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 5420 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5420 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5427 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5427 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 5427 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5427 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5427 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 5427 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000224 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 5447 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 6100 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000120 Info: memory.cpp: 6100 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_ooo_2_phase.cpp: 6100 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 6100 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6100 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6107 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6107 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 6107 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6107 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6107 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 6107 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000124 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 6127 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 6187 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000124 Info: memory.cpp: 6187 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_ooo_2_phase.cpp: 6187 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 6187 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6187 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6194 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6194 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 6194 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6194 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6194 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 6194 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000128 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 6207 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000224 Info: memory.cpp: 6207 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_ooo_2_phase.cpp: 6207 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 6207 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6207 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6214 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6214 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6214 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 6214 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6214 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6214 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 6214 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000228 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 6234 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 6294 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000228 Info: memory.cpp: 6294 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_ooo_2_phase.cpp: 6294 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 6294 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6294 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6301 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6301 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 6301 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6301 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6301 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 6301 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000022c and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 6321 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 6974 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000128 Info: memory.cpp: 6974 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_ooo_2_phase.cpp: 6974 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 6974 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6974 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 6981 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6981 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 6981 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6981 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6981 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 6981 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000012c and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 7001 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7061 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000012c Info: memory.cpp: 7061 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_ooo_2_phase.cpp: 7061 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7061 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7061 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7068 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7068 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 7068 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7068 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7068 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7068 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000130 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 7081 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000022c Info: memory.cpp: 7081 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_ooo_2_phase.cpp: 7081 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7081 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7081 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7088 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7088 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7088 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7088 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7088 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7088 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7088 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000230 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 7108 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7168 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000230 Info: memory.cpp: 7168 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_ooo_2_phase.cpp: 7168 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7168 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7168 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7175 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7175 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 7175 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7175 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7175 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7175 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000234 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 7195 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7848 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000130 Info: memory.cpp: 7848 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_ooo_2_phase.cpp: 7848 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7848 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7848 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7855 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7855 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 7855 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7855 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7855 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7855 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000134 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 7875 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7935 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000134 Info: memory.cpp: 7935 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_ooo_2_phase.cpp: 7935 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7935 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7935 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7942 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7942 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 7942 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7942 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7942 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7942 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000138 and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 7955 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000234 Info: memory.cpp: 7955 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_ooo_2_phase.cpp: 7955 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 7955 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7955 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 7962 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7962 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7962 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 7962 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 7962 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 7962 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 7962 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000238 and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 7982 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 8042 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000238 Info: memory.cpp: 8042 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_ooo_2_phase.cpp: 8042 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 8042 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8042 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8049 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8049 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 8049 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8049 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 8049 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 8049 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000023c and a delay of 780 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 8069 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 8722 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000138 Info: memory.cpp: 8722 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_ooo_2_phase.cpp: 8722 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 8722 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8722 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8729 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8729 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 8729 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8729 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 8729 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 8729 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000013c and a delay of 80 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 8749 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 8809 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000013c Info: memory.cpp: 8809 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_ooo_2_phase.cpp: 8809 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 8809 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8809 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8816 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8816 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 8816 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8816 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 8816 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 8816 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000100 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 8829 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000023c Info: memory.cpp: 8829 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_ooo_2_phase.cpp: 8829 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 8829 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8829 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8836 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8836 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8836 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000100 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 8836 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8836 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 8836 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 8836 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000200 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 8856 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000200 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 8956 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000200 Info: memory.cpp: 8956 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_ooo_2_phase.cpp: 8956 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 8956 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8956 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 8963 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8963 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 8963 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 8963 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 8963 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 8963 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000204 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 8983 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000204 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 9636 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000100 Info: memory.cpp: 9636 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_ooo_2_phase.cpp: 9636 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 9636 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9636 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9643 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9643 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 9643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9643 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 9643 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 9643 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000104 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 9663 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000104 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 9763 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000104 Info: memory.cpp: 9763 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_ooo_2_phase.cpp: 9763 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 9763 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9763 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9770 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9770 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 9770 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9770 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 9770 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 9770 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000108 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 9783 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000204 Info: memory.cpp: 9783 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_ooo_2_phase.cpp: 9783 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 9783 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9783 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9790 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9790 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9790 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000108 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 9790 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9790 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 9790 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 9790 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000208 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 9810 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000208 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 9910 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000208 Info: memory.cpp: 9910 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_ooo_2_phase.cpp: 9910 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 9910 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9910 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 9917 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9917 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 9917 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 9917 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 9917 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 9917 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000020c and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 9937 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 10590 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000108 Info: memory.cpp: 10590 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_ooo_2_phase.cpp: 10590 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 10590 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10590 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10597 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10597 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 10597 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10597 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 10597 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 10597 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000010c and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 10617 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000010C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 10717 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000010c Info: memory.cpp: 10717 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_ooo_2_phase.cpp: 10717 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 10717 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10717 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10724 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10724 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 10724 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10724 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 10724 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 10724 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000110 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 10737 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000020c Info: memory.cpp: 10737 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_ooo_2_phase.cpp: 10737 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 10737 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10737 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10744 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10744 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10744 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000110 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 10744 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10744 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 10744 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 10744 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000210 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 10764 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000210 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 10864 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000210 Info: memory.cpp: 10864 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_ooo_2_phase.cpp: 10864 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 10864 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10864 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 10871 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10871 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 10871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 10871 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 10871 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 10871 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000214 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 10891 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000214 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 11544 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000110 Info: memory.cpp: 11544 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_ooo_2_phase.cpp: 11544 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 11544 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11544 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11551 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11551 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 11551 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11551 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 11551 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 11551 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000114 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 11571 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000114 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 11671 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000114 Info: memory.cpp: 11671 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_ooo_2_phase.cpp: 11671 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 11671 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11671 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11678 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11678 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 11678 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11678 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 11678 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 11678 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000118 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 11691 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000214 Info: memory.cpp: 11691 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_ooo_2_phase.cpp: 11691 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 11691 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11691 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11698 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11698 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11698 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000118 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 11698 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11698 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 11698 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 11698 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000218 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 11718 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000218 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 11818 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000218 Info: memory.cpp: 11818 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_ooo_2_phase.cpp: 11818 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 11818 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11818 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 11825 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11825 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 11825 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 11825 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 11825 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 11825 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000021c and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 11845 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000021C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 12498 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000118 Info: memory.cpp: 12498 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_ooo_2_phase.cpp: 12498 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 12498 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12498 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12505 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12505 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 12505 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12505 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 12505 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 12505 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000011c and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 12525 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000011C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 12625 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000011c Info: memory.cpp: 12625 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_ooo_2_phase.cpp: 12625 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 12625 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12625 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12632 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12632 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 12632 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12632 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 12632 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 12632 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000120 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 12645 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000021c Info: memory.cpp: 12645 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_ooo_2_phase.cpp: 12645 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 12645 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12645 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12652 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12652 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12652 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000120 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 12652 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12652 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 12652 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 12652 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000220 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 12672 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000220 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 12772 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000220 Info: memory.cpp: 12772 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_ooo_2_phase.cpp: 12772 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 12772 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12772 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 12779 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12779 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 12779 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 12779 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 12779 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 12779 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000224 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 12799 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 13452 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000120 Info: memory.cpp: 13452 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_ooo_2_phase.cpp: 13452 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 13452 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13452 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13459 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13459 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 13459 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13459 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 13459 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 13459 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000124 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 13479 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000124 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 13579 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000124 Info: memory.cpp: 13579 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_ooo_2_phase.cpp: 13579 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 13579 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13579 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13586 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13586 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 13586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13586 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 13586 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 13586 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000128 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 13599 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000224 Info: memory.cpp: 13599 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_ooo_2_phase.cpp: 13599 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 13599 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13599 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13606 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13606 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13606 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000128 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 13606 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13606 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 13606 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 13606 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000228 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 13626 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000228 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 13726 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000228 Info: memory.cpp: 13726 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_ooo_2_phase.cpp: 13726 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 13726 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13726 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 13733 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13733 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 13733 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 13733 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 13733 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 13733 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000022c and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 13753 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000022C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 14406 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000128 Info: memory.cpp: 14406 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_ooo_2_phase.cpp: 14406 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 14406 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14406 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14413 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14413 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 14413 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14413 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 14413 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 14413 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000012c and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 14433 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000012C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 14533 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000012c Info: memory.cpp: 14533 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_ooo_2_phase.cpp: 14533 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 14533 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14533 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14540 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14540 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 14540 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14540 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 14540 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 14540 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000130 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 14553 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000022c Info: memory.cpp: 14553 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_ooo_2_phase.cpp: 14553 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 14553 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14553 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14560 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14560 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14560 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000130 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 14560 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14560 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 14560 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 14560 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000230 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 14580 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000230 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 14680 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000230 Info: memory.cpp: 14680 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_ooo_2_phase.cpp: 14680 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 14680 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14680 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 14687 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14687 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 14687 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 14687 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 14687 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 14687 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000234 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 14707 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 15360 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000130 Info: memory.cpp: 15360 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_ooo_2_phase.cpp: 15360 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 15360 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15360 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15367 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15367 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 15367 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15367 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 15367 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 15367 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000134 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 15387 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000134 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 15487 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000134 Info: memory.cpp: 15487 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_ooo_2_phase.cpp: 15487 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 15487 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15487 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15494 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15494 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 15494 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15494 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 15494 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 15494 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x00000138 and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: at_target_ooo_2_phase.cpp: 15507 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000234 Info: memory.cpp: 15507 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_ooo_2_phase.cpp: 15507 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 15507 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15507 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15514 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15514 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15514 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000138 Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 15514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15514 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 15514 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 15514 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x00000238 and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 15534 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000238 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 15634 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000238 Info: memory.cpp: 15634 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_ooo_2_phase.cpp: 15634 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 15634 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15634 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 15641 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15641 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 15641 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 15641 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 15641 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 15641 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 out of order transaction moved to response PEQ Target: 202 with Addr: 0x0000023c and a delay of 820 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 15661 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000023C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 16314 ns - begin_response_method Target: 202 Starting response method for Addr: 0X00000138 Info: memory.cpp: 16314 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_ooo_2_phase.cpp: 16314 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 16314 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16314 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16321 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 16321 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 16321 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 16321 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 16321 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_ooo_2_phase.cpp: 16321 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 transaction moved to response PEQ Target: 202 with Addr: 0x0000013c and a delay of 120 ns Target: 202 UPDATED (GP, END_REQ, 20 ns) Info: select_initiator.cpp: 16341 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000013C Initiator: 101 transaction waiting begin-response on backward path Initiator: 101 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_ooo_2_phase.cpp: 16441 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000013c Info: memory.cpp: 16441 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_ooo_2_phase.cpp: 16441 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 16441 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16441 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 transaction moved to send-end-response PEQ Initiator: 101 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16448 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 16448 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 16448 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: at_target_ooo_2_phase.cpp: 16448 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) Info: at_target_ooo_2_phase.cpp: 16461 ns - begin_response_method Target: 202 Starting response method for Addr: 0X0000023c Info: memory.cpp: 16461 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_ooo_2_phase.cpp: 16461 ns - begin_response_method Target: 202 nb_transport_bw (GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_ooo_2_phase.cpp: 16461 ns - begin_response_method Target: 202 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16461 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 16468 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 16468 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 16468 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### Info: at_target_ooo_2_phase.cpp: 16468 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, END_RESP, 0 s) Target: 202 COMPLETED (GP, END_RESP, 0 s) systemc-2.3.4/examples/tlm/at_1_phase/0000755000175000017500000000000014342422106017503 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/test.am0000644000175000017500000000565614342422106021015 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: at_1_phase ## %C%: at_1_phase examples_TESTS += at_1_phase/test at_1_phase_test_CPPFLAGS = \ -I$(srcdir)/at_1_phase/include \ $(CPPFLAGS_TLMTESTS) at_1_phase_test_SOURCES = \ $(at_1_phase_H_FILES) \ $(at_1_phase_CXX_FILES) examples_BUILD += \ $(at_1_phase_BUILD) examples_CLEAN += \ at_1_phase/run.log \ at_1_phase/expected_trimmed.log \ at_1_phase/run_trimmed.log \ at_1_phase/diff.log examples_FILES += \ $(at_1_phase_H_FILES) \ $(at_1_phase_CXX_FILES) \ $(at_1_phase_BUILD) \ $(at_1_phase_EXTRA) examples_DIRS += \ at_1_phase/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details at_1_phase_H_FILES = \ at_1_phase/include/at_1_phase_top.h \ at_1_phase/include/initiator_top.h at_1_phase_CXX_FILES = \ at_1_phase/src/at_1_phase.cpp \ at_1_phase/src/at_1_phase_top.cpp \ at_1_phase/src/initiator_top.cpp at_1_phase_BUILD = \ at_1_phase/results/expected.log at_1_phase_EXTRA = \ at_1_phase/CMakeLists.txt \ at_1_phase/build-msvc/Makefile \ at_1_phase/build-msvc/at_1_phase.sln \ at_1_phase/build-msvc/at_1_phase.vcxproj \ at_1_phase/build-unix/Makefile \ at_1_phase/docs/at_1_phase_example.pdf \ at_1_phase/docs/at_1_phase_example.ppt #at_1_phase_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/tlm/at_1_phase/build-msvc/0000755000175000017500000000000014342422106021550 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/build-msvc/at_1_phase.vcxproj0000644000175000017500000003070414342422106025175 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {54F8C078-369E-4AA4-9859-264839C6F89A} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/at_1_phase/build-msvc/at_1_phase.sln0000644000175000017500000000227614342422106024301 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_1_phase", "at_1_phase.vcxproj", "{54F8C078-369E-4AA4-9859-264839C6F89A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|Win32.ActiveCfg = Debug|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|Win32.Build.0 = Debug|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|x64.ActiveCfg = Debug|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|x64.Build.0 = Debug|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|Win32.ActiveCfg = Release|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|Win32.Build.0 = Release|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|x64.ActiveCfg = Release|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/at_1_phase/build-msvc/Makefile0000644000175000017500000000056014342422106023211 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = at_1_phase OBJS=\ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\at_target_1_phase.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\select_initiator.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/at_1_phase/docs/0000755000175000017500000000000014342422106020433 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/docs/at_1_phase_example.ppt0000644000175000017500000100500014342422106024673 0ustar carstencarstenࡱ> n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`( */ 0`DArialr NewmanPPOؖ2 0ؖD-3 00000ewmanPPOؖ2 0ؖ DWingdingswmanPPOؖ2 0ؖ0DMonotype SortsPPOؖ2 0ؖ@DArial NarrowsPPOؖ2 0ؖPDTimes New RomanPPOؖ2 0ؖ`DTahomaew RomanPPOؖ2 0ؖpDCourier NewmanPPOؖ2 0ؖ@.  @n?" dd@  @@`` tA     4C/9?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 00 @8%<4dddd 0 g4^d^dR2 0ppp@ <4!d!d 0PO<4BdBd 0PO ʚ;ʚ; )___PPT12 %___PPT10D-3 00000ew̕̕PPЕ2 0ЕDCourier New̕̕PPЕ2 0Е ? O 4!", / * # % 405/p@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <4X(PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> j(     A??s_c_pg2_opt3Picture 2s_c_pg2_opt3  A??system_c_L2_9Picture 3system_c_L2_9Y  N< .?Rectangle 4P . T Click to edit Master title style! !.  H?Rectangle 5P0 . RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   N?Rectangle 6"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!q{ drs/shapexml.xmlVn6;{mv~Ul gcAIT"Udh%o+RNEQe}Gp~oF/_mJVօ1^8:5YbsY΄2ZFɗ_FupYף*KQ[KYYnl)U G{n) O`JܒYA3-J)Rn13u#'̊52|'kT"4%ɱf"ojJTKn*DY)mjur䲉s52g;h"bmoFd9~蠇Aw鈑8?Va,I8Sjr'[Ѹ-KJ8#ak7S-WO nz.MQ1Bėnwy*E6Iy{3=.ExWt)PJB1 `|ZU"y /&S_PK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!q{ *drs/shapexml.xmlPK-!FPtdrs/downrev.xmlPK{, .   hdman`  Arial&Monotype Typography  L*"G B  s *޽h ? ̙3380___PPT10.YS' PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ОĚB!drs/slideLayouts/slideLayout1.xmln0 _H0 Bba@A>#+V 1^d;EH8D~"rg4kdIqvrZ0iLs"@;+'E+cq9}ny5n6r5eE- 祥 MYMlOe?k%7'FZ Aj@?ǁf!8qGO cI )E ]0#ύuVD2M^ehĠV[1mO9a,UlD'Q)F,t,ZX*ԒQY$R6~LCm恩*qz7zג/7 nt vڪMOr.wD(VE}b]PC#}trL\x:3ߥ'nrNx_NyLvfci w_]զW l̂P N_C=iG =3-f3#Cd@DX&cR8=Rj_S~d z^; - dMlA銂8Rn^7*6 )ܩpdN㈢.p4Z6RJ_*NHu<~냃x,^_Mrto>zMdt/M,/yVI!'}?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!ОĚB!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!W !drs/slideLayouts/slideLayout1.xmlێ<+\VڒChj_nQ>q DlqV`|srn/iuV${&+Zmfϧ7ӄ8OUEV|K_3='Pd)Ƕ\RVn~͠i:HZ$>zNr[zmk:d}p睹aZ@jQC1,YUƐndͬvzQ o+IM8YXm{my|ӱM B^f r}JHkPdaKQE%,96:d9G9|fi6(=6 K !Q9ċ(~*ꛎD-`d?K J{OX{NlY3BK6ɻpj/8ɎQT4{vDiocMØoMGTk/C>:yr9zDl1E`j$Oq0ґH6SoUlaH;'cUh ! ]!!XݎBPƷZ0i|U'`qj6xݔ\68Mi+YX̗vCZUik= lPQlPs5 ˦U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!1q!drs/slideLayouts/slideLayout1.xmlW[o0~`q RiR/h`d%M ;vbJi:Ru/9߹]l8CU:btN8qpl  1fRq:|0#+kCԘ< CMRʱ>9.cj ?7gag"֫&ed~dͩ0% _Y='M8VE$ρbl鎦k%ʥψZ&Ʈ8&QY8~Tx@$^~6Fe˵ھ>y%9T5a/ op1@tȜH`RqtPZ(|ϔ[qSbP Es`0<6 Xh3 n "$y%m jС,m 阗=wYdQyUB1,^#!O~)<)dT|x :拌%I1mf˨ϰ-<*Zws(}!rhV*g}©.3%':\*t3v00$[^wWDHVM)^S*g+sf~%w.z~?,n^wYV,?xsij3`fEi ]˺U^2鎦k-ƥ<*(gqTu8Y*͖WtIhΖkK|`.H" 9x5-`/ūz\:!REHÍRIzR 9bd.œՓv ny\?[&mV:ޱl&.?a8q}3ߍ8g7 vBIGo;x;j(*~)Otv/~,E4GW?xX|I1"FPaLƾ; >@[,Q3-Ft ߔV@n^cEW9k6"> C 4 73hDC3,~qrx3+ ׎hlp2yb̵k3e!1$XS%hA]Z }Ej+ {`ya~ ap;]20 rYS$MdʁT"Pp Zpʯ֖VmХںĊE{ĊT9Yo,߲"UY`Qu%ahl`RZjhG-Q\J\ xOSv"޶hJrڴ{ 7I~¡ n ͔4ЫBFqawL%&Sľ_NQ8 !c@D#j'͛jN5e VLJQpi%%%Z`m߷X;6YvYֶYYn' j#MKw%s+8W\hczw/LwgoZkv6>;;}:#?: -3rQz:Cs4Qiqp\j:MuVqVZM;5ht2ɋ?3:avLx뼆GhՇp'tL&gVU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!?'e!drs/slideLayouts/slideLayout1.xmlTn0?<pPu(F|m|\wIIND-ggw\ְVŤ͔3oy}򉳄0ީw*w i'dᒀ$BA9h3&oⶦN?VC~&vZ^rؓDet!lV^Cg!Oa" DFcWH/4mOщAj};9‚5Y)~5dmKdURUޞP%>C&qXvjFt(գss: 6 s`)(V`y'MT*\#uXŒԮ"M&y5l FU~dqE;bӭ@32KTo`j,@\fU܍rzn/z(PꃗĜ'Y~/O>#Y֜Áe7#>,<Mo] L5vFCmDN@=&k= Fs0 呡g!T;H3P*׬ ¯WYLM2[X^eD aٖ>iꢄ $sPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!?'e!drs/slideLayouts/slideLayout1.xmlPK{pPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!ה)=n!drs/slideLayouts/slideLayout1.xmlWݎ6wrYiB0ݪ,*Đt;rL{L`%7L9>~"%ujpK/mLH 1߆c0YL~GLd|4hmk"dr0]/GEJҺ3/R8L#^qʷhv"Q6c:`lZ;Ǐx-DF~SL}^B+r=猂I<%&i"6nPXfص=R2,ƨ6Ip2|cA<1K%O`m%_W$ݓ$4å쇾Qg?Rݯʺ]ס˾mve:0WSx4ڮI6^j;װ_:kX\!$`86{hm꾱̓w-xb)Yxz[7ЯLug qS~]¼>\dǘOlleRݖ2}7^5co< p6vɱK[F|ҏ? B2ކ{?z# n;ј=j4DL4XtN|'zz ߽?4N|'x QWh &F;xw `0y;l7ڱu}g 9L(.v {>b(WWi-U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!o!drs/slideLayouts/slideLayout1.xmlX͎6;:x mp6F gZת)J%)c["]1QHW F= 2M0vGn YhwB_dh2-h331.op%XåXrQz~G81`$BA,{%w^^802-{ōAZp2Bn)r5CՑ)<مwˤ`*y$֩\ .K(຀%aN# EA&MȺĤ6`5o9"`]{=ۺ^,3*ORDd <ٮ,Flu::Q KBicw\g(Xv<΀o'l] >ȗ8 鞸Mc@#.k*v+;t (8q ^u+<cAx^$P<`8H(pPBpNH(pX\NpP<$4G%CB5AxbRnO}?w?}vu><)2TY:Ĝr}G>P 5+I8&9w0ch7Z9b#ZJJ 瑂n8C|Pۍ5T*P/xPxPxPxPxP~x_}}uw4=;D}w׾e'M]Gw#+޺_+Nc(C )ɴ2!3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!o!drs/slideLayouts/slideLayout1.xmlPK1PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!Uh'y!drs/slideLayouts/slideLayout1.xmlUۊ0}/ Y凜b,[ { MY4qHdBB8ќsfh~qvΙUʮ'iq;YDhg儷27c_F]A6&FeQDQKyiioa]T~€J ʼn; 5 kf1pƏ3 J+l3MeOid.Ҁ(93.RH+ r2݀폩'jz:ŖG|JC Z2`%@b~L B~hf*(7RU01dN8W%D(^VEx V_DTPjM1@bǪ Js92g8'x_Lqfci ]&K͋Psl̂PP8=H~ i=i h 4x8J<3tLV =Dbhd rL CJ[ Wȉt2=THjrLr?MRq悢!躝S_R ΜxEB*:UwHFG?Rg;Yxz GfR'\ Gse#ّ ǣ_u׭.ju'!DwSk[e=&3M^KsE/! cdNPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!Uh'y!drs/slideLayouts/slideLayout1.xmlPK !PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!t%O!drs/slideLayouts/slideLayout1.xmlV]o0}`q eu4ލcU6]; U)¦Ĺsu^Dw^E#)iyۛ`FW練xYѽ2K̳+/ޭS4d[l3EMoköP8.i})o{3JH Sx4i(`x1(H$Fm]IIUie!8+Ŷ]*DDjaoa/.,EZF)63 \b Y M,PD)hw!yt]}sva.e?TsD5/! nMDnlJ v9>+$QE V/UV>eYTpZ֌tD90 {H uyE>D'!q-j$SmƓOAL2bC߂~jI}6>_2K9c%҇EK@0J \ Xx p{Z1ƶ0=`/D@Pb@Nm@r]̩?Pw[oEFKxid #C֫r3 wd&Lk MMғG JGbd&\-PgՂ3g/Kả)׭ٺPv.b}Nѳ+ Y}mRi*18MZᎳ /!#0 PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!t%O!drs/slideLayouts/slideLayout1.xmlPKB: PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!B 1theme/theme/theme1.xmlZ[o~/ }7'[8=Aϴ$[VI:7CR-Ǘ"FC: '/˃$ b'qx9|+$ۿ|ȳ~_Ez}q;$b<[$Y$ f 7_7 /ZF"Al[S}# ElԬ'!ENN͈W$<[Gaf=p`7g_|p!AXSt}laQjUc8>v1B$umF#¿]!dD٩:fF?NZ1&}kߘ2czt$$m'M.EK!I\M6=$nBQUJ2%_A|BA\^V#7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[BsJsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]J9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†]>X^BS1һ̚ *rEdUC[&XW/ -떳u3S~(}P⚜NC\ !^(ub{.gvx-r Ax %#Kʲdy>؍$P%7;t-2Iɼ$^EQ!b\tsTo;IƳ!B )aRp  q@вK1IڮpnyL4.v)!xW%, XІ6m|=rC^;ENꡭc ElݭbHFjsd*Ic-)n4 7e`KB"TxV 5{|5Z6i~jmCu(ˎB-^PT XҒ$+y q2Z@HvL$%Mb jYkK* d|$A>~ȴ~Il̙ D7 h)  rE2F% ;We:gL@p=oJ̘GқvARH6Y SV!z1df=Ln22KN$=RCf2Ke^%d9Ȝ) f-fa7WC|a6ѧGCfԠ 2*?A}!cX(z[:29q-hToY/hZf { QqWBB2[[] '|}Ry;fX[f^PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!B 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS TLM2.0plan&  0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``@n?" dd   @@``PR    f ` p>> t"(  t t A"??"system_c_title_9Picture 2system_c_title_9 t N̄.?Rectangle 4P . T Click to edit Master title style! !. t H.?Rectangle 5P0 . RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SB t s *޽h ? ̙3380___PPT10.YS'~PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!VKS!drs/slideLayouts/slideLayout1.xmlVMo1#="|tA-):Yl~=4 @cϼy띒  #\3S Yd_.{@uI|^/?;ݛm > gWԿ4kS4KGd4 )f3l +a}Su[cFY@BOzmےzJ0gY+ZɌ(hh!Aέ㞻 bG>%CAtH+pM}n$4.-$HCp45[[l%K] +)JsG#]pveo]oeDh=~{КfXptH4߭Z#>~‰|k6.>–Ua CP6\l6>syo@P]Bqeؽ'ڠކsQqޕrj<4܌''M,Dɸ82 Z})|{).#5RR'fȬa֔Y?A5 f54yHVa/!Z2J c injR<4h#>>t%ڳȸ}Y5 Cx)iF1Ն#xH!5A@Wx"6,ILH oFPPLOdjEaʢ5OU}. K܄qĦW%YYvB#Q3(F4kp~ _8<VV]R%$Ƨ7b* PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!>{ 1theme/theme/theme1.xmlZ[o~/p8XorZ q>$[v$97CR-Ǘ= 9ofH(,x`77lˋ aʶBĮ^n??}ׅEZ l(닋A'""Q6[^Qxj4zbۊEͿn?7PG|bȩ zoM˳|f֓vZEn?E!~Lu]%?&Yc7Qh+DYo42+۵9IL$ lvk5a"I߫ѷƭ)/a?֨GM{IH_vߴR*Xb dH|N)&E[s-_fiqJr.m70F032}%\a8+C6g!$ ):=ưW(T:5薙w,) 拔#,sz[iܽ7 %]rA\Wv`.0"@mbp`6XSE5yj;hȰa]4tڄ[s(JsrGKzN3HI-I5vڅ8åv4mZOBoVfBl) cw[]rD:)hF)K)2޶۫ _*ic҆H*i$9VCv~,Wp6 4XxNQ5vt'oU$LV|5WٽS b`3&ؤm~dVv94S_hyEo+=Krvr|Wd9wtQƯLJ^]Z9u`'Y'B8 xBB3K_<[,>XZYtR!,`TGԌأ*S9{mˇs4Qtg+͗TTfĐ2K ۅ3*@.+$>sdUz:Fq $J&q'+FaR e=·_9<}H[-,^ ekGvJg"VrUt>sTl[]OTvYDXV6t-^T5ۆ(z†}>X^BS1һ̚ *rEdUC[&X^¯'Dݥ[-gfPt?뱕59$!E'@4(Y1CP,Y.k;]^?6s[<j1e!JhGe!=)ɠ}I"áJJd>5Jt|^$'xDxpEQ;$lxRi."KU-Z%e>jC. &a.CjE"1ѸF\Ag_$`AZ؞MmZy09*6},vf3"+@$ 0Ж-u6O PYSO+,1k٤7r q= J>,;v Qx?fXCQ-cJKE<"Ɍ[j!]1/̗4E6e-6N b킼3p]u{8΍%+ ǟ(h,؄rRkҫq6dBxK-ҷXb REA&fbC¢`vR)ގގ6S+8'Zes`-oYE}h4z2wd^e2e$Ý@)ap2c.Io7K"٬gL)[H6YƐB$,3˘\/u8L@3Kq? ɐ.E~\yAO(]h/dȥ p0lџ5P:24 ш>U<2]oT)7 GAۂwxD)鎎̉kF0|2/~}CC2[؛eb2ٚj8<̫1ú2gPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-!K[Content_Types].xmlPK-!֧6 1_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!>{ 1theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] #2PK![Content_Types].xml|j@ 0Rܺc:IH޾B(!'Iza&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!>.!drs/slideMasters/slideMaster1.xmlZˎFG? y FG=Z4xFYM T=YE=_h"%R6J$ ˅ N?2ͮ.=yqʚ45U!dz.<볞*)Gt˜OݐT}1S I4u.9O~?Ky 1٢?c-,}CӬ~׳\&_xE  I"|"WIQKAMhSW-8\\F(T_/h̐F:;2a$%lMN9g$/ʵ0P` ` !H 7\z2a @%S}γ1YR*KD@dE1Bt`G :P4?>/I/|7 ˷gO̿;HyDU|lOi E2d`[hT&҂*|9˳^E$r N\}U߯߿*xXJn8u8uY~k9|9Qbq&Q) rp{3/dv>򒏗H焉y())3d,zb-͹5#G Piͥ\LPK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!>.!drs/slideMasters/slideMaster1.xmlPKS 1_TLM2.0planBH 0 4443( 0*" 4  4 H .?Rectangle 2"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!O drs/shapexml.xmlVo6~kΒ1ItS$QjH?;Rhx}|iX)k290B–yǻOR@$mVy/6?2YMG#_Ԫ%v`W4 xqRc2E7wlM_gRjAI+q*G[AHcfrKh0C%Ĵ5kVTz.UL9a!˺t9rÖ䇽*=O[bn*[cJl2Vni6Axzy14R !g|љ>(jxጽk>X6#֙}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!ebX drs/shapexml.xmlVMo6 x-cE4n`Yh׈B^%YM!Q<|rQ2DMUj}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!~r'8drs/shapexml.xmlXQO#7~`BBrCGz!Z/~ ^UD7ͬyLZWMΤNMV賄:9sЙPF˄_J~ͻj* OKZnl))zըn Mz_%.`Ig)N{֚qn+pUS2Yˉ.Ur2G$޸FuM.> E ynU!;&He»[BF0b 瞥Xu'KI6=!:Abd( x:NBU!A*vN/8= )f(R|E ,9GԫE c>*DQEj> H+.3ULAn%M}2y.SXM,wT}qN? [5QGf<r# dD9?+B2yO6Cf8:C PgʊL'b2Fk >jK1֒@A&3rS.R8g B NEY(h7Pvzwn?Ѧv^Ʝ0ؘ=N%k#)5E[b g&ddH2+Pf`RYIղ_~W5{D{-f2:kҡIG᳒.t6=-nkM5^糒']w1ˬYfu_uxx^p PK!:2drs/downrev.xmlDMK1E!}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK!e˽] drs/shapexml.xmlVn7}/ Z8!6관j>sw+.ɒ\]9C$y(93gMJ)Ð3i*[+\O'(L-5[_&16a MP-d+^c}+"y DՃ| e52y3UhQVYKv[>!V"~&ڋ5 O/-Mxo )@_# K S-X:dD^ o'|XzShjf/[bi|{l9tmhGEL& [W!*x/Еl΁<G袂{42(V C gS{ [j|:N ͭBsV-P_򻩓KJgj0oMP싛[[o)@SZX D >Kp5:;cbZ$p_wLYJ ,w+"mS3w9h[x'vN~?7)@q 8tJhX[LH@FfXN#HF4Mt6XjuZD;JKC'MFTІ̩X-E4| = xu֜HY7UG=ӹlQ;7%~z1+SyHxP.2{X&ҁ*>fmh7H)є뻄#&njV܊~ݫ%(f?^ońNI8Sb'izV .6(A46V8#u>XL =WOn^ 1+ GzV4|m6۪{uR^_`r;$܊[DAB+EPK-! [Content_Types].xmlPK-!1_a /_rels/.relsPK-!e˽] *drs/shapexml.xmlPK-!ndrs/downrev.xmlPK_P,     hdman`  Arial&Monotype Typography  V    V]8Xx  4 N?Rectangle 7"PK! [Content_Types].xmlQN0 #QI!v:`|mDDq(n쀄8~ZQ̘_˕*@ou2x cX=\7v=r9iMf H']Hd.S#wQ_6gȋl;}tt)eU-!lT/STOl<9R~Q&4@Dƨ*j"t3D q>}-^p>rr‘ܼlb!\}PPK!1_a _rels/.relsj0 ѽqCNo^K [ILcX&m߾0XFo;>0xM e`|X}đ I`߽N4aG2$RKIZ)4(M9`ctB{m:f@`3n|O,ܗr޾jxR0T ,0@}WBLǬ5vPK! drs/shapexml.xmlVn6;{mvUl gcAKT"UvdZM oH{a}p8 ͺPl%mU3*.}*'t*2淲ou9Jͺ1_8W*YBTL)5eaiN8TAu,DBլZԲ yro;+FbnQ_XM*G>Ais+/F nb>t}!3b@%ʜԻ8`@=YQij$@C>6-07HrA`*Q c8ڨՒ3$Q8blח |Y0+")J&zV&両{a˚8=7(|= DUnn1=Z$+&.Dk_ R'.T4"S"_ДceJ /'񕩐C(f >-߹N1ŽE] zJ]l2ȃ6WÖA 2&.mq,nXU&oG|\i ƣF9i zxۧ /T} c\ƻYq<O>=ƞ>>xv65~I}(!4h2|*wI J"N _D (!Em r PK!Odrs/downrev.xmlDKK1!\Mfc"*b>ܙ N!\p-H>hg%l픶XhΒ#XOOfX)wk7ebCPwd0L@6wc!MK!ܠÁ;6F8-^VEXKV5PT]5 m rSϤq]J]_ ?*5GLRFPxΌNLn1\OR\hPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!!drs/slideMasters/slideMaster1.xmlj0{ˍq>]SA/=ȱ>x.lM0Yn+eQhr%E:Gwstt|%*\mz<.N[F5#B+%xQs"B٘$8s.ҌIbtΔK3C>zRv{HCurjLq~6z!$1E̽)-K ^WGjIN:u`KBB $͕6d*F(f)9ç , ů0'ʕl6 VB;ճeX"'1` L˲j) 3Y(`89=ai՚P uݝ[WX~!Kf ]Zkg\Y]u r˜zcÉ?uNb͈֠<>Yݮ>߮Kͨv"XksR !y^X겧 |-U*ΚRvz{`OPv0=`kĢN=Ib"6t"oE^ [YbT]ҬJB rpd(`?Td PhXh6Tv:ͼlU*k f{*nXn_PK-![Content_Types].xmlPK-!*8 -_rels/.relsPK-!!drs/slideMasters/slideMaster1.xmlPK: [ PK!K[Content_Types].xmlj0Eжr(΢]yl#!MB;BQޏaLSWyҟ^@ Lz]__CdR{`L=r85v&mQ뉑8ICX=H"Z=&JCjwA`.Â?U~YkG/̷x3%o3t\&@w!H'"v0PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[U>&V] 8@X`x6 8 S ޽h ? ̙3380___PPT10." 0 &@(  @ @  xw0e0e?Rectangle 2P   8$AT System Example - Annotated Timing @  x|{0e0e?Rectangle 3  &The Goal is to Illustrate: Application of TLM 2.0 in a real system Annotated non-blocking (NB) option of the non-blocking style NB annotated timing has been referred to as "1 phase" Simplest version of non-blocking/AT Possible Applications: Architectural exploration Early software developmentbfZ5fZ  5 X`x6 @ S ޽h ? ̙3380___PPT10.4jt9"(9 0 88  H*8(  H H  x00e0e?Rectangle 2P   )Example Block Diagram H L?Text Box 9     hdman`  Arial&Monotype Typography  ZTLM 2 GP"   G V]8Xxb H b\?AutoShape 20    hdman`  Arial&Monotype Typography  < V]8Xx;  H hбo?Rectangle 21p ` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_1_phase (m_at_target_1_phase_1)p* GGG g G V]8Xx H ho?Rectangle 220PJB___PPTMAC11   hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   SimpleBusAT (m_bus)J GGG,  V]8Xx$ H h0o?Rectangle 23` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography P   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_1)^ GG gG  V]8Xx_  H h wo?Rectangle 24 ` rj___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_top (m_initiator_2)r GG gGG  V]8Xx;   H hwo?Rectangle 25` ^V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  )at_target_1_phase (m_at_target_1_phase_2)p* GGG g G V]8Xxb  H b$w?AutoShape 26P@   hdman`  Arial&Monotype Typography  < V]8Xxb  H b#w?AutoShape 27P`   hdman`  Arial&Monotype Typography  < V]8Xxb  H b&w?AutoShape 28P    hdman`  Arial&Monotype Typography  < V]8Xxb  H bQA AAA>V] 8@X`x6 P S ޽h ? ̙3380___PPT10.nt" 0 ~vPT ( ??? T T  xdw0e0e?Rectangle 2P  w 2How to run this example (MSVC) T  xLww0e0e?Rectangle 3P0 w Open a explorer window on examples/tlm/at_1_phase/build-windows Launch at_1_phase.sln Select  Property Manager from the  View menu Under  at_1_phase > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and run6DZ%A C A  $$ ((,,00 4488 <<      A $$4488V] 8@X`x6 T S ޽h ? ̙3380___PPT10.nt"f  0   `Xh ( ? XR X  xw0e0e?Rectangle 2P  w Expected Output (expected.log)* A   X Nw?Rectangle 4]    hdman`  Arial&Monotype Typography  4 Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic & Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path & Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED  (/X <I: b V]8Xx6 X S ޽h ? ̙3380___PPT10.ntDw;" 0  p33\( HzSmM \ \  x$w0e0e?Rectangle 3P  w &Initiator Module yz P  \C ,Group 129"P     \C ,Group 130" & .\ Pw?Text Box 131 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8Xx\   /\C ,Group 132" > P  0\C ,Group 133" p 2\ dw3fjJ?Rectangle 134P    hdman`  Arial&Monotype Typography  < V]8XxB 3\  \wB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 135P    hdman`  Arial&Monotype Typography  < V]8XxB 1\ T?Line 136      \C ,Group 137"  # (\ PD?Text Box 138 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8Xx\    )\C ,Group 139"  > P  *\C ,Group 140"  p ,\ d4 3fjJ?Rectangle 141P    hdman`  Arial&Monotype Typography  < V]8XxB -\   B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 142P    hdman`  Arial&Monotype Typography  < V]8XxB +\ T?Line 143    \C ,Group 144"  $\ P#?Text Box 145 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   %\C ,Group 146" B &\ T?Line 147P P '\ d->]?Rectangle 148 p   hdman`  Arial&Monotype Typography  < V]8Xx P p \C ,Group 149"P p  \ PT:?Text Box 150 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx  P p !\C ,Group 151"P pB "\ T?Line 152P  #\ j%,hD>]?Rectangle 153 pp   hdman`  Arial&Monotype Typography  < V]8XxZ \ jUo?Rectangle 154@ nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx \ Ji?Text Box 155p %vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   Initiator Module (initiator_top)L!0 P2G GG  V]8Xx \ ^$?AutoShape 156p V q  \ ^ ?AutoShape 157  \ ^ ?AutoShape 158 P  \ ^$?AutoShape 159q Vq 6z P   \C ,Group 160" P  \ de3fjJ?Rectangle 161P    hdman`  Arial&Monotype Typography  < V]8XxB \  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 162P    hdman`  Arial&Monotype Typography  < V]8Xx   \ ^?Rectangle 163  `  ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography (   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  'TLM Interface Module (select_initiator)6( 'GG V]8Xx6z P   \C ,Group 164" P  \ dD3fjJ?Rectangle 165P    hdman`  Arial&Monotype Typography  < V]8XxB \  uB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 166P    hdman`  Arial&Monotype Typography  < V]8Xx  \ ^<`?Rectangle 167 p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography d   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  -Traffic Generator Module (traffic_generator)r. GGG G  G V]8Xx \ dd>]?Rectangle 168 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d``>]?Rectangle 169 P    hdman`  Arial&Monotype Typography  < V]8Xx \ d`>]?Rectangle 170 P    hdman`  Arial&Monotype Typography  < V]8Xx= \ d+`?Rectangle 171P`   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Request Queue (sc_fifo)J GG G V]8Xx> \ dTG`?Rectangle 172P`    ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Response Queue (sc_fifo)J GG G V]8Xx \ ^ ?AutoShape 173  \ ^ ?AutoShape 174P \ dY`>]?Rectangle 175P   hdman`  Arial&Monotype Typography  < V]8Xx@ \ Pb`?Text Box 176 2 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  top_initiator_socket*  V]8XxB \@ Z?Line 177   6 \ S ޽h ?o\\\\\\\\\\ \\\\\\\ ̙3380___PPT10. ""b 0 aaBBd_( " d d  xP`0e0e?Rectangle 3P  ` )TLM Interface Module  x   dC *Group 35" $ =d N`?Text Box 36 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   >dC *Group 37" 8 P  ?dC *Group 38" p Ad b`3fjJ?Rectangle 39P    hdman`  Arial&Monotype Typography  < V]8XxB Bd  L`B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 40P    hdman`  Arial&Monotype Typography  < V]8XxB @d R?Line 41  x    dC *Group 42" ! 7d N`?Text Box 43 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    8dC *Group 44"  8 P  9dC *Group 45"  p ;d b`3fjJ?Rectangle 46P    hdman`  Arial&Monotype Typography  < V]8XxB ]?Rectangle 53 p   hdman`  Arial&Monotype Typography  < V]8Xxx P p dC *Group 54"P p 1d N`?Text Box 55 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p 2dC *Group 56"P pB 3d R?Line 57P  4d h%,@f>]?Rectangle 58 pp   hdman`  Arial&Monotype Typography  < V]8Xx d ffo?Rectangle 2p    hdman`  Arial&Monotype Typography  < V]8Xx  d F,f?Text Box 4 J`D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  (TLM Interface Module (select_initiator) J) 2GGG V]8Xx  d@ Z$?AutoShape 6 v/"  d `f?AutoShape 7: b &   hdman`  Arial&Monotype Typography  {nb_transport_bw" G V]8Xx0x P   dAC *Group 59"`H  /d bBf3fjJ?Rectangle 60P    hdman`  Arial&Monotype Typography  < V]8XxB 0d  LfB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 61P    hdman`  Arial&Monotype Typography  < V]8Xx]"  d b,cf?AutoShape 63T s @ 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_method6 GG V]8XxJ d bjf?Rectangle 66P  * 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  send_end_rsp_PEQ& V]8XxZ" d bwf?AutoShape 78D 3 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  initiator_thread6 GG V]8XxM d bLqf?Rectangle 79 g0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  waiting_bw_path_map& V]8Xx d \8c?AutoShape 80*3  d \8c?AutoShape 81   d \8c?AutoShape 82b  x   dC *Group 83"eB -d R?Line 84P P .d bf>]?Rectangle 85 p   hdman`  Arial&Monotype Typography  < V]8Xx x   dC *Group 86"c=B +d R?Line 87P P ,d bf>]?Rectangle 88 p   hdman`  Arial&Monotype Typography  < V]8Xx d@ \8c?AutoShape 90*eD + d \8c?AutoShape 91c  d@ \8c?AutoShape 92*D M d \8c?AutoShape 93 s  d@ \>?AutoShape 94: <  d \>?AutoShape 95g: : : d \>?AutoShape 96&: < P  d \>?AutoShape 97* < @ T B d  0fBC+DEFQRUVW8c?u+ @  28ryU;@+Freeform 99E    hdman`  Arial&Monotype Typography  < V]8XxE d PDf?Text Box 100&=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  enable_next_request_event*  V]8XxB  d Z?Line 101Dc; !d P$f?Text Box 10520(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB "d@ Z?Line 106; #d Pf?Text Box 107a O 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_fw*  V]8XxB $d Z?Line 108(  ; %d Pf?Text Box 109=0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  request_in_port*  V]8Xx= &d Ppf?Text Box 110hAq 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  response_out_port*  V]8XxB 'd Z?Line 111vkB (d Z?Line 112;-u5< )d P g?Text Box 113YH0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Initiator_socket*  V]8XxB *d@ Z?Line 114[+6 d S ޽h ? dddd dddd ddd.dd d,ddd,dd d,dd ddd d dd ddd d dd ̙3380___PPT10. ""C 0 =C5C..hB( Θ@zSmM h h  x؉g0e0e?Rectangle 2P  g "Target Module 9v P  hC (Group 3"P  ~   hC (Group 4" " )h Ldg?Text Box 5 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxJ~   *hC (Group 6" 2~ P  +hC (Group 7" p -h `g3fjJ?Rectangle 8P    hdman`  Arial&Monotype Typography  < V]8XxB .h  gB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 9P    hdman`  Arial&Monotype Typography  < V]8XxB ,h R?Line 10      hC *Group 11"  ! #h Ng?Text Box 12 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    $hC *Group 13"  8 P  %hC *Group 14"  p 'h bPg3fjJ?Rectangle 15P    hdman`  Arial&Monotype Typography  < V]8XxB (h  gB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 16P    hdman`  Arial&Monotype Typography  < V]8XxB &h R?Line 17    hC *Group 18"  h N,g?Text Box 19 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx    hC *Group 20" B !h R?Line 21P P "h bHg>]?Rectangle 22 p   hdman`  Arial&Monotype Typography  < V]8Xx P p hC *Group 23"P p h Ng?Text Box 24 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p hC *Group 25"P pB h R?Line 26P  h h%, g>]?Rectangle 27 pp   hdman`  Arial&Monotype Typography  < V]8Xx h ho?Rectangle 28Z:    hdman`  Arial&Monotype Typography  < V]8Xx` h H?Text Box 29:D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  "Target Module (at_1_phase_target) J# 2GGG V]8Xx h@ \$?AutoShape 30P1" h bX?AutoShape 31wX c   hdman`  Arial&Monotype Typography  {nb_transport_fw" G V]8Xx0x P  hC *Group 32"P h b$&3fjJ?Rectangle 33P    hdman`  Arial&Monotype Typography  < V]8XxB h  d2B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 34P    hdman`  Arial&Monotype Typography  < V]8Xx_"  h b<?AutoShape 35 { t 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  begin_response_method6 GG V]8Xx"2  h X4J?Oval 36 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  bmemory, V]8XxH  h bc?Rectangle 37 u0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ~m_response_PEQ& V]8Xx  h@ b8c?AutoShape 40X   h b8c?AutoShape 41L h b8c?AutoShape 42{  7 h Nl?Text Box 430(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography   memory_socket*    V]8XxB h X?Line 44K+9 h Nlm?Text Box 45 Q 0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  nb_transport_bw*  V]8XxB h X?Line 46 v  h@ bZ8c?AutoShape 40cr w  h@ bZ8c?AutoShape 40uw w 6 h S ޽h ?ohhhh hh h h hhh hh h hh ̙3380___PPT10. ""I 0 HH88lG( zSmM l l  x|0e0e?Rectangle 2P   &Router Component Gx P  lC *Group 56"P     !lC *Group 57" $ 3l N?Text Box 58 p   hdman`  Arial&Monotype Typography  ztlm_initiator_socketC V]8XxR   4lC *Group 59" 8 P  5lC *Group 60" p 7l b̓3fjJ?Rectangle 61P    hdman`  Arial&Monotype Typography  < V]8XxB 8l  B`CoDE FQRUVW3fjJ?`8o@_`oFreeform 62P    hdman`  Arial&Monotype Typography  < V]8XxB 6l R?Line 63      "lC *Group 64"  ! -l NX?Text Box 65 p   hdman`  Arial&Monotype Typography  wtlm_target_socketC V]8XxR    .lC *Group 66"  8 P  /lC *Group 67"  p 1l b`3fjJ?Rectangle 68P    hdman`  Arial&Monotype Typography  < V]8XxB 2l  XB`CoDE FQRUVW3fjJ?`8o@_`oFreeform 69P    hdman`  Arial&Monotype Typography  < V]8XxB 0l R?Line 70    #lC *Group 71"  )l N?Text Box 72 y   hdman`  Arial&Monotype Typography  msc_portC V]8Xx   *lC *Group 73" B +l R?Line 74P P ,l b|>]?Rectangle 75 p   hdman`  Arial&Monotype Typography  < V]8Xx P p $lC *Group 76"P p %l N?Text Box 77 ps   hdman`  Arial&Monotype Typography  o sc_export  C  V]8Xx P p &lC *Group 78"P pB 'l R?Line 79P  (l h%,>]?Rectangle 80 pp   hdman`  Arial&Monotype Typography  < V]8Xx(x   lC *Group 99" ^ l fo?Rectangle 4nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  J" G V]8Xx l F?Text Box 6 vn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography <   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  Router Model (SimpleBusAT<2,2>)L 0 P2GGG  V]8Xx l \$?AutoShape 13  P  l \$?AutoShape 17PPP   l \$?AutoShape 4601P   l \$?AutoShape 47ppP `  l N,?Text Box 50  K nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  dtarget sockets (2)" G V]8Xx  l V?AutoShape 51   l V?AutoShape 52@ c l N/?Text Box 53  nJB___PPTMAC11   hnamd` Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ginitiator sockets (2)" G V]8Xx l V?AutoShape 54  l V?AutoShape 55   0  lC *Group 89" @P l bd?3fjJ?Rectangle 82 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 84 0 0 B  l XjJ?Line 850 0   0  lC *Group 90"P l bH3fjJ?Rectangle 86 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 87 0 B l XjJ?Line 88 0   0  lC *Group 91"P l bV3fjJ?Rectangle 92 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 93 0 B l XjJ?Line 94 0   0  lC *Group 95"P l bD`3fjJ?Rectangle 96 0    hdman`  Arial&Monotype Typography  < V]8XxB l XjJ?Line 97 0 0 B l XjJ?Line 980 0 6 l S ޽h ? llll l l l l l lllll ̙3380___PPT10. "". 0 ?.7.p-( zSmM p p  xdL0e0e?Rectangle 2P   #Expected Timingcx Qv)0 pC *Group 29"Yp B p VԔ?Line 4}3}0B p VԔ?Line 5xl3xl0B p ^8c?Line 20^8rl^8B pB d8c?Line 21brlb: p Hu?Text Box 228*e^8   hdman`  Arial&Monotype Typography  ,nb_transport_fw(GP, BEGIN_REQ, SC_ZERO_TIME) - -G  V]8Xx  p H}?Text Box 238*3Ůf!   hdman`  Arial&Monotype Typography  hTLM_ACCEPTED (GP, X, T)*  G  V]8XxB p ^8c?Line 25 (,l(,B pB d8c?Line 26 3k-l3k-; p H ?Text Box 27ݛ*'g+   hdman`  Arial&Monotype Typography  -nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) . .G  V]8Xx p H?Text Box 28ݛ*\,\)0   hdman`  Arial&Monotype Typography  q!TLM_COMPLETED (GP, END_RESP, T2)* " "G  V]8Xx" p NP?Text Box 41f= Q &0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8Xx< p N`?Text Box 42Qhx)50(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ~select_initiator$ V]8Xx7 p N?Text Box 53bv50(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  y SimpleBusAT$    V]8XxGx QR4&t)V pC *Group 28"pp B p XԔ?Line 31A:)VB p XԔ?Line 32lA:l)VB p ^8c?Line 33EhFBkhFBB pB d8c?Line 34EpCkpC:  p H?Text Box 35)>JehFB   hdman`  Arial&Monotype Typography  ,nb_transport_fw(GP, BEGIN_REQ, SC_ZERO_TIME) - -G  V]8Xx   p HL?Text Box 36)>B8f +G   hdman`  Arial&Monotype Typography  hTLM_ACCEPTED (GP, X, T)*  G  V]8XxB  p ^8c?Line 37O `lOB  pB d8c?Line 38SQ `lSQ;  p Hp?Text Box 39 &*CK*fO   hdman`  Arial&Monotype Typography  -nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) . .G  V]8Xx p H ?Text Box 40 &*|@PB%\IqT   hdman`  Arial&Monotype Typography  q!TLM_COMPLETED (GP, END_RESP, T2)* " "G  V]8Xx7 p N ?Text Box 54QR4Ì((80(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  y SimpleBusAT$    V]8Xx p N ?Text Box 55+cR4&t(80(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  ^ at_1_phase$   V]8Xx" p N ?Text Box 56[=EQ; K0(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography  d& & & & & ..& V]8Xx6 p S ޽h ? ̙3380___PPT10.uk" 0 }<'(  A < < N*?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx <  r0e0e4?Rectangle 2    <  ~LG0e0e4?Rectangle 3 0   N   V]8Xx6 < S ޽h ? 3380___PPT10.1?! 0 D?( H( D D Np?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx D  r0e0e4?Rectangle 2   , D  ~2w0e0e4?Rectangle 3 0   f- typical things   V]8Xx6 D S ޽h ? 33" 0 0LE(  L L N$?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx L  r0e0e4?Rectangle 2   2 L  ~4.0e0e4?Rectangle 3 0   l- aux processor is TBD   V]8Xx6 L S ޽h ? 33# 0 `Y( h ` ` N|F?Rectangle 7_ %    hdman`  Arial&Monotype Typography  n*    V]8Xx `  r0e0e4?Rectangle 2   F `  ~I0e0e4?Rectangle 3 0   *Indicate which parts are TLM 2 vs. SystemC+ + + V]8Xx6 ` S ޽h ? 33rP0E]e6:A"Oh3Mw Oh+'0 (4 X d p|AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne88Microsoft Office PowerPoint@P@h>$@@y)&Ghg  ,T%&" WMFC9 <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesT'Current UserSummaryInformation($PowerPoint Document(1DocumentSummaryInformation8systemc-2.3.4/examples/tlm/at_1_phase/docs/at_1_phase_example.pdf0000644000175000017500000017573614342422106024670 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xTn1 }cbBĹ<Z!Jj;R(^nn =$Zȱc{Vg桱Z ~WY6.n6{1Mu>Esל_9 %}קQ)I3S:qMQ +j·&#{CEe7HP˕xu,&f61pJ RRDjȾ%-1x Q~lA)ch;PɁRen)K!cg'N+oh?R E g~ˇO<(ٴj&SvVE]ڦ8s(Jc /+WrVY1vhluF (3zʜl+M_[fII_QG`2i}-tVf QC; } ;ߦv3qP.Xe)AEO\0.ovXfU> stream xWKo7F{_A Go6j-ڠN-[%ٖӦCC+-X g΄$<~21_u7UlߡG%YwE&s=/׻ 4ΒF)&ɰ~=gF--z]7߽dN9Pwfbf] քY ()Z>ٓB9z WlY3 tϤo" \E7eePEӖig. f@Y!CY[5 @}"!9["GB<~tGCJ UC7i! w^Z00#=p9`AXcIXZl!(Yd,,F( i B !=,{CY済QfYu=!|ꄲ2B=^Yؚ񪲒m?3̃?p7lQ$ ULy&aV?ae<[7Jf~cUy5%ȦMdlTcm 1*\NL*rbhxo$=%'hOO֯KH u8.j+qۺPk,OOl=V2ضD-hm_I++B␂p&!9qn+Useq(?qzv Wݘ5PXC`O9zN]uUknaCWsUY`Pzaa^T0rf2%b|A[Dzq/6&:endstream endobj 15 0 obj 1347 endobj 27 0 obj <> stream xXYo6FF-}`YΐFx>Ew\?3DIk 5P<}3J ଺1J>gy:\\-<~}+P{}Tljwsb\";_p^ *z>ԪVνVy7媊ON%Jʢ6N-_1hc & Ϩըgo4[j Yc}}Zs\}ꑭU4F8RC}P\YjH HlɇMkh5G5+"?,/2'PI0)4k2RЄ d,#ov>>?hF#C^b^X/@4}8m[Iufґ3YD)Ymjv  rU%q X.~ޣ. :-谠*mA?lH[tg,XtS;eY_B,~ǜrοA-$+w u~q܊oYnQR<pv+?LgڄQ{q琢w+[ShJ{}^[H> stream xUj@}\mh( ũq괖c;1wv)F))ƶ8ٙ3#" Ix0U8'_'dm^h3Ȣ$^럘M p[O۳brX &^ Gǃ0:rبȝ[.UgeUx/Iœ+%פd8>x)&IU_EəFKKK40j-)덦fT0(p(x z )tE',p!%eoL;fmZJ n3⎎ե>-]"|?ZkK SBI+:6, 버~UAdɉ,؎ʍз*_yFJ R H`[*nR`BDBt ih{{F0 D]"cA;]i`ah'(M90Q.>xCD25"d{6/mKZ=UHH ^whX,PWY:@oݞnmN͎6ubY]9Ѹ#$9{$2Hv LL}Оmp;Ĩ endstream endobj 37 0 obj 621 endobj 42 0 obj <> stream xXn7E_+q׀h|CEu8(p,9raEp'/R:Imc8&Cr!75g j~8W7RnwpV٫U:su;.7uqpd~~&";cՀ̎n熃6~߸1Д|^?/_K8|=0?]m%x^mo9Ӡ0uY|J[`8V1Qh{5n\s#)u. 脻, gˮ5LYG`۴J]C6gDL$Wc.{ׄze}skDح9ȣÃe4P̛")1l9784kR'7ϸ.s?#\PNH|ȷ:nC Bu;+71pmyGܱW9\H0mdyFKcLåJډXL4f=R-9Ƕnp{֦K>Vj $~:#4'$tEhT~ձ6FHhE!)O %}BwEPR mqDB .F$<$gìMazqͨT.VOE]z% f< 23N f_GB`Of s=]1jOi1Lᮐ"u$2E|?!.[rn"!$P2 !"r {#s1wBwAItGH8#ö)5ܶ$fс7Ȝ4ݷXk2"_o^:"IG?C`#jZj ͓V=3vl,r{㼶N6} s> ,[/bP>cѲ/xjvywOp%4ۑ.w/)ˁKcDflw zuARD>9Љ3LDŽzAmês&'"!ajb#4d,P"d9ꑨcfG >#]/i2Cg!ⒽOiCnXendstream endobj 43 0 obj 1406 endobj 48 0 obj <> stream xZ[o7~?bwQo܄Zx(UI-'w^= R g8V8!0XccD f SđGRS9n*Dp44UF빋ɁL.&%*a?7KA'`;3QcT)5cU"x0u#d'-H&({(5.Gaxj}Ƃ^ZaP]iLSuSeRp]G1U8'"4֞z,Цor uU]]iz KC?D*Nr*D6 SҾE%PHr򊪦g%">f= y;kdC2S?`G ]N~/Ǭ{-bV.prW~}- YH%e8&~8x\)D̷ڨ3.5s;3;Vr=Ick Gx RP3@7cd1B-^q&_ccY8e8GCծcG8@") P eg`¥׆Y2_LZξS؀>TFϠ[>9TEZJ?7$mHatUʯ/^> jpgwLooaf#>?G%cuCd%7Q&p;çf;-@6:_Dƍ1,z)hve#@C,SK".&^2s 5~ֺwᭃ'W e"4%,OaE_ egǙ }y.c[8Sb2>AgOC ^lol1zR3͜;t0f6bɬ*fwP#G Sef,]܎he),.6tE7zYH$-Q~?F}8B~%BGk:7h_MWHv)B60! FVE go!YF #mWfi[ƮehEӝ~7X any;r41!MUz|NmR䮖[eG[Tosҕ\8]'%J1q_^G-NއA]GQӀ{6K k(v88[y3Uendstream endobj 49 0 obj 1794 endobj 54 0 obj <> stream xYYo7 FhǙJZ(  ) ñ'^ovҌٕmmGRE˙(-Frg$C6(>k~מ7Wi2g}ܜk9.aE|6 b&pl:{hO8o%0,v!hR_]k%v &Ӫ;G;M3J(aj4Vk/dwP'=5S\_Avgq#@ s>nP[C9mQjnj90pQZ& II:/t*FvIJv[sIQ^$8IW=†H{e„^ pD uy 'b]Ƶ#_UBlGQF8D|V0"$Foς 27 YI:(1JIZGz=:02]&] `M0) 6 50gh߇`´v@Af %IIzUI KD@Iak(Lr֛Vk/HT ;;"qN"11P HnY9sNف."ZD96 I^ga1[0p1:g1SL,1N%q"5t(3ZkF/>G?`gEvteBaKn6/F ;=nFt=(v_FǙI<ƠʸtQ!T] ɴ;=M=Oim~Գ<#c:Tgݧ 1TA6sBbEb`%EX PTX!^5@4*w 8g]qtjwcU<eZ,ըd}&+OB頥2DW>kTC/dN;B0T0ݻB㊴!riKRcur;DfiݷTd31C=ejtVo0R` `tD ᙵ=]J.bVs'K @1{5Huz<ڧxk :]į"-F*op69?s@祬:T[B5BLOzR賋ƘG魥/)+(R=],I Ƌ, 9mN9fTĵK}g\HsO$&z/!/9 w] api;Iʓ 4U.Z5Es4XU[K=tkr> =!%5~hα=gċ;.v-u%#.>c^\ty33Nk<:;pӝ>Ժ-rt ٿg (i5oZZ@X7 8{Ucm0^}g IJZuІRXp1Ca!⣩ Q: x7 ljl|3 a0PiMiz2eW=ox b0|<_ba㝈xO3ɎdeC/h>ʊdeXGGYl `Q> stream x[Y]qF!t>fqk`ðK@@{~a<`FׇbE p}{xu-QƏC㋃goL w>y89^2hTJ'/1Ф%^ kFfu.u KDwk9ݘTKǿxoO?6T\m*swۉLD/o.;ӉNef~3kf=Yu SIk-Lj- i-/uo ~KǯK5_A.?Z>|3\sO>yB-DD$Q,D=Ycm ܹ 7۪AH n]5Ohܷ>o)G ϻj@&(] l_J(LD/'z=whߝ}agҜ $GlNTl_%})߽m?&ƣ5lOO%R%:e9CVSC[i?&6jdN臛+a]?0]4ʭ 﫦mf L2[m*rZ^m.n5WU1|2S.?| +@U"鮩ӟisҭ:BMjͧʦݗ󕪐ͅk#N0qx_|BQKs\>q뢹Ȝ\ ߮U =_w{\*YK,A[tC9l_.R@0˿͉Zʐ8)q.Km{_4 H ] ǤH"Mꈮj4(b !ZŪ FK ^AH^DJ1#^կga?.E,.}~[Mn,wfָl#El1E`}À9I@U="z+ i!DXPbt|Wy_e[pFX{ߞiK MwJ_M$Lx${ɿd9ᯯ@HG^ZXƁoM k{l3pT3. NsCcmOR?p*uq{'jwr) ^Stl*g,%dF*cmi=\w݌$+ԏXcu30uz,|K]-ja9o\Ӣ4R6I_-zg;Y.#oijWW}𵃟/o@qɷp6,L׉Qز$1|goom_)8Ck2QXoT4B~q^2Zh!(]㛡?qV4="lHeniI6<`g ]%LwL*Dռ#*b{ŤDv~+zZ=Y:x8' Rb#`7c40s|N\X㳧N )WgO^+CX{& RF;# /b@R2[3=5f'8cC) àsEd"1xT+za=T$3k0Q*"eŤ8)H) ),QxP Tw ^TYB/az`"7C]VX1KZn%D88c[xO۞61xcqg2-[awYLJjoqf`pfafmGA <4(yROQ|YHÄi{| (4&`XSv6e%PYl%+Q.=9Z 4pԄa,R#.* =$VʵD8;BWAHg{@;* T2B ŤfGˉ<](Y;8C"LVط1! ,,RN7u}2J"ܥfOdwqb@ZE;WCaCo Α`n>XS~dڃ( YLJ-k]08{X̌&C^_,Ӽ sMbE2};16X*HG1<31CyCJjU+We͐)Pd6Y.Ir ^ fk90g,-%-s_ 3! d!!^N|,+iGXCozRD6Tbg%tej<;v&Q,&%O6>1E!YFgHΐg%G6&!ed9~:St\qWvO v&?hn32) )=[S9cޏTP4;*,F˛t#SxŤW8J908ë^]XAECPgVtKqĜYSm7 Ҳ%처׈EXAb]k7&kX֪_{yӈnj3uq #~C^֠6_wY(% #YQ&*N*xjwɱbf#6qƘ;|2ߚZW>/t;‹兩gqWۘdhmjG{c O.qhЬfopitr^5C{ Oi/;b)߱V{sKxB!\WteuລbMq:A^ |Ej2M.!$A֦ i|s\=-qw0ǧeXv~٫;/%!#EICp9 ]m5{`4ǃO\p1 ܋uQՔ eFtg>9ESendstream endobj 61 0 obj 5067 endobj 66 0 obj <> stream xY[Vc|P6Qe۞ꮯ.-?H=ɟ ]l\ <|AwN~_?΋_gGlnE{<&[5& KWQ ѭ"`SN `/?gyI_z5->uV,uǏL1r%4E;rw|4Áh32\~=+_Mo7܆dB?vUU|)@6s13m,w8ǭOcHH,vT}E]ce{XMku%GiEO*:frO%#=!>`2Ŋaep0xO}V"Y?jwgk/Ԫ={p&,V lħ8=ȅ_T njVt]›%X׵{ FQX'E"T:qɻR!7 )_uఢä ]&dzW )LAdfx922liVŗh|.sNR4d=%=LA*'m3zpUCZCy=:¼J 剉{e'aC1`F8r]:985ƜmFA2*Dv7 6] b[{u[``p")TI`'8<1!Zh^ ,bb#}D)!mE5"pX<],J$C.O/Hތ[fSjk T;.8/X"QJa5XeD.2eȲʆxa% btJ0`{@.ۀiؒ4%!s*vJYnšД ,:vuD>sendstream endobj 67 0 obj 1926 endobj 72 0 obj <> stream xWY\E~0%B^ "!Cf|P !d{&3?v{zfZ\몳U:$)ٺ;=# ~~Пt |u۽Y-.ՁtYw$K+B7c-gŭiup [W4 /,'!BӀwj~~F1i4t5ͤ/ ]Fr /, 8{9.. woVVMuldcTl y|,\E͵ ʝVc-_F*R qTFLґ2b+ngɦ|N kA:=t]f tFKJ]StJ+=|yTi $1rejFM^"HIゔSi"`JeNH c&*aX2".~%abGk8>r%4cϘd†15S*4qXu&+Ǥ%VKАhޝj 7qVCbއ28ߞP(f5|Tddz.D ^aG7ca?@AMĩ&P܄> stream xQ,Y@$,&$3;G""$ޜ\ȹNSݳ3s7 "a_3=;gt.q_WxᣇNuy|_:|Pۯ|[6|}ί|AcW=m [/~cgy?yr^>먜3J"o3e3`D,V LIJ0˪êD,fX0j fX0˪D,LIJ0˪ªD, Z>,UD,̀xN΀UD,UD,UD,UD, LIJ**0j&XM0j1r[z71*׻UfZ%ڞ,+=sXfYD,+=s:s0 mO,VYVh{0 mO,+,+=LIJB=7˪ =7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mOL@=7*@ʹ =s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 mLLL,+fY=7 m/YVh{AͲB zn^sjY=^}6_g3ƬYz;׺|[;ޗ8X!'kz |<|S;O?iltձien>_Z׶-nGlKSz;TǿZKlG_99)ߍ#Jcok9~[Y1NK[jsosu-z3emHH?8n:Y1Mٽu%8{8y52-ze.k1gmuoyYx??2})84.9^h|;mmq<\j1?N}ǿְڼ=X+xO9w~ܞVFf_?yQƜ˘ݎmuxko};ն;\e#b{g\/xOc|mr/e5:pپOv}z>&<\mƲQm}2r}gjXV :Lȋ::LIJ0˪j j fX0jU yUUXV V &bY5XU**LIJ0˪*aBJX%LIJJX%LIJJXL)UD,UD,U 9dU`U`"UUXVVLEV&e5jXV*׻ ys1>8>nbU퉞ih{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{b=DͲB=7 mj{큞ih{fZXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB zN=7Ӫ=7Ӫ=m/YVh{AͲB z.V ^se\|o{,k<[.m}^g]6_V\ߩFݷeѯs\o+e˩ -+>>?c?ow/_'S'/u5LaY}Py?7^lSǶlsov_ >o/m8p"~!W,QsL2y=\|`_oֲs=~e䴜IvL m'[Zy]?m4b=\sU\i`_NM#k>?}f Zp4lw9岝=ugO`n}C~ߨ.}0!ݯѯ6mǮ}T/=OWZ5ϣtq9eys11O9V LIJZ`aB^daa"UUXVV3L]V3fe5jXV3LȳLIJjj0˪„dUaUa"UUXVV rU*a"U*a"U*`BNY&bY&bY L! LIJ*`B.`5D, VLIJVCfBfznbU퉞ih{b=DͲB=7 mO\'ڞYVh{fY퉞D=7 mO,+=sڞh{fY퉞e'z.VmO,+=sDj{퉞e'znڞXmO=sDͲB=퉶'znڞYVh{b=DͲB=7 mj{큞ih{fZXm=s@ͲB=큶znYVh{b=@ͲB=7 m\YVh{fY큞@=7 m,+=sh{fY큞ez.Vm,+=s@j{큞eznXm=s@ͲB zN=7Ӫ=7Ӫ=m/YVh{AͲB z.V ^se\|o{lkvk̘klJھs`|F;~; 7ﹷ톂s*{-}6i>#\죦w_fG|Y<}ye}>8n3y/3Zgd" X-0˪êD,::LIJa5D,V3LIJa5D,LIJjj0˪ªD, **LIJJX%LIJJX%LIJJX%LIJ XLIJ XLIJ XLIJ**0˪D,&XM0j&XM0*׻Uw3r[z71*DͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=sDͲB=7 mO,+=s3mL@=7*@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s@ͲB=7 m,+=s3 ^s3 ^s3 ^se,+fY=7 m/YVh{AͲB znYvg_zR|CAl7L n(⎂; te>iWR~R~YK{R/ WNJ{|EQh^5߹m+7zz~xi_Z ۉʶWsbxIAaendstream endobj 79 0 obj 4280 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 35 0 obj <> /Contents 36 0 R >> endobj 41 0 obj <> /Contents 42 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 77 0 obj <> /Contents 78 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 26 0 R 35 0 R 41 0 R 47 0 R 53 0 R 59 0 R 65 0 R 71 0 R 77 0 R ] /Count 11 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 23 0 obj <> endobj 24 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 25 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 85 0 obj <>stream x]Ar0=ĸʥ"T 0 \,Px?Er tzyM?]m>j{o֘:6ǽ9|_bB]ǥ/L~Tq{sJyYJS+cH껂M]$O}I:H5R")SAK$ DҠ;O%> endobj 31 0 obj <> endobj 9 0 obj <> endobj 86 0 obj <> endobj 20 0 obj <> endobj 22 0 obj <> endobj 87 0 obj <> endobj 30 0 obj <> endobj 83 0 obj <>stream x|{|ս9fMټ7汛%$C^@B\H @@ABV,ZGEWikms FL-^Qj(ע"93?Ι33|9 !#چX4cN 8[w@^ !|ҍ|ןT-Xf"o"$ԯX}rنmzNt,Ah\~0GHyk6\~zx*׭#$} A'Comej{\ؠ\O/xڡ}B!Gf.ξ7Vd_3w!t=Rz7A4߮Eг5INt/z%oF;iQ=~EBblXWͻPG=q=Ьbct6,`eˬcJ- F7̾>^FkB;gaS-0:݌F/|T[Oϫ:AסKGD0y  r#/ߣ}-bng `C [ΰꁽxXgm5n z@bW+{J7&%Xk|/z-}=ƿÓn^Ӹ4(ǹ7MyRg њH"T^V,).*, }ޜ,;tm Y2 zV<2ÅkO&eoԟ@5\P\礯g&-hl"/ރZM k|[gԇVW&2zzٗh9RB߽Gk 4.ӕ=:=z2SiiA4L0ͤJ7h7;džo c)Ȫ@8!4&4 7n)qA3Z4z/B 6ౙ~_Ӄj|8੯jmcv'% -n:aw4V}ݗt'ntxGs^/k^CqJ1YEyo h_o}M0S;}} r'=]tnJmw8zۯ mvW#Xɣ=]ӣ@Esꦏ`: [K]h:M@;NԬsO%|s3=ίUk|g-;Z=;zm[;hꂧ=q'rcwӏ' y%7]=Qg3PC ;Rwҏ+1 ksv˔ kcaA E@ s0w {}f hB9Ktw@QGJX=ۿC%__6'p± 7Ʒ-YL0'Z>{;, _mtiՔbӰ'd';44tɃ{]|ɴ!\j#\>Ȉ琌6zzAhhAF3:֑Fn/g6SRiifԇDxh.xccS2{:є (C E1|%ZLFEe5An9e'wNqdgAr $8Ơ, 76 fe``3*W/ᕞ 'Pn{vz4{:R1vot܈`ɠͮwg0P`HlFJT \6*M;.QSL{{Fr^}}-V[8* @à:?nx i-7y4;阻x.3ﺧ}O==d~;Ovx?i>qhb㇪z+䉱*o=II11mN"CEU}H wzÑ7ç˟Vspͽ8,i}i7h$Lwp엲v bp^ͨ +ుۖ^X=et%}Ժ۶Ƭۉn[oFfnZ2{zB كxo fA[f"x9E6^_kElܳnT]u{6śas{-PlXMiA0B81>?cX'!,AqƐNz%Fbqvc9jYY<>O'2P[gCŠ"r~ 2T4i\ H0<.u 2 coM̈́o_F 9? ZVZK !܆Wi}nc_LIYOn^g0MF@o5-!EcA XuhTD-~h 6%?X}לy:!OIv;ޠq@sa2gg*7|[s6Lďzs@Dz:,7~#ߑņ< N$٫3FP0Y0izZ"]%,Z rAʶU^qgW.Mt>07pi4dK?T?q{'=[WO^,uo<9ؔm0Ot=AiKЋ (x]0ˉHd9-hq{֠c j1ª#aʛG:6cZo0g"kuv ؀Excb`V̴WMAWd0‡ zZKe kn6 D([(car7j`,M????}߶3}ęޝa3Gw^ x<H9r<4#_ 2 /<G4}aTF(Zm$-axF {$FFjk++ 9 gUWV8`"\m=n;s 7}V%߹5Q^QoŻBe-C떿vBv݃ц(^aBbS1$ۭ9ًFع 4p)Ht;GR9Epqn$+.iL -`pu-֭Vju /1eeaS:Dr@-"aB* B!GT L`h=t n"@1:&ΈR]@ =PpNImNj[?^xa]mߚP]W{]XKN#c"`B6.1`V[0 >b T+ZJ FYbҨx %@UU`zU!aղhyht."Og3 TEicK6v8pT y9EV+V"@XP))!c(IDxA6ޗTIUrMG%~?(- |iI( 1Kq|n^Jt.dIˍx TnXE-ZuU}1$ _@mgLV=Kp%V)b_SJ7gθ>:Axc-W%: t,z>Y98c405^&wl<{'M*QWJn%ydl\}Y|jt >IUeE7$Ֆ@o9a=|0p ﳟhx4,Rӥu8k8Nq;&ӓ!b=4RG(U -f!ngx lo7 8Kv FY2[@%\<=Qy8! s.44z-5VgyGj- 1״u> Awe2debxy 9 uu.Kk/rkxF^ڌR0>|q s9 `KbBo;|ur!l lٳؕgFgNR0`UL=5ؠh4aMff%ӫYIdzE(aI#\{x8 s,-ċ+`Q`1'  C6A[OE?WO9T'S#B|%o_t<8.K|bK/[sY˗X5m3fu{KpfEɥmlmٳL2,134fMhՊjN,{MuSrUЉDY/qƦMqhRZ)0ϧZq^4AJz0*]p͓f<ώ~bEEjB[o"ȤOV>vG VϬ!y5MDN2~(/sV+3{v]M˱ =Z!`O=)Cܓf@ϊz q$̀ʀm<꩑ǀu2 Z<Z *0Xa>sh)_~C5W˼4v]>Xy|Mn2 =b8f!LS nov}OPgʽoʳlF3q)&vj[mٗUkUo$%(g^xȬq axWX`/ZYiH`h& 5f~t=LƧ؜Oi#Oqhm}z5. qyӨkA;`w%ǒEo۶=2sn^^^Q20ȣs3F{~`2_sPQ̀HDz]n m`-SkɊ2ͺVCs<]57kQ2au}kYYYL!7dޜP6''7f'wZ})2xcT3'GO񫷓QimrJ |"xfK&]*F<>40OhPAw;Ni&sTNu'#u}K'B9>å%8$T Ij*-JBJEԏ&N4yDG3-|B-Z,M-MSi=_\哫*3gU#Sz]xm f0)-dhGhAo 8BCBVCS)A;򜏾qԲ9g1-/ؘfC;nĥ"33[ݪeѓqR>2{4iaEͿ(gB)UHklf9^ :=ұ#i0(E5DYcY⟚GZ9iH^H!~쑀E#rCGjb.c2U/)|;.c8b>I_x$eH-G`~h>"qs럓O2~5yᕯ$˙чGg6wp"[fq;_\ŮEV#V" YiLVC1Ej4z@?P`5 jlsSK!$L(\Q r+{KڱyEA?CވHO~/7/ ؆co{RYù,ɇf`D 1F6kAMֈV]ƋjT5"dS%#dd[Td,U& sѦ =?l&Y_ ρ 2ڡsYOבIRkju bœdh24TTM rFT[m&*)R N,5^q3rJеP`7*԰c9uE~D(L@B5vS4En rTqbOy ﮉַ7Nzdq桡uSn7qy~jon{e9䙳̷sݯFD.(q\#Xo2Isa+<5?c*gL&A:EMY9B,%Ke͠5f-+M t9U8{d_5yR;,5Kݹwqr| @`/0( WFggfzZzK"h֗pdV:m$d)9YJZv45[9bRRڲBTއ,fZ(v$u$Y,*yw}|̑G&_UQFd|9m+%a;zY>t_=pnjz}mAIiY/ 9ȅS)wّ4"(j$ޡG,zQ:RDX%0 7d~LNGc#U!xzVkc_BK?,Op#3&vOD*?JBQ aV=az%=Awc5tH5!.sQUp4y|h֧ 9cyO3/5D>Iļ1ksr)ٚj 0rSw3Onr펄4>zG|TgEXH#NP]5YzO,N7l[*r5LRtz6JU:IDH0v K@D:aQJ9t]JQ:(((h#@jJ:*@t<W$W^qn"5!]bfE-W|=z w_sߺg6tVY狱,7#O<=19[Kb8 nxm₊ɓݎ# ד9NSikԛ+gX4 /#ʏ}dJ.Tt.ِz`L;oFAՒf4眷Չ]"nQm;٨vHb$tQЬn]H4QE^ _~W rzA$TѨQ߬gJD>Fcu";3Kףctd(ݬzvJT_P!NSI !ɥΆ=.+!4'=9=:%,mTô(g4STy\ ʸ B Jj]^afP(A@ߪjf i5A.]$*>DOH%$J&2H8EzN$RC*Ch.$%SJH$U|[+h\ VmmMSS4Cr6+v\lZc3Ct]lhK*6U2V~QFK7W[/Yb񒲪;^=nk[[˃i[Wmm?dkSS v- #'pmr!h_zj$OMϾ u }*M";.3PAHrD1L}ʤk)lm&sA{=*=;g[PCˆ_yzwg}ueӭ?bړ$%K267|?zqyi#G#9+?Ź #Y|l%'fs&rxvV5DzbB1>udR|Wsh]#R^).Eʫ"U>.R ]tn^d8? /?J!pS_,_ .;g;L~8> $: ߾{;}Wb7ڦ**8 fs yI8@d4} #gJmnI'ZuqZVW"A#PA~h)hU|#֠xFY: ūG@}c~wkZvv{6L9`a;8{w5wrUiqqϟq~2,o#,$FzZIM{ZITTTVNEnf̏f*tD u9gi:L$y23AY\Bn=T)hjLvuzgV2˼ʖa6zvitۊu:`s:m`7rC;xPYg}TWW*6!֫*"5_~.NO)s|`W5e3 6|2>$YYvh.O}LG Z)~[0١;7O*L8>! /_Xϖ꣠: rbH.7}zVke:@|i:(I >Ly#lj KKA]ޙRU`(hV%N5U!(d"Y[!i29h$)k?xx! `O)gG8{<%=#s/- <ڟKmcoUU8ؐ xN뜘 5fMt.IDVE(枔?9#)jhygD^D 54QXz;86F @ 9t z)31~).H.F? }Zރ]fKq ybPu|nn~~%ZW1}\?'.of7t kf Yi/5 Cy,3kQLkzLQV_XJa~(jl_Hh>|ȯnl~c6~\}l/)Wq {)~.n:i*5wht7տ솛a+WSU5ϭff۵.̝n$kE֊l~q_/~q_/2$k ȿrC*X{Iulsg/]:czK3ܼ`_TYS0*8Mz~N_$(*gvTQ\Ԋ&64,d@4 uEP' fDGEՠ4 U> endobj 84 0 obj <>stream xW}pT?M6dAH(oy$"I1ð$kkB"n>0  QˬE7V%h@o j`h`:hG նG[NgHz޻IJlu:=sϹ}QPsk]|Znkisg;j/:Dwn|%-@Zwg[z?I@Ks;dpc )3HFY-n^Vж12v wvcd[;6$vwdcX~oSjߴegyj훛o}u[{-$d494P8셽_AjD/߱4K }lh؋_~v(n!˃7Cw̫(^8 ?aVCZ4ק8{/KX1+Z|ΐcE1lMCuzNT&m%JEA`tzӨB3Vn{& yb=cC9a/Y![FnxXrHgHm+TŖ9A.@UhZʹ {-~>pp~e CLJbUpId3ni?$ M|͠Q" v~>bC3nx-T)Hyeکt[m[+(O)$ͅiTWU N~1%H$YX%,B/q%IWc76Qѳ1= [rX˟ձUl{=Ξd/Љg'Cq]y:ʯ>'m|9>L!$I+TYiH$+/w.i:aJ-öĶӶovEd)3I*JҦt(!}վ9y;^Ow%`!L̆te$-,ȟsrg3ڌkAi))$d3kF^ؐBsGHJ64R'Zr&{zs<=3Nm),-,|f֫k6H^=k,Ytnj5h^HN+ Ld~=2[`PVFUL๾HQSy]nwFHͷ\ZưUj]ZT{ |GY4x$doܬ{.,ꃆb>xG2WKܧ{\A='蠠g=-+h Rɂ x? G$A8K8CxpOxC)T9?Ӟi/`JW{n%I)JYQ⫕xHYLUSU9jfS:$UUm2^aF@]9ShЌL]mz9ԗge}#hч\q@}hkC!=i< 3+3^WLmi6nj6@+| jIVܚ`BP,9 ܡ,g{Uwv 2}'8%B0M & ,3f޾:c&'h+)(TIUE]<@FAca0,y i4wÕ(Q̿pЇ'A2JiHS>stream GPL Ghostscript 9.04 () 2012-04-30T18:21:30+02:00 2012-04-30T18:21:30+02:00 PDFCreator Version 1.2.3 TLM 2.0 Approximately Timed (AT) System Example - Annotated Timing OnlyJack Donovan, Anna Keist, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 89 0000000000 65535 f 0000024887 00000 n 0000061667 00000 n 0000024757 00000 n 0000022603 00000 n 0000000015 00000 n 0000000772 00000 n 0000024952 00000 n 0000027887 00000 n 0000043398 00000 n 0000027827 00000 n 0000027857 00000 n 0000030882 00000 n 0000022797 00000 n 0000000791 00000 n 0000002210 00000 n 0000030912 00000 n 0000038784 00000 n 0000033822 00000 n 0000036835 00000 n 0000043570 00000 n 0000056849 00000 n 0000043708 00000 n 0000036749 00000 n 0000036792 00000 n 0000041170 00000 n 0000022993 00000 n 0000002231 00000 n 0000003578 00000 n 0000042997 00000 n 0000043862 00000 n 0000043330 00000 n 0000041222 00000 n 0000041265 00000 n 0000041308 00000 n 0000023189 00000 n 0000003599 00000 n 0000004292 00000 n 0000041360 00000 n 0000041403 00000 n 0000041446 00000 n 0000023385 00000 n 0000004312 00000 n 0000005790 00000 n 0000041509 00000 n 0000041552 00000 n 0000041595 00000 n 0000023581 00000 n 0000005811 00000 n 0000007677 00000 n 0000041658 00000 n 0000041701 00000 n 0000041744 00000 n 0000023777 00000 n 0000007698 00000 n 0000009480 00000 n 0000041785 00000 n 0000041828 00000 n 0000041871 00000 n 0000023973 00000 n 0000009501 00000 n 0000014640 00000 n 0000041923 00000 n 0000041966 00000 n 0000042009 00000 n 0000024169 00000 n 0000014661 00000 n 0000016659 00000 n 0000042072 00000 n 0000042115 00000 n 0000042158 00000 n 0000024365 00000 n 0000016680 00000 n 0000018209 00000 n 0000042221 00000 n 0000042264 00000 n 0000042307 00000 n 0000024561 00000 n 0000018230 00000 n 0000022582 00000 n 0000042359 00000 n 0000042402 00000 n 0000042445 00000 n 0000044077 00000 n 0000057046 00000 n 0000042497 00000 n 0000043483 00000 n 0000043789 00000 n 0000059724 00000 n trailer << /Size 89 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 62544 %%EOF systemc-2.3.4/examples/tlm/at_1_phase/CMakeLists.txt0000644000175000017500000000527614342422106022255 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/at_1_phase/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (at_1_phase src/at_1_phase.cpp include/at_1_phase_top.h src/at_1_phase_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/at_target_1_phase.h ../common/src/at_target_1_phase.cpp ../common/include/select_initiator.h ../common/src/select_initiator.cpp) target_include_directories (at_1_phase PRIVATE include ../common/include) target_link_libraries (at_1_phase SystemC::systemc) configure_and_add_test (at_1_phase) systemc-2.3.4/examples/tlm/at_1_phase/include/0000755000175000017500000000000014342422106021126 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/include/at_1_phase_top.h0000644000175000017500000000470314342422106024171 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.h /// @brief This class instantiates components that compose the TLM2 /// example system called at_1_phase //===================================================================== // Original Authors: // Anna Keist, ESLX // Bill Bunton, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __EXAMPLE_SYSTEM_TOP_H__ #define __EXAMPLE_SYSTEM_TOP_H__ #include "reporting.h" // common reporting code #include "at_target_1_phase.h" // at memory target #include "initiator_top.h" // processor abstraction initiator #include "models/SimpleBusAT.h" // Bus/Router Implementation /// Top wrapper Module class example_system_top : public sc_core::sc_module // SC base class { public: /// Constructor example_system_top ( sc_core::sc_module_name name); //Member Variables =========================================================== private: SimpleBusAT<2, 2> m_bus; ///< simple bus at_target_1_phase m_at_target_1_phase_1; ///< instance 1 target at_target_1_phase m_at_target_1_phase_2; ///< instance 2 target initiator_top m_initiator_1; ///< instance 1 initiator initiator_top m_initiator_2; ///< instance 2 initiator }; #endif /* __EXAMPLE_SYSTEM_TOP_H__ */ systemc-2.3.4/examples/tlm/at_1_phase/include/initiator_top.h0000644000175000017500000000713114342422106024165 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.h // /// @brief Initiator top module contains a traffic generator and an /// example tlm initiator module // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "select_initiator.h" // AT initiator #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // backward non-blocking interface { //Member Methods ===================================================== public: //===================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //===================================================================== initiator_top ( sc_core::sc_module_name name ///< module name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address , unsigned int active_txn_count ///< Max number of active transactions ); private: /// Not Implemented for this example but required by the initiator socket void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); /// Not Implemented for this example but require by the initiator socket tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); //Member Variables/Objects =========================================== public: tlm::tlm_initiator_socket<> initiator_socket; ///< processor socket private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID select_initiator m_initiator; ///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/at_1_phase/src/0000755000175000017500000000000014342422106020272 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/src/initiator_top.cpp0000644000175000017500000001100314342422106023655 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file initiator_top.cpp // /// @brief Implements instantiation and interconnect of traffic_generator /// and an initiator via sc_fifos for at_1_phase_example // //===================================================================== // Original Authors: // Bill Bunton, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // Jack Donovan, ESLX //===================================================================== #include "initiator_top.h" // Top traffic generator & initiator #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 , unsigned int active_txn_count ) :sc_module (name) // module name for top ,initiator_socket ("at_initiator_socket") // TLM socket ,m_ID (ID) // initiator ID ,m_initiator // Init initiator ("m_initiator_1_phase" ,ID ,sc_core::sc_time(7, sc_core::SC_NS) // set initiator end rsp delay ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID ,base_address_1 // first base address ,base_address_2 // second base address ,active_txn_count // Max active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_initiator.response_out_port (m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_initiator.initiator_socket(initiator_socket); } //===================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Unused mandatory virtual implementation /// /// @details /// No DMI is implemented in this example so unused /// //===================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //===================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Unused mandatory virtual implementation /// /// @details /// Unused implementation from hierarchichal connectivity of /// Initiator sockets. /// //===================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/at_1_phase/src/at_1_phase_top.cpp0000644000175000017500000001076614342422106023676 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_system_top.cpp // /// @brief This class instantiates components that compose the TLM2 /// example system. A similar block diagram is created /// for each version, but with different components // //===================================================================== // Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== #include "at_1_phase_top.h" // example system top header //===================================================================== /// @fn example_system_top::example_system_top // /// @details /// The construcor method calls the bind methods /// to connect the example components. // //===================================================================== example_system_top::example_system_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_at_target_1_phase_1 /// Init intance 1 of AT target ( "m_at_target_1_phase_1" // module name , 201 /// 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_at_target_1_phase_2 /// Init instance 2 of AT target ( "m_at_target_1_phase_2" // module name , 202 /// 2nd Target ID is 202 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(10, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// Init Instance 1 of AT initiator ( "m_initiator_1" // module name , 101 /// 1st Initiator ID is 101 , 0x0000000000000100 // fitst base address , 0x0000000010000100 // second base address , 2 // active transactions ) , m_initiator_2 /// Init initiator 2 ( "m_initiator_2" // module name , 102 /// 2nd Initiator ID is 102 , 0x0000000000000200 // fitst base address , 0x0000000010000200 // second base address , 2 // active transactions ) { /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.initiator_socket(m_bus.target_socket[0]); m_initiator_2.initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_at_target_1_phase_1.m_memory_socket); m_bus.initiator_socket[1](m_at_target_1_phase_2.m_memory_socket); } systemc-2.3.4/examples/tlm/at_1_phase/src/at_1_phase.cpp0000644000175000017500000000514514342422106023007 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //===================================================================== /// @file example_main.cpp /// /// @brief Example main instantiates the example system top and starts /// the systemc simulator /// //===================================================================== // Original Authors: // Bill Bunton, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX // Jack Donovan, ESLX //===================================================================== // define REPORT_DEFINE_GLOBALS in one location only #define REPORT_DEFINE_GLOBALS #include "reporting.h" // reporting utilities #include "at_1_phase_top.h" // top module #include "tlm.h" // TLM header //===================================================================== /// @fn sc_main // /// @brief SystemC entry point // /// @details /// This is the SystemC entry point for the example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the examples traffic generator will run to /// completion, ending the simulation. /// //===================================================================== int // return status sc_main // SystemC entry point ( int /*argc*/ // argument count , char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); example_system_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation return 0; // return okay status } systemc-2.3.4/examples/tlm/at_1_phase/build-unix/0000755000175000017500000000000014342422106021563 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/build-unix/Makefile0000644000175000017500000000057014342422106023225 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = at_1_phase VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ at_target_1_phase.o \ memory.o \ report.o \ select_initiator.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/at_1_phase/results/0000755000175000017500000000000014342422106021204 5ustar carstencarstensystemc-2.3.4/examples/tlm/at_1_phase/results/expected.log0000644000175000017500000046145614342422106023530 0ustar carstencarsten Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 0 s - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 0 s - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 40 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 40 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 40 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_1_phase.cpp: 40 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 47 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 80 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 80 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_1_phase.cpp: 80 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 80 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 87 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 87 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 87 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 120 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 120 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 120 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_1_phase.cpp: 120 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 127 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 127 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 127 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 127 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 160 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 160 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_1_phase.cpp: 160 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 160 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 167 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 167 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 167 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 167 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 200 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 200 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 200 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_1_phase.cpp: 200 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 207 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 207 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 207 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 207 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 240 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 240 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_1_phase.cpp: 240 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 240 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 247 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 247 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 247 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 247 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 280 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 280 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 280 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_1_phase.cpp: 280 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 287 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 287 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 287 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 287 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 320 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 320 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_1_phase.cpp: 320 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 320 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 327 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 327 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 327 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 327 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 360 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 360 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 360 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_1_phase.cpp: 360 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 367 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 367 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 367 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 367 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 400 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 400 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_1_phase.cpp: 400 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 407 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 407 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 407 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 407 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 440 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 440 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 440 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_1_phase.cpp: 440 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 447 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 447 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 447 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 447 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 480 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 480 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_1_phase.cpp: 480 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 480 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 487 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 487 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 487 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 487 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 520 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 520 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 520 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_1_phase.cpp: 520 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 527 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 560 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 560 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_1_phase.cpp: 560 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 560 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 567 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 567 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 567 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 567 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 600 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 600 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 600 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_1_phase.cpp: 600 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 607 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 607 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 607 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 607 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 640 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 640 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_1_phase.cpp: 640 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 640 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 647 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 647 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 647 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 647 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 680 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 680 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 680 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_1_phase.cpp: 680 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 687 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 687 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 687 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 687 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 720 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 720 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_1_phase.cpp: 720 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 720 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 727 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 727 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 727 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 727 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: select_initiator.cpp: 760 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 760 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 767 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 767 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 767 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 767 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 770 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 770 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 770 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_1_phase.cpp: 770 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: memory.cpp: 800 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_1_phase.cpp: 800 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 800 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 201 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 800 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 807 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 807 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 807 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 807 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 810 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 810 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_1_phase.cpp: 810 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 810 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 817 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 817 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 817 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 817 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 850 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 850 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 850 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_1_phase.cpp: 850 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 857 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 857 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 857 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 857 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 890 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 890 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_1_phase.cpp: 890 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 890 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 897 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 897 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 897 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 897 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 930 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 930 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 930 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_1_phase.cpp: 930 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 937 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 937 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 937 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 937 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 970 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 970 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_1_phase.cpp: 970 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 970 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 977 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 977 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 977 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 977 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1010 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1010 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1010 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_1_phase.cpp: 1010 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1017 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1017 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1017 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1017 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1050 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1050 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_1_phase.cpp: 1050 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1050 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1057 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1057 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1057 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1057 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1090 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1090 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1090 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_1_phase.cpp: 1090 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1097 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1130 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1130 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_1_phase.cpp: 1130 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1130 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1137 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1137 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1137 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1137 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1170 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1170 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1170 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_1_phase.cpp: 1170 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1177 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1177 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1177 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1177 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1210 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1210 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_1_phase.cpp: 1210 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 1210 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1217 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1217 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1217 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1217 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1250 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1250 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1250 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0x00000100 Info: at_target_1_phase.cpp: 1250 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1257 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1257 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1257 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1257 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1310 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1310 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0x00000200 Info: at_target_1_phase.cpp: 1310 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1310 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1317 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1317 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1317 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1317 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1370 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1370 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1370 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0x00000104 Info: at_target_1_phase.cpp: 1370 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1377 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1377 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1377 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1377 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1430 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1430 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0x00000204 Info: at_target_1_phase.cpp: 1430 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1430 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1437 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1437 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1437 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1437 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1490 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1490 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1490 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0x00000108 Info: at_target_1_phase.cpp: 1490 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1497 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1497 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1497 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1497 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1550 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1550 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0x00000208 Info: at_target_1_phase.cpp: 1550 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1550 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1557 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1557 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1557 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1557 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1610 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1610 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1610 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0x0000010C Info: at_target_1_phase.cpp: 1610 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1617 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1617 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1617 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1617 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1670 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 1670 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1677 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1677 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1677 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1677 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1680 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 1680 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1680 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0x00000110 Info: at_target_1_phase.cpp: 1680 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: memory.cpp: 1730 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0x0000020C Info: at_target_1_phase.cpp: 1730 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 1730 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 201 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1730 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 1737 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1737 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1737 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1737 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1740 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1740 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0x00000210 Info: at_target_1_phase.cpp: 1740 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1740 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1747 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1747 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1747 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1747 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1800 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1800 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1800 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0x00000114 Info: at_target_1_phase.cpp: 1800 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1807 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1807 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1807 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1807 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1860 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1860 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0x00000214 Info: at_target_1_phase.cpp: 1860 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1860 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1867 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1867 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1867 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1867 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 1920 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 1920 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1920 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0x00000118 Info: at_target_1_phase.cpp: 1920 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1927 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1927 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1927 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1927 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 1980 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 1980 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0x00000218 Info: at_target_1_phase.cpp: 1980 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 1980 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 1987 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1987 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 1987 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 1987 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2040 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2040 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2040 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0x0000011C Info: at_target_1_phase.cpp: 2040 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2047 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2047 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2047 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2047 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2100 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2100 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0x0000021C Info: at_target_1_phase.cpp: 2100 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2100 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2107 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2107 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2107 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2107 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2160 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2160 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2160 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0x00000120 Info: at_target_1_phase.cpp: 2160 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2167 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2167 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2167 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2167 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2220 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2220 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0x00000220 Info: at_target_1_phase.cpp: 2220 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2220 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2227 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2227 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2227 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2227 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2280 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2280 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2280 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0x00000124 Info: at_target_1_phase.cpp: 2280 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2287 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2287 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2287 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2287 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2340 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2340 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0x00000224 Info: at_target_1_phase.cpp: 2340 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2340 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2347 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2347 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2347 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2347 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2400 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2400 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2400 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0x00000128 Info: at_target_1_phase.cpp: 2400 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2407 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2407 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2407 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2407 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2460 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2460 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0x00000228 Info: at_target_1_phase.cpp: 2460 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2460 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2467 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2467 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2467 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2467 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2520 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2520 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2520 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0x0000012C Info: at_target_1_phase.cpp: 2520 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2527 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2527 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2527 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2527 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2580 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2580 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0x0000022C Info: at_target_1_phase.cpp: 2580 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2580 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2587 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2587 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2587 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2587 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2640 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2640 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2640 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0x00000130 Info: at_target_1_phase.cpp: 2640 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2647 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2647 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2647 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2647 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2700 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2700 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0x00000230 Info: at_target_1_phase.cpp: 2700 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2700 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2707 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2707 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2707 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2707 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2760 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2760 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2760 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0x00000134 Info: at_target_1_phase.cpp: 2760 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2767 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2767 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2767 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2767 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2820 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 201 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 2820 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2827 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2827 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2827 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x00000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2827 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2830 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 2830 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2830 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0x00000138 Info: at_target_1_phase.cpp: 2830 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: memory.cpp: 2880 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0x00000234 Info: at_target_1_phase.cpp: 2880 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 2880 ns - begin_response_method Target: 201 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 201 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2880 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 2887 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2887 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2887 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x00000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2887 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 2890 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2890 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0x00000238 Info: at_target_1_phase.cpp: 2890 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2890 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 2897 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2897 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2897 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x0000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2897 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 2950 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 2950 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 2950 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0x0000013C Info: at_target_1_phase.cpp: 2950 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 2957 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2957 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 2957 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x0000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 2957 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3010 ns - nb_transport_fw Target: 201 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3010 ns - print ID: 201 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0x0000023C Info: at_target_1_phase.cpp: 3010 ns - nb_transport_fw Target: 201 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 3010 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3017 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3017 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3017 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3017 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3070 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3070 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3070 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_1_phase.cpp: 3070 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3077 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3077 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3077 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3077 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3110 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3110 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_1_phase.cpp: 3110 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3110 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3117 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3117 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3117 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3117 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3150 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3150 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3150 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_1_phase.cpp: 3150 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3157 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3157 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3157 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3157 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3190 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3190 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_1_phase.cpp: 3190 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3190 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3197 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3197 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3197 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3197 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3230 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3230 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3230 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_1_phase.cpp: 3230 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3237 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3237 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3237 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3237 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3270 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3270 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_1_phase.cpp: 3270 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3270 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3277 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3277 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3277 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3277 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3310 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3310 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3310 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_1_phase.cpp: 3310 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3317 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3317 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3317 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3317 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3350 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3350 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_1_phase.cpp: 3350 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3350 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3357 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3357 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3357 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3357 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3390 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3390 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3390 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_1_phase.cpp: 3390 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3397 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3397 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3397 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3397 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3430 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3430 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_1_phase.cpp: 3430 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3430 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3437 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3437 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3437 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3437 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3470 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3470 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3470 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_1_phase.cpp: 3470 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3477 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3477 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3477 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3477 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3510 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3510 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_1_phase.cpp: 3510 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3510 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3517 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3517 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3517 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3550 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3550 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3550 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_1_phase.cpp: 3550 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3557 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3557 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3557 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3557 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3590 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3590 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_1_phase.cpp: 3590 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3590 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3597 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3597 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3597 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3597 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3630 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3630 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3630 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_1_phase.cpp: 3630 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3637 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3637 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3637 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3637 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3670 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3670 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_1_phase.cpp: 3670 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3670 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3677 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3677 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3677 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3677 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3710 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_1_phase.cpp: 3710 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3717 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3717 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3717 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3717 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3750 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3750 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_1_phase.cpp: 3750 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3750 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3757 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3757 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3757 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3757 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3790 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3790 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3790 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_1_phase.cpp: 3790 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3797 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3797 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3797 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3797 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3830 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 3830 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3837 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3837 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3837 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3837 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3840 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000224 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 3840 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3840 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_1_phase.cpp: 3840 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: memory.cpp: 3870 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_1_phase.cpp: 3870 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 3870 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 202 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3870 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 3877 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3877 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3877 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3877 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3880 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3880 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_1_phase.cpp: 3880 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3880 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3887 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3887 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3887 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3887 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 3920 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 3920 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3920 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_1_phase.cpp: 3920 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3927 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3927 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3927 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3927 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 3960 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 3960 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_1_phase.cpp: 3960 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 3960 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 3967 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3967 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 3967 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 3967 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4 us - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4 us - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4 us - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_1_phase.cpp: 4 us - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4007 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4007 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4007 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4007 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4040 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4040 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_1_phase.cpp: 4040 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4040 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4047 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4047 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4047 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4047 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4080 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4080 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4080 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_1_phase.cpp: 4080 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4087 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4087 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4087 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4087 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4120 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4120 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_1_phase.cpp: 4120 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4120 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4127 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4127 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4127 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4127 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4160 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4160 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4160 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_1_phase.cpp: 4160 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4167 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4167 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4167 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4167 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4200 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4200 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_1_phase.cpp: 4200 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4200 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4207 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4207 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4207 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4207 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4240 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4240 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4240 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_1_phase.cpp: 4240 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4247 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4247 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4247 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4247 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4280 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4280 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_1_phase.cpp: 4280 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 40 ns) Info: select_initiator.cpp: 4280 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4287 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4287 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4287 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000100 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4287 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4320 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4320 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4320 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000100 Data: 0xEFFFFEFF Info: at_target_1_phase.cpp: 4320 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4327 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4327 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4327 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000200 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4327 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4380 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4380 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000200 Data: 0xEFFFFDFF Info: at_target_1_phase.cpp: 4380 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4380 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000100 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4387 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4387 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4387 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000104 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4387 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4440 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000200 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4440 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4440 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000104 Data: 0xEFFFFEFB Info: at_target_1_phase.cpp: 4440 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4447 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4447 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4447 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000204 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4447 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4500 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4500 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000204 Data: 0xEFFFFDFB Info: at_target_1_phase.cpp: 4500 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4500 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000104 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4507 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4507 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4507 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000108 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4507 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4560 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000204 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4560 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4560 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000108 Data: 0xEFFFFEF7 Info: at_target_1_phase.cpp: 4560 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4567 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4567 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4567 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000208 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4567 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4620 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4620 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000208 Data: 0xEFFFFDF7 Info: at_target_1_phase.cpp: 4620 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4620 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000108 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4627 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4627 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4627 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000010C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4627 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4680 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000208 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4680 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4680 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000010C Data: 0xEFFFFEF3 Info: at_target_1_phase.cpp: 4680 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4687 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4687 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4687 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000020C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4687 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4740 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 4740 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000010C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4747 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4747 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4747 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000110 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4747 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4750 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x0000020C Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 4750 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4750 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000110 Data: 0xEFFFFEEF Info: at_target_1_phase.cpp: 4750 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: memory.cpp: 4800 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000020C Data: 0xEFFFFDF3 Info: at_target_1_phase.cpp: 4800 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 4800 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 202 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4800 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000020C Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 4807 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4807 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4807 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000210 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4807 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4810 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4810 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000210 Data: 0xEFFFFDEF Info: at_target_1_phase.cpp: 4810 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4810 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000110 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4817 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4817 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4817 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000114 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4817 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4870 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000210 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4870 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4870 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000114 Data: 0xEFFFFEEB Info: at_target_1_phase.cpp: 4870 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4877 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4877 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4877 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000214 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4877 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 4930 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4930 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000214 Data: 0xEFFFFDEB Info: at_target_1_phase.cpp: 4930 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4930 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000114 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 4937 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4937 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4937 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000118 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4937 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 4990 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000214 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 4990 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 4990 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000118 Data: 0xEFFFFEE7 Info: at_target_1_phase.cpp: 4990 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 4997 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4997 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 4997 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000218 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 4997 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5050 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5050 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000218 Data: 0xEFFFFDE7 Info: at_target_1_phase.cpp: 5050 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5050 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000118 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5057 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5057 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5057 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000011C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5057 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5110 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000218 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5110 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5110 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000011C Data: 0xEFFFFEE3 Info: at_target_1_phase.cpp: 5110 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5117 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5117 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5117 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000021C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5117 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5170 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5170 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000021C Data: 0xEFFFFDE3 Info: at_target_1_phase.cpp: 5170 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5170 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000011C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5177 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5177 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5177 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000120 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5177 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5230 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000021C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5230 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5230 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000120 Data: 0xEFFFFEDF Info: at_target_1_phase.cpp: 5230 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5237 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5237 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5237 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000220 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5237 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5290 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5290 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000220 Data: 0xEFFFFDDF Info: at_target_1_phase.cpp: 5290 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5290 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000120 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5297 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5297 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5297 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000124 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5297 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5350 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000220 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5350 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5350 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000124 Data: 0xEFFFFEDB Info: at_target_1_phase.cpp: 5350 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5357 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5357 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5357 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000224 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5357 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5410 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5410 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000224 Data: 0xEFFFFDDB Info: at_target_1_phase.cpp: 5410 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5410 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000124 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5417 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5417 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5417 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000128 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5417 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5470 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000224 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5470 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5470 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000128 Data: 0xEFFFFED7 Info: at_target_1_phase.cpp: 5470 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5477 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5477 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5477 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000228 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5477 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5530 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5530 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000228 Data: 0xEFFFFDD7 Info: at_target_1_phase.cpp: 5530 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5530 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000128 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5537 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5537 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5537 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000012C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5537 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5590 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000228 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5590 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5590 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000012C Data: 0xEFFFFED3 Info: at_target_1_phase.cpp: 5590 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5597 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5597 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5597 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000022C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5597 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5650 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5650 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000022C Data: 0xEFFFFDD3 Info: at_target_1_phase.cpp: 5650 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5650 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000012C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5657 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5657 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5657 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000130 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5657 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5710 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000022C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5710 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5710 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000130 Data: 0xEFFFFECF Info: at_target_1_phase.cpp: 5710 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5717 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5717 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5717 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000230 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5717 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5770 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5770 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000230 Data: 0xEFFFFDCF Info: at_target_1_phase.cpp: 5770 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5770 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000130 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5777 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5777 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5777 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000134 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5777 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5830 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000230 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 5830 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5830 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000134 Data: 0xEFFFFECB Info: at_target_1_phase.cpp: 5830 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5837 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5837 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5837 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000234 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5837 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5890 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Target: 202 UPDATED (GP, END_REQ, 10 ns) Info: select_initiator.cpp: 5890 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000134 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5897 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5897 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5897 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x10000138 Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5897 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 5900 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, END_REQ, 0 s)from Addr:0x00000234 Initiator: 102 transaction waiting begin-response on backward path Initiator: 102 ACCEPTED (GP, END_REQ, 0 s) Info: at_target_1_phase.cpp: 5900 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5900 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000138 Data: 0xEFFFFEC7 Info: at_target_1_phase.cpp: 5900 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: memory.cpp: 5950 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000234 Data: 0xEFFFFDCB Info: at_target_1_phase.cpp: 5950 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Info: at_target_1_phase.cpp: 5950 ns - begin_response_method Target: 202 nb_transport_bw(GP, BEGIN_RESP, SC_ZERO_TIME) Target: 202 ACCEPTED(GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5950 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000234 Initiator: 102 transaction moved to send-end-response PEQ Initiator: 102 ACCEPTED (GP, BEGIN_RESP, 0 s) Info: select_initiator.cpp: 5957 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5957 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5957 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x10000238 Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5957 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 5960 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 5960 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x0000000000000238 Data: 0xEFFFFDC7 Info: at_target_1_phase.cpp: 5960 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 5960 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000138 Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 5967 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5967 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 5967 ns - initiator_thread Initiator: 101 starting new transaction for Addr:0x1000013C Initiator: 101 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 5967 ns - initiator_thread Initiator: 101 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 101 transaction waiting end-request on backward-path Info: select_initiator.cpp: 6020 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x00000238 Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: at_target_1_phase.cpp: 6020 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 6020 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000013C Data: 0xEFFFFEC3 Info: at_target_1_phase.cpp: 6020 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 6027 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6027 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6027 ns - initiator_thread Initiator: 102 starting new transaction for Addr:0x1000023C Initiator: 102 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: select_initiator.cpp: 6027 ns - initiator_thread Initiator: 102 ACCEPTED (GP, BEGIN_REQ, 0 s) Initiator: 102 transaction waiting end-request on backward-path Info: at_target_1_phase.cpp: 6080 ns - nb_transport_fw Target: 202 nb_transport_fw (GP, BEGIN_REQ, 0 s) Info: memory.cpp: 6080 ns - print ID: 202 COMMAND: READ Length: 04 Addr: 0x000000000000023C Data: 0xEFFFFDC3 Info: at_target_1_phase.cpp: 6080 ns - nb_transport_fw Target: 202 COMPLETED (GP, BEGIN_REQ, 60 ns) Info: select_initiator.cpp: 6080 ns - nb_transport_bw Initiator: 101 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000013C Initiator: 101 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 6087 ns - send_end_rsp_method Initiator: 101 starting send-end-response method Initiator: 101 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6087 ns - send_end_rsp_method Initiator: 101 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 6087 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: select_initiator.cpp: 6140 ns - nb_transport_bw Initiator: 102 nb_transport_bw (GP, BEGIN_RESP, 0 s)from Addr:0x0000023C Initiator: 102 target omitted end-request timing-point returning ACCEPTED Info: select_initiator.cpp: 6147 ns - send_end_rsp_method Initiator: 102 starting send-end-response method Initiator: 102 nb_transport_fw (GP, END_RESP, 0 s) Info: select_initiator.cpp: 6147 ns - send_end_rsp_method Initiator: 102 COMPLETED (GP, END_RESP, 0 s) Info: traffic_generator.cpp: 6147 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### systemc-2.3.4/examples/tlm/lt_dmi/0000755000175000017500000000000014342422106016747 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/test.am0000644000175000017500000000542414342422106020252 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: lt_dmi ## %C%: lt_dmi examples_TESTS += lt_dmi/test lt_dmi_test_CPPFLAGS = \ -I$(srcdir)/lt_dmi/include \ $(CPPFLAGS_TLMTESTS) lt_dmi_test_SOURCES = \ $(lt_dmi_H_FILES) \ $(lt_dmi_CXX_FILES) examples_BUILD += \ $(lt_dmi_BUILD) examples_CLEAN += \ lt_dmi/run.log \ lt_dmi/expected_trimmed.log \ lt_dmi/run_trimmed.log \ lt_dmi/diff.log examples_FILES += \ $(lt_dmi_H_FILES) \ $(lt_dmi_CXX_FILES) \ $(lt_dmi_BUILD) \ $(lt_dmi_EXTRA) examples_DIRS += \ lt_dmi/$(TLM_EXAMPLE_SUBDIRS) ## example-specific details lt_dmi_H_FILES = \ lt_dmi/include/initiator_top.h \ lt_dmi/include/lt_dmi_top.h lt_dmi_CXX_FILES = \ lt_dmi/src/initiator_top.cpp \ lt_dmi/src/lt_dmi.cpp \ lt_dmi/src/lt_dmi_top.cpp lt_dmi_BUILD = \ lt_dmi/results/expected.log lt_dmi_EXTRA = \ lt_dmi/README \ lt_dmi/CMakeLists.txt \ lt_dmi/build-msvc/Makefile \ lt_dmi/build-msvc/lt_dmi.sln \ lt_dmi/build-msvc/lt_dmi.vcxproj \ lt_dmi/build-unix/Makefile \ lt_dmi/docs/lt_dmi_example.pdf \ lt_dmi/docs/lt_dmi_example.ppt #lt_dmi_FILTER = ## Taf! ## :vim: ft=automake: systemc-2.3.4/examples/tlm/lt_dmi/build-msvc/0000755000175000017500000000000014342422106021014 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/build-msvc/lt_dmi.sln0000644000175000017500000000232014342422106022777 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_dmi", "lt_dmi.vcxproj", "{83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|Win32.ActiveCfg = Debug|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|Win32.Build.0 = Debug|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|x64.ActiveCfg = Debug|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|x64.Build.0 = Debug|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|Win32.ActiveCfg = Release|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|Win32.Build.0 = Release|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|x64.ActiveCfg = Release|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/tlm/lt_dmi/build-msvc/lt_dmi.vcxproj0000644000175000017500000003121614342422106023704 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5} winbuild Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 EditAndContinue 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false X64 Disabled ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true Sync EnableFastChecks MultiThreadedDebugDLL true true Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 ..\include;..\..\common\include;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) false Level4 ProgramDatabase 4121;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX64 systemc-2.3.4/examples/tlm/lt_dmi/build-msvc/Makefile0000644000175000017500000000060614342422106022456 0ustar carstencarsten!include <..\..\..\build-msvc\Makefile.config> PROJECT = lt_dmi OBJS = \ $(OUTDIR)\$(PROJECT).obj \ $(OUTDIR)\$(PROJECT)_top.obj \ $(OUTDIR)\initiator_top.obj \ \ $(OUTDIR)\dmi_memory.obj \ $(OUTDIR)\lt_dmi_initiator.obj \ $(OUTDIR)\lt_dmi_target.obj \ $(OUTDIR)\memory.obj \ $(OUTDIR)\report.obj \ $(OUTDIR)\traffic_generator.obj !include <..\..\..\build-msvc\Makefile.rules> systemc-2.3.4/examples/tlm/lt_dmi/README0000644000175000017500000000041314342422106017625 0ustar carstencarstenThis directory contains an example of a simple TLM platform implemented on top of the blocking transport interface. The convenience API is the same as in the example lt_min_system. Using: * cd build-unix * set SYSTEMC_HOME environment variable * make * make run systemc-2.3.4/examples/tlm/lt_dmi/docs/0000755000175000017500000000000014342422106017677 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/docs/lt_dmi_example.ppt0000644000175000017500000045700014342422106023415 0ustar carstencarstenࡱ> ,)*+n VTx_[E%NTaRPNG  IHDRRwgAMAPLTE[@NS6UK+[B!b:hS4{_Cx`nF&qkQ}Pᄎ¾ 0@`p݀Ϯ ߥ}'s.|i4t^;lTAcJHϿppp```PPP@@@000 `7m+ pHYs  ~ IDATxiWQf5fp&$fgEZ_ϽbFj+ԣꖆc`̤_E€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@aVu|\ߏl|W)`6?7j8::n%y_=a0)vn=8% &hr%_{g}?hGupүfawWķ sgomթEN[oca:~kva0~WtcyО,Ld jsyc$ ݭBѴu`\Y|,~-/ as{s;5W 18UT0(]t7ű0(Q{~F=]|?.6ּouyySY/A T[z/;Y]%2@A6xEڍk~aqyc 'Ag cec1w|~Qޯ尰6t7Q{.>=slOk=I,.-?ˋ 箮:qAIbu%k 捙-(Xz),>uH>--b 0(ݓn,޿ѯ,N9-~caPOw>o>2'mXBg dۏXîaZYD d[<~m,էQ!aPdžrs/Pʂ'Z5[aPG~ƇqgQ\Kcem3R=rEj9],5juEbu{~ !aP*j%3fAB kL-I㥷A趼2Az7Q>JO׻(sLϱ19JhMtQ/K68.jet]:Ԝv^bfC bj?Ph_NozsW7'Ǖr3I3Èa ԇZ66/N:?nG8:r}}鎯֚SI;y^-na 1wXm}ZkӋg&V;u=꼩}h(>43)._l]& WY0zw0j_ya)5w_߰oc ٳuדR/zyI5ecgVW!a_$O #h5vE ڮ0.r/19OmmS1]{=0nJr۹QyW*?ø4u8>$Z7WL_k![^J^FE<X?W<ڷ?9?}~sOywZj~7KǮK+^0(C{FYy" ci# }hO_&=! JM  aPI2~15 ?N ]i" fL)aPwf<>aP_ aPv_6'=G# J.t_z/eW(C{S|V' i߂ i} |{JS`<Tߧxwk=3}n8Mm瑍&IENDB`nm^%$a2FPNG  IHDRYOrsBITOPLTESQVGF`$#|0/s;:i  00@@PP``ppƀ̏ҟٯ߿Pᄎ ¾ 0&@`p݀wt9kiC_]MϿppp```PPP@@@000 0bKGDH;IDATx흋wHnk|Ԡsݬ՘Ķ)Q| Y \Dr~_O#=g>3C/{b ?ba|],t<OfbxӵR (e1ufϪ  (4b<.~}=rb,r@ P˅'ƳKX 5?_l)w(l )o'S;n|bY1+b.1x+._1@ 7haע/&1bbP:59>R rd(䇓D=M biܓ%hhgQ2,[ ^ʜE@ @+\<2\гDE114w8Ǧ|:/1)#gIo^WUQ ߣpP2^\?Irhq ;^\_u$V' b:~NRy|thqm>*.yԑb2xnEqpW{un\mqfwhkJT?v(줉qfN/A1ۀ%j|NՉ|^nd\9cdՉ^9:ML~]6v3v &$甠Em@$Rff+Gv7!EtE} oݭFіC~1@fxV]kv糨ŰK$bHzdYb#z Rx1Ugt5۫Ƹ[; DbI5kBdX1Zq+c6$ Y9G}@ [kbG#d (?ĮcTtV$!aq`絷)([bi3O>1> b8+|Q+zixJVyWTJ=O)^W|j /[Rf7#P>tl | +v.鈱;A{1bI/9D!}& | ;v<爱>$I1>[+ b8!eIQf beROܩjl7~mlf_X}\k]|=#.jD--n^+nUs8Pb ĕeb +^;d<=i2 BDk5J|1Ɛ$Ny@ @>h̏ҟٯMM]PP\ #,/}>AqSWcYZX\]V2wxB! &0~5wv>wt9kiC_]M-bKGDHIDATx{C"YbamY4!&I&x,(rEn{PS7KU?8D€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ QwU?f?<=5N ͕zx[gxwEu-HD!O6A,:>iSUՃ0h/*'O?фOwmѣGƾ=NN?cn~voq c[Uń6F[{:Ԓӣ_A[x꼧rd?M}7lJ^F_αn]Y$fTFiPcGؚ0J}:2ilKYHc;(WZ[,iXoAhU aAαo7%wzc>aqۨzsާo݀0V:ŋǪ__0V"Y'ܖ%>BV]tQ|~SJFv#ݭvoWE$5x9ˆ%wwzX6w/ۭ=7MFrm}{ox7w a,ÕgM9u\_f*}Xr벻 &~u*{ PˋH/D{}Xca(7.df=T*&T$ozp6][ 5XY$]+ 7Vw:E~4;^~bӉT{0brW/itf[}6Blx!$rr&il=So¡2bLm9M`ZVn cbC{헋'NڣL|wV3/Fa̢fS[^VpcY򠆋bиٮ_$MvI/Þqu%J̫P~3~q2.[UɈ1Rd}t^-anKoCIMZ7Ͻmgm{E(}6Hkx]xq!j^S3FŨ68@RvA+{HyF#Pz:.F+ٛ_p=/;K:8@]ctQʽO;3q|ՠN/˻~7X~Tnh0&7/^O[:/o9\qlO|󹯿=Nuu52-F"^qմ_*TjvT3G0nf:*&puۼY/a U?JØ2~*qB~1_[h>M!a̬71ڇ13*iԀ0?^Q3py:pF/l [)p4L3ń0Fe3ń0Ǝ,3cCQoA5RcU7xxBugm}GwqoTҨa4ZlH>QOiԆ06q2{;ok@;n4̨:alaK€@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 €@a@ 0 sIENDB`( / 0DArialr News4x2 0x"DTimes New Roman4x2 0x DWingdingsRoman4x2 0x0DMonotype Sorts4x2 0x@DArial Narrows4x2 0x"PDTahomaarrows4x2 0x"`DCourier News4x2 0x1F0.  @n?" dd@  @@`` q ^ ,*a7%0##< L dV F?b$VTx_[E%NTaRb$^%$a2Fub$K9 V[8m./| 0AA0 @823 ʚ;f0ʚ;g4dddd2 0ppp@ <4dddd 0 <4BdBd8 0<4!d!d8 0 h___PPT2001D<4X___PPTMac11@f   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 8!  `namdX Tahoma Microsoft Corp.  `namdX Tahoma Microsoft Corp. l___PPT10L pp4!___PPT9|!</?  %5The TLM 2.0 Loosely Time (LT) with DMI System Example3Jack Donovan, Charles Wilson ESLX, Inc. 19 May 2008G!#AT Minimum System Example Use CasesnVirtual Development Platform Initial Hardware/Software Partitioning Initial Architectural Performance Analysis0o'*  H"&Approximately Timed (AT) Block Diagram O,How to run this example (Linux)LSet SYSTEMC_HOME cd examples/tlm/lt_dmi/build-unix make clean make make run *M =  ,U/How to run this example (MSVC)nOpen a explorer window on examples/tlm/lt_dmi/build-windows Launch lt_dmi.sln Select  Property Manager from the  View menu Under  lt_dmi > Debug | Win32 select  systemc Select  Properties from the  View menu Select  User Macros under  Common Properties Update the  SYSTEMC entry and apply Build and runV8Z!  P# 7T*Expected Output (expected.log)( I#Initiator Component  e3Bus Interface Logic  L%Target Component  W0Router Component  / YZ[f   0` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dU@ ?id(@e  njuwdZ-fZ n?" dd@   @@``PXU   f `p>> tl (  h  C 2As_c_pg2_opt3"j  C 4Asystem_c_L2_9"Y  6h "P  T Click to edit Master title style! !$  0蠇 "P0 h RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6L " h P*&0  B  s *޽h ? ̙3380___PPT10.YS' TLM2.0plan]  0  c(  p  C :A"system_c_title_9"  s *Z "p@@   T Click to edit Master title style! !  s *d " @P  W#Click to edit Master subtitle style$ $B  s *޽h ? ̙3380___PPT10.YS' 0  (     Ni.y˼y˼ .   n*  a00aa  Ng.y˼y˼ 2 .  p*  a00aad  c $ ?  4  Nj.y˼y˼ 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   T.y˼y˼ q  . n*  a00aa   TD.y˼y˼ q2  . p*  a00aaH  0ηo~ ? 3380___PPT10.1?0 0 @0(  x  c $͏p@   x  c $ݏ @ P  H  0޽h ? 3380___PPT10."0  0 PT0( Jxobtvcaa Tx T c $P   x T c $P0  H T 0޽h ? 280___PPT10.4jt9  0 IA` X(  X~ X s *(P     X <4  RJB___PPTMac11   hnamd` Arial&Monotype Typography  >TLM 2 GP  Rb X s *  X B?op ` V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ ~Target 1 (lt_dmi_target)(  T X B,o0PRJB___PPTMAC11   hnamd` Arial&Monotype Typography  Router (SimpleBusLT)6   X Bro` V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ Initiator 1 (initiatior_top)(  ! X Bso ` j___PPTMAC11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <___PPT10R___PPT94, Initiator 2 (initiator_top)6   X B so` V___PPTMAC110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ ~Target 2 (lt_dmi_target)(  Rb X s *P@Rb X s *P`Rb X s *P Rb X s *P @H X 0޽h ? 280___PPT10. "  0 p( >y? l  C sP  s l  C psP0 s H  0޽h ? ̙3380___PPT10.nt$  0 $(  r  S P   r  S P0  H  0޽h ? ̙3380___PPT10.nt  0  x(  xl x C wP  w  x <0{ Info: lt_dmi_target.cpp: 0 s - toggle_dmi_method Target: 201 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (0, 4096) Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (0, 4096) Info: lt_dmi_target.cpp: 0 s - toggle_dmi_method Target: 202 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (268435456, 268439552) Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (268435456, 268439552) Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: lt_dmi_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport with delay of 0 s);0 FFSS.. H x 0޽h ? ̙3380___PPT10.ntDw;W  0 ?W7W1\, U(  \~ \ s *P   iF P  \ P N   \   \ <ȟ" p ntlm_initiator_socket$0 N   \  T P  \#  p \ N?3fjJ?"P   \  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B \ 0D N    \    \ <@+" p ktlm_target_socket$0 N    \   T P  \#   p \ N?3fjJ?"P   \  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B \ 0D ]N   \   \ <1" y Gsc_port$0 .N   \  `B \ 0DP Ph \ s *>]" peN P p \ P p \ <D6" ps I sc_export$ 0  4N P p \ P p`B \ 0DP n \ 0%,>]" pp \ <o"@ RJB___PPTMAC11   hnamd` Arial&Monotype Typography  .J \ 0|}"p %4,n___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography D___PPT10$b___PPT9D< Initiator Model (lt_dmi_top)F0P2    l \ 6$"p V q l \ 6 " l \ 6 " Pl \ 6$"q Vq L P  \#  P  \ N?3fjJ?"P   \  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P   \ 6<"  `   ___PPTMAC11`X   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography \___PPT10<4___PPT9tl 'Bus Interface Logic (lt_dmi_inititator)n(    L P  \#  P  \ N?3fjJ?"P   \  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P   \ 6h" p   ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography T___PPT104,___PPT9d\ &Traffic Generator (traffic_generator)`'   ` \ s *>]" P ` \ s *>]" P ` \ s *>]" P   \ <"P`x p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography L___PPT10,$r___PPT9TL Request Queue (sc_fifo)R     \ <p|."P` x p  ___PPTMAC11t l    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography L___PPT10,$r___PPT9TL Response Queue (sc_fifo)R   l \ 6 " l \ 6 "P` \ s *>]"PH \ 0޽h ?o \\\\\\\\\\\\\\\\\ 280___PPT10. "@   0 G@?@4E?(  ~  s * P   iF P   P N       <\" p ntlm_initiator_socket$0 N     T P  #  p  N?3fjJ?"P      0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B   0D N           <(" p ktlm_target_socket$0 N        T P  #   p  N?3fjJ?"P     0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B  0D ]N       <H" y Gsc_port$0 .N     `B  0DP Ph  s *>]" peN P p  P p  <,I" ps I sc_export$ 0  4N P p  P p`B  0DP n  0%,>]" pp  < o"@ RJB___PPTMAC11   hnamd` Arial&Monotype Typography  .P  0"p %4,n___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography D___PPT10$b___PPT9D< "Initiator Model (lt_dmi_initiator)F#0P2  l ! 6$"^L P  "# 8X # N?3fjJ?"P   $  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P ` , s *>]"=K` 2 s *>]"Ep" 3 0Tx"* V___PPTMac110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ ptransaction_thread(dB 4 <D8cMdB 5 <D8ch^, 6 <@!RJB___PPTMac11   hnamd` Arial&Monotype Typography  finitiator_socket 0  7 <UV___PPTMac110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ urequest_in_port00   8 0^RJB___PPTMac11   hnamd` Arial&Monotype Typography  frequest_out_port 0 dB 9 <D8c~+ % : <n PRJB___PPTMac11   hnamd` Arial&Monotype Typography  _ b_transport 0    2 ; 6]  u RJB___PPTMac11   hnamd` Arial&Monotype Typography  ` dmi_memory 0   jB = BD8c%,6 dB > <D8c! RR ? s *_   , @ <.V RJB___PPTMac11   hnamd` Arial&Monotype Typography  fget_direct_mem_ptr0 " A 0L."v i V___PPTMac110(   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography 4___PPT10 B___PPT9$ winvalidate_direct_mem_ptr(dB B@ <D8c p C <}.@  j___PPTMac11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <___PPT10R___PPT94, {+Direct pointer access to memory in target4,0 " dB E@ <D8cc l   H  0޽h ? $! 280___PPT10. "62  0 1100Kd 0(  d~ d s *.P  . iF P  "d P N   #d   $d <." p ntlm_initiator_socket$0 N   %d  T P  &d#  p 'd N?3fjJ?"P   (d  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B )d 0D N    *d    +d <." p ktlm_target_socket$0 N    ,d   T P  -d#   p .d N?3fjJ?"P   /d  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B 0d 0D ]N   1d   2d <." y Gsc_port$0 .N   3d  `B 4d 0DP Ph 5d s *>]" peN P p 6d P p 7d <İ." ps I sc_export$ 0  4N P p 8d P p`B 9d 0DP n :d 0%,>]" pp d B.o"Z: RJB___PPTMac11   hnamd` Arial&Monotype Typography  8$0 & d 6.":j___PPTMac11D<   hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography    hnamd` Arial&Monotype Typography <___PPT10R___PPT94, Target Module (lt_dmi_target) 6 2  r d@ <$"P)" d 6 ."-E P RJB___PPTMac11   hnamd` Arial&Monotype Typography  [ b_transport   ~ d@ H8c"E L P  ;d# P   0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B ? 0D N    @    A <." p ktlm_target_socket$0 N    B   T P  C#   p D N?3fjJ?"P   E  0e0e     ?B`CoDE F3f  jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||`8o@"P `B F 0D ]N   G   H <." y Gsc_port$0 .N   I  `B J 0DP Ph K s *>]" peN P p L P p M < <." ps I sc_export$ 0  4N P p N P p`B O 0DP n P 0%,>]" pp8   c   BB.o"RJB___PPTMAC11   hnamd` Arial&Monotype Typography  .  6$D." LDn___PPTMAC11H@   hnamd` Arial&Monotype Typography  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.  \namdTTahoma Microsoft Corp.    hnamd` Arial&Monotype Typography L___PPT10,$r___PPT9TL Router Model (SimpleBusLT<2,2>)T 0P2    z   <$"  P z  <$"PPP z . <$"01P z / <$"ppP  2 <K.  K RJB___PPTMAC11   hnamd` Arial&Monotype Typography  Htarget sockets (2)T 3 c $ T 4 c $@  5 <p\.  RJB___PPTMAC11   hnamd` Arial&Monotype Typography  Kinitiator sockets (2)T 6 c $ T 7 c $ @  0  Y @P R T?3fjJ?" 0 fB T 6DjJ 0 0 fB U 6DjJ0 0 @  0  ZP V N?3fjJ?" 0 fB W 6DjJ 0 fB X 6DjJ 0 N  0  [ P \ N?3fjJ?" 0 fB ] 6DjJ 0 fB ^ 6DjJ 0 N  0  _ P ` N?3fjJ?" 0 fB a 6DjJ 0 0 fB b 6DjJ0 0 H  0޽h ?U b./2324 56 57 280___PPT10. " 0 ((  ^  S     .  c $,;. 9 3  .  H  0ηo~ ? 3380___PPT10.1?! 0 "(  X  C       S 4 9 3   $- typical thingsH  0ηo~ ? 33" 0 ((  X  C       S P 9 3   *- aux processor is TBDH  0ηo~ ? 33# 0 V(  X  C       S x 9 3   X*Indicate which parts are TLM 2 vs. SystemC#H  0ηo~ ? 333 0 b(  ^  S       c $ 9 3   X*Indicate which parts are TLM 2 vs. SystemC#H  0ηo~ ? 33rx )0 Q2 4&G025YLOMT FRPW$Y0TUWe ȱY [hOh+'0 (4 X d p|AT Basic System Example(Anna Keist, Bill Bunton, Charles Wilson TLM2.0planTorsten Maehne79Microsoft Office PowerPoint@0K@pC@&KGhg  ,T%&" WMFC! <8?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      "#$%&'(-Root EntrydO)PicturesT'Current User!SummaryInformation($PowerPoint Document(\DocumentSummaryInformation8systemc-2.3.4/examples/tlm/lt_dmi/docs/lt_dmi_example.pdf0000644000175000017500000015266014342422106023367 0ustar carstencarsten%PDF-1.4 %쏢 5 0 obj <> stream xRn0+x$.F9IE㸶>K)| pH0vggGs`J2 ֻiXzv#rԙ Ops,kl*W:nYz;f c?4$אiΪ61:&V1Hu޾4M}瑤5z};6<5H DCR8- ̴6Z˷n=gEh+2hg"J=hȕciHe4|-[V}Sʷrr ]+A>;lXFE9zZ= ӽHI(=2t~& pI)\_vh#6^$ fSALśE%S K1iuF$LVu6U&o **p.Ɛ@A9I3!X^27о յ7V/$ڷ!u!VJ-S7%#1!/SR,ONr&C#(H1]ijqcƴt9b uAr[mvQPu1ZL9Pc2ÕA; kz+@)AamVgaֺUS:dendstream endobj 6 0 obj 595 endobj 14 0 obj <> stream xUYo1+hWZ~,␐h! I(ǿgm-B&7ٻ!KEDtUm*-UkA|,+μ>u%InoR]c;'qʱ!=b݂טdO#w1QgFBvYu4zeSyMiOWyXhŅ!%B@j\fU}gLp+Q@&9bQo }4º@̢[ZZJ+z65a@ ^Zqi:b;턣  &1 Пo2-FyG)ve 3/&x9";Np@٢c7HD`b BZ}f>ci?geFw,(됪%.4ݲǍױG0D0!Xƾ@qMm-+,kq"DH\=& C6(a/zU$~T> stream xWYoE9&(yǞH;tUߏXAH<8^C\lggfv`vUS]W_uY[Z{WYeʒ畍kr'>~[Ӳ:Q:\=[lo2guoq/dA_=P;GEA-ujU伩|;\ΪyLUTnOZ)zA4gi^׍n9^l&ycuZl &~n\KG6lX=,eN&b|LIU겶|ZgXy8NBh7-Q!aةiIdxl5!c,Hc˖̹xf<^5?-W,36rY_Mu\FrԁF`xflBk}Y)v vi;fnƈ[J)9'9ĎlڱPg)^m*T S1+žŮ?t<P4GJ^'k'_? {=DZcj ֺևE "{6UK`<5/1xu =l)H1@Cŏ1E6ihDk }Eq5Ǩ>D@& 8#ck y8YMTUwKj&uIR+n5 / )C7J:ec ܨp]hg) GeLL#I}.(ET}ϩԁ##0,9-Ͱ͸ut9;{hgd 6"L/,8p a㊃Tp&$|G/޺-(1~4vLuܑ^aUlހ;`7x=m;{-e^\0L9<ҿA;߫5X" +؝Lb6'̝-OX}%Tf&G.h\zGɬY'#.zلbg&뵻 mv䚙}qMo"_Nw7iG9sykߔ뒶cɝK(\Kv,c粞}KV%43ƒzOTsy |endstream endobj 27 0 obj 1248 endobj 35 0 obj <> stream xSn@[)_^ QKQB@6i#ح\T%l̜93^S)2 dM4?e|~-Op o3"{c^9>#>cM|I({x}{-ncRwrw5䫒%}]WF iiq JHb&4iQKᔳڳ[,CkQYG%`uBI"VF-WDMe1EmMs/lpm͹ٮF2 Sѳ;[>R }蔐g[D,+Ρo{YKHr#r mDfx񋌊jy/2} .r&'E8uY26Q{V@J;.AF0sD]T,qX\^C_'>L{K МM(%Z{qQ"-{"Q:9l D[.z*g"ZU$^&mt۠<*d=3Uݜ%Ѥ+ĊVx{$jdmi{}Цlmq?oŘډendstream endobj 36 0 obj 607 endobj 41 0 obj <> stream xXn7E_+k@4> Z1ZJ") EceK2;\.j-$$F 9s897B֪=њlQ '?YsBu;_MʹP+rn:ܼ<:M"w&nS3p]]UC*gm:86puA6D{Ԑ]4.Kl|@rC6aV$o-"دັ"\YIJ/@7TB yj8xH < J0Q>MP?؎J i?X'WqCHYfD[]d\*&G],Պt1^:6@;1M 2*\6CVCKCHƋp~B @`h]0-TRKu<6js _`|,}ӕ_ż%_Ԁ,!$+s1~<-;֚ď0,q -РYi2salVWec ^.һrE9RIx6ͤF7]_ 3Bپ%wcW_bbOQBؖ6I#^uj1_M+ì"Zwf̝ gfI'0+W1O,o/pr*~/"Y9dfڎo5&9r&'?I+ S|ӟ7}>gJ|A)pz:5OwWp1Q}^J{|yj6qZ-rAHEXfvK2J);{auL5endstream endobj 42 0 obj 1287 endobj 47 0 obj <> stream xZmO7b?F9/*QJUKzR?4ww^JA g<~fW5%r[]Ul+iaxZXԕ/k/۽i8`~o봑e.,;5eJÿ,W%un\-8AJuMF^Ϸo͛eln91ˆ$ZfD4K]p'YMQ$h0*JŒru%O"2&zP8׼oZ8XHO b XqtU;SDh%G%6%ImTo]}.j&ex1Ek,1:m;Dq 8^0Mw: w(Tu?-8 ,:H?#J iF[jZ؝ -KNƝhreHru B]eDž5jS\dLvY;'O^}=Khv6}'8 Xzdץi2JiX\|46eP5ڃ0 "U( T0D%0(p+iIc5,}S*DR& (h(sQQ}rc}gG!aE{ǪLLɅ9e\?>`1uBe.yE. \hC(xAljPcx2. +Tx6C6f E#m2cr3Y (և8WK0_?OEp!%]e {]51A:EEbOiO܊5x`USC2q՗U`W &"3Ü2# j)%b߃ yL w)t{6 8arU8tjrpBmg1 *ӫBib/$/sGfM>_oG.ڦ#-e-نD;p!M<3-˖]>2 XB#erң.mbBZݾ.,s5~V'l,|9F\Gq!%B:۬>tt_ؠ)`l8 I{ajB|3U&endstream endobj 48 0 obj 1269 endobj 54 0 obj <> stream xXYoEPWag"mCH<$k@؎׎7竞^ol-gB'aќ7~Q<Ϛ_h{yjC~7qގg L6dgq3raj7rx+>M)/ow+J2۝ClsC;thuvg 7;d-\uIws&6Vʽ2 ey+Lk!t#/ 0Jx۽:V \`A/S;|p><n/=@n .pV$I$&8IN t%%"ٝ%ݲ8cZ}tעOI:HET?!Ԙ,4\F*[;9 TU۟AG~Uy^40Ir'[7I P>m0$$;W@B~EvtL^Cz ^&IW`Z1h{ 8R B=4V1QYA4a0na8 xC^#)IMҋ$%iiLjLj%Svڦs9{SjkVJEעw?(SIer# F=n,m(AI2DzpP>m}IkubC9"DurK&lC?P(lE? 9<6:r:^3Igŭ 96[%iZmrwo@3Eaq\=4y)/ e>1-ՔgY\NdP9ہxm+蕋Cn^~$([-AV-< aL:‹[Tۀ#Y;`]n8xlA*mj$҈}Uh^9H%9C8OM^ >H3pO2.=pgg妔(Pi:Gp@Upu9LʦϼЇ搕gas:"Rg:nq9A*ʜ g^~.[w'bʾs50|LK Cz}Pyt?]jWZ^\3#ډMendstream endobj 55 0 obj 1567 endobj 60 0 obj <> stream xYKo>$hcĖvf줻WA9$ z\._gzzɕDrK𱺪QegFK38ݮ.WΘNml-\?w+߫UֳwY={z_e7i\56yp|icN6|!l}*7rpݗw\}nO+wFg16nmeӌSHvU`F)v 袉} }=NH믠Ȥg? O+$ں~WS\ؿ|dbgí;i % =eE }e;*c^—MEnx\Qcqk8`2ŐBfQVu~v 6\3j@*$C8Y4L?>H$DmEOs褢ḃ h+uysm\7&1_чj>֛vhZ90ox-IpIsJ\ O=MryLVSqHXAVt`eA8} 9R]È;RDK`1J@\ۊ=cCax̡alhޅfhX?mF}{hHsCհcv&$,h8IOpp m]D/E9nBa{"F7.п_d*oDG)a}=Ǥg9vGĭGϞ,rms˻\a͸{W׻eK{w7#zl\pxrtm>Mb`8bF2; }C0QCΧН>2oF++u?y@A]}G@cYԀ팽Gb X)cI0p & lƒ.DʱXѥb΅CNS i5vo^UȰmJfrC0; V\MnTm q=Y]#sj|8-J(7Hz["} icȤR29@h; Yk, .aR$4vYMBZkl / Aj`":=M袑 c#L5JƪɁ%aD4m%wi6 #_y_JV6XdfG-FĄRO P/dWuM']y)4l39}M;Mk60+eiADeuxm*쟃(#oϋ fvv5$anΊVŸn#NCoʼnG;F("# aA橬>'/FYqEBF5k$u7nMxW7{_;dz^%+ X>0Ȫ׹<syJW KK)~b!Ntى&NE"u+.Z Uv*u-gKotd RjO) G(;|cBL ihh]=I%U""b3J$i6Idhs(򽬙QjVcJB a/]K'ݿV cQ"{ 0Qt1Q8j*(JzRP`UʣuKxegc+H]vwxpO;n}i /|C1Qj:e݄TԦjTl #R둌dJ=/ٰk3{k/  wsim?؏LKf%HY>k'ÆdV`F J6NQ@6Uljendstream endobj 61 0 obj 2310 endobj 66 0 obj <> stream x՚ۯ]Qƅv"B "BF=}B"&C@9ζg-W_uggpҷ<͇ÿn./ѹ#(q{H_㛃?߻ϦnwëO>Wh'dH\NOyq>x?^]mЬ|s93Տ1l.e9[?>pX._V88OwgZI/9|:]i,vj\Q|+/YhU~[rӛ,&Ưфj{ U{ݪ֭1涕ƞ-N.O|қ[5-VvOcn>\Kt3?&,k]D be-ދQ gw UVS}vg _p-aQ=(ty|9$'BZubω=ͣt4""_X$խ]- ˤt z1&MneȽe0~֖A*_ L2/tylSʦT2·@l2ne`mp^j,瓾v$}vg߀ڵ-KIwkTSӗ!D-$~7%5h13kゔ {`'?*nƔ^C)A=LMbZٶ!sy Ҡcy5"AڼOJk'nKtOrFUR}s~C ɖb ReHTs'nj;~]GMBNes2خКCDCrM3(BF[\ ALBؗ&EwXdW]U]E_#Ʒ¥wE-U m 7h4c@MKόfZ$غA,[wq~zRGU&NW"zCϩ +Y,QjH)ʜHk<ɬw=*(e[dȸ+V9H"i<)K0]Zc!‡3%jۋ(Gs9j;v&s-`UpѹlUk/?-G`TT\Dsr-j}yc$ N$y&)=ZH"# +=W17!f؇4\j虢TxFrfƣܘ:οpVnR@ߐbm(J )r 2c_uFE/$mWbizm$j[ I$WՖ‡2ZC-RwbJPDܾveV)}BJ<%ܯ"Z=9Hk-GϏ$d|o~4 j"i6a·.g-I.,Jʯ>!/Mqg';Au_/*9ɼH9<{>}1;w׭g["Sc2,f\nL aȼF*J:mox`^#'j}0RڑPQQ }gd2dk)"ExWϐJ `vKe)eaa7dͣ?p&CC;?8gUfZmaXO aLKQ}\ڥ/\ww]a߼?.y>aqd\]/2+Gە;z+RMc984pa$NVw]o > >/>~MoxǎWreL/>l hW4nn8[j}30]ewooq7x ECviֻ} /L"e >/l>2M 7.usQ*Y(>)n ̇}*Sr7nIʋtw/K=d:ǗhdauYN["~nw4u`jU |UUiz)ьT__)> stream xW[E~0CD!<w쮾!C|P !9~շ9{6{K,V׭9$SMw)!zuNy=?ڰ^pW8ǃAtwYwK;BG?,^:?)O7|^$t:>{&W(&#&;r74 HSNe$CE)Mnэͨ&ë(#]K5TYvuE7(IE穼AvpR^WYK@۷@dKl6\8rI \csQ) 4b KlfAS67%财bw{c6Vj.2@2RI~F3bGTrE"!3V*Jx9[(x@y)*az XF=_o4hj|%9j?@9do_9qex`&'P3{٭늎*_ћʿו?V*0|]eTld}SXW!TVte~PM@B^d _FZ TƆL3+^w Ż֦*vpn5`M)@Z p0nXRi/N2ewC qy{čH.m(ZMAکtF,֌q^h0%:J' V1 cd,g SM]9cUjvMNVޙTrd*5%Lͷ>]ywb9\~SF&i+qXة+v7si#l{Mm]FxMm]NzmJ_۩Wendstream endobj 73 0 obj 1456 endobj 4 0 obj <> /Contents 5 0 R >> endobj 13 0 obj <> /Contents 14 0 R >> endobj 25 0 obj <> /Contents 26 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 40 0 obj <> /Contents 41 0 R >> endobj 46 0 obj <> /Contents 47 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 65 0 obj <> /Contents 66 0 R >> endobj 71 0 obj <> /Contents 72 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 13 0 R 25 0 R 34 0 R 40 0 R 46 0 R 53 0 R 59 0 R 65 0 R 71 0 R ] /Count 10 >> endobj 1 0 obj <> endobj 7 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\276\272\000\217\214&\246\243\023wt9_]MSQV0/s\000\000\231$#|GF`kiC\232\227\035\262\256\n\030\027\206\f\f\217\203\2000;:i\020\020\237@@\263\200\200\314``\277 \246PP\271\277\277\346\317\317\354\357\357\371\217\217\32200\254\257\257\337\337\337\362pp\306\237\237\331SWcwxB\006\007\226\232\231!,/}\254\252\021!!\202\243\241\031\265\262\bwv>\\]V>>h\210\2112\022\022\215>AqYZX\200~5\f\016\224MM]\003\003\230PP\\\t\n\225\030\033\217 #\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xZЇ #23;aI/76Cz*ʏQ0DZבnC V ]+iV׷EԺn s$bO{TנYCO'Rj|h$vZw>]2x|%|t&vٸWSF;j<`S#PG|$?[hPRbE4V/)Ỻ*RZu3T\\QSҳN>nT\UI,S\BbN2`zˊ4C}T,H3) 8SqC|=O23W=t>keهP;SK5ӭ^9Y݇FHewmʖ>v'ME?cMLqo;nw8|m4|`Bw8tw6v_;}gc) ;O M0/E!3\ߎD4b3:(yjg-e8vPQ2ϨBFg͆ꛣkF?a9Uez*'}2Il=avc31NE2a,3JN7sLkE{tzf1<^|~׶ydW^wϛnw򫙕"b-z{ÜG.oQ1ڣ|R,w/VU UaކV, ,[wzb2q>KT̏:?q)xuŨ{"ґ)<٦UE'X&cxso;vՙmSQYjnWp_}_?ſ#ZoFP9RxsPVX6ZSskO2:Y_,1|HBW.zB,Sӂ]ׯCr r9fRu+x)V:f2jD91. 'MKߊVg-F=GoT0 }$J)TK%UmQ|^M`zʛLME,ʼLf];Ƚ=*q,(rX/c}bZX,1*2CQB(ի" lxd&zsӤ}2pFZ\r7LTc(ۅt6%LaA%VQBqb:m&h f+fnwNdYwo,?>sb:ڞc&;ܮUg;-:G/v~3{|ij0,]<|iݘ $>sKq4`G%!Qe4_k޴2ڛR]&.1{OV߾Q?j߼nb4xfe0SQ>@||.{Ient^bM`St'^U{?zJzhكY\Q}uvf%(KO%3uN%c<6^.Nb5|gYձ?kSXwЇʗ~oT^WɳlٛY3\Y;^%2}RYľ|V{'v2Yx6{gs-?H=[9b_C 2ɗy%=ʣBb7DؑP.z~2 vuDV.l@J\D :۽|zpt,ЎrI>YxYyBMH;1,Z,#QqqĞv׎GNOzT}a,7f={UJ{Z(*G/Htϱ,oMSG)$H }$uӎ6A\ϖCO ͩ^ >B }=X.r]o헬&՘mU1e5e`ιᅦ>s|rm{oYe؋ws'|>ߴ;Iߕwi#E{15zڃB _[: -(Ǚی%tE̿l. "zaB(]q@int} oq䍊 {0 eWzq31v#7CO1w/i$)wۑ9)Ü)1 m\z7 FS ;)iiWiwM@J{ Z)]u /"ZORv(vs@4{]=.ˌ~Ye>Y7=T͔-{Q53 UɀE!r$j<> endobj 16 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\357\356\277\373\373\357\363\362\317\347\345\237\337\335\200\326\324`\316\313@\276\272\000\322\320P\367\366\337\343\341\217\306\303 \332\330p\353\351\257\302\276\020\312\3070\346\342\354\316\305\331\301\267\320\235\213\264kQ\216x`\227\332\324\343\220}\252_C\204:\027h\363\361\366\204n\241\251\232\275S4{F&q\265\250\306|i4\317\317\317\217\217\217\200\200\200\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\235\221\032PPP\257\257\257ppp```000\256\246\r\266\260\007\215}'[@NlTAcJHB!bt^;K+[\204s.\245\233\024S6U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 18 0 obj [/Indexed /DeviceRGB 255 (\000\000\000\377\377\377\373\373\357\357\356\277\367\366\337\347\345\237\337\335\200\322\320P\316\313@\312\3070\276\272\000\302\276\020\353\351\257\343\341\217\306\303 \332\330p\326\324`\363\362\317\317\317\354\277\277\346\237\237\331\200\200\314pp\306@@\263\257\257\337\337\337\36200\254\000\000\231PP\271 \246``\277\357\357\371\217\217\322\020\020\237_]M\317\317\317\217\217\217\200\200\200PPP\277\277\277\237\237\237\337\337\337@@@\020\020\020 \357\357\357\217\214&\257\257\257ppp```\030\027\206000\246\243\023\262\256\nwt90/sGF`;:i\f\f\217SQV\232\227\035kiC$#|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)]endobj 22 0 obj <> endobj 23 0 obj <> endobj 19 0 obj <>stream x݉vFج6ƀ؄bڤqcuo h=}d{hD$~/JX*+jVW*Rd@nP|.U*5SÀ׊M;jJzHTH4/\J g7 lؙf E܃' ᮳݅vk Pr# ;5YCTJH@7j ڮ?SP(S&+LϘB ;XqŻ8[ꞏVݑ o]kYP)x;yZhxS[پpS8l' D`,'փ3olMFb #q3+kb|0r !qܫKbђ=+w)ociF #OS+_roONNvF k)c2v85QēDvNq֛5uoKB. sݮg^&lԊL fEԓw'o)em&_uA4y-I4F׎BUTz\ZWd29g].#&,)'ɘMi kQ-ۧoO ӋV؉W":P';[ǜB]59f/ B9y 7Kw "'p|a?L{vi0+ "96'QC9Zeu%A$'nlޥsLJQWD5j2"/<+\3(<RT9n(VgrcHx%5lS;ƶ$)SOp[mUnּ.wpx{z{{ݜtMJvſT5rc^+Ƚ)r1wi#YvkXWb:j.CXYCjNZ0fxR˜+FV{J/9=ob~}E+fM~V,һj67_֭sF}Kp=gK-smݿVUq\(1i(s _r.CbZ)l?X?N`ù81o >@y  3~> =7rtE.5&_ M獲SCzC\, q39S(Rj?oc/n{8_{6tGmjgJ!~?jЍ u\HPO#m.uOki^.ˍgOA1./QnDPk@;-EÛ/eEA4a&!s!uV""O5 ܉TZyf;:57Ӿqk=ZkUx{isn4p D-i"59~+ "tE*ꊂn6߿ꂂ&󆺠 R홟7y bpuu=A A-րA]NQY&3JAb n4~}M]@On}Sἃ˝ 򁰾۷K.=-u@d . endstream endobj 17 0 obj <>stream xi[XUnK#*K0=U5$,aAyO$WpΒ(jv]wʈ8ꭢΪ班[ J&箓/+jh?ZE/`Xk or^˨c1Fވ/}*]4yQi&٬D/3B_kX~x,+/(GSU_SEV<oְ11/hxJT͋`#ER{3G^ְ9MJ6t6k^zyh^ 6⭼Kf_Gְz7}j@714{ETdkpwݡLbQ象 >&/rCudʼxeǨbSy qc{r޾]//VhF3ՋW|E})#B_kȀB//R4o6׋TkyQ^z^9ZUGFԐJRc>wҿz'|Y$UF፻wݱG,'C=Y}BlO+tDɂv)>@舒 i4X(Ǥ{ل(3ݪ}ߛBlH NI6d`'l$+{k"&Yww%5BGHO~vIvpso%˿':dt[ e J$;:dJ;g|BlI`wkCǑg&RHBb"{{kCǐ oX|CH&Z;tɦ:_ҵTQ?Z;Gf}KFa?:۱ :2mi2 endstream endobj 24 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 30 0 obj <> endobj 9 0 obj <> endobj 79 0 obj <> endobj 49 0 obj <> endobj 20 0 obj <> endobj 80 0 obj <>stream x]=r@ F{N صg7̏my==f[uY?Nn endstream endobj 28 0 obj <> endobj 21 0 obj <> endobj 77 0 obj <>stream xW}pT? |Ҭ[HaX5ɎuC좖|`"A"0Y n-JPрDEtl:-TNkt:sMRb[3xs;odBnm,V>m-c]l K[7/:]w%&R gjk{[Wy7`vTo7o9uvnh?߇]nSo_+W׆ME?/ۻ6uuk$k0}ϠGaC LlĠ~l#Y hoF3UhkA&V}i˺ s!tHA=^)8ş`.(C2FC%|||_I" r}r\hq9-l Cs2ni?5i%GP;1 73Ѿ8r3;Uo % GH? Cz2\u.?eQ!},BQVOh ƖABСn8Fι,e+`?8)8c9x.d*" %l#;p=z=q2DN ЙN^r;}o_(~60{)Jt^&iTܩ6uC}.J1zXY`&[a7$]KPFJz<.JYMd=DLf y c;(sO/3K.RӒB#Q8}O=Iߥcrtv Jma ;α17tT%JǸTfrP^.#o{'DcZ%WYR+C{%uBjڭVGՏ#F{)ynKx_w*ePHieu:g6ٸSA,bC2Oal ϳj79ɢl%b=cڣFՏp_r:,{]7z#i΁&ݠ>Ļv$S6r=Ka;a!L̆YxeC̹~uEkUrsY2v*(RfqԔZ1TĮPDMU>^\5ONzzJu0Y1}ՖN&vn|BtDunO>ʰ5mvO)0R$PE (h8+:ǧ`" 5>񔚤h66J,1S;x:ЫJO%-q;&E%͆ϼO0y)lj 4C}:|>ZNMx>g7b Aλ.o_iu:gmtƊ%e8Ii ?DMQm'f&LX>ZX=#DSp\F$*=Cu^nSrfNMo82lMڬ[8뉥&|FFSoq&aäEjDK%a\\h¹o\4`}:U(E L9O͒s~RZY_)6FS7d Cen7a/4cnj7E_fQDLS+%>a|tS+d9sM 6aS\c^Wq4 UL$HDtНF" &щӧz]/NpQb5ܚ0sшhQxC-z7X34&(=0 Nl-G?M{@]r5o>LoQ;R쪲[.:!d2YYMϸ`79QK,a7K}Ho^4;N>(<ea]>oA;ȝ3p䑿Wƥ~IzIr`x[ic):.'(Ujᅎc!"ol^K|}>'7Z9~[ VusW+b$I,yzLL ;pC0(7~nhR'd-A;82Cr:&? endstream endobj 29 0 obj <> endobj 78 0 obj <>stream x|{|T՝95wޯ$3{&AsɋG0($Tm"J[Bmm! !V[tQX~V]= An|~07={sa o_"k)޸_gDc-7#rkmtuW߰V/b]tʪ^0CHy\^ݷzr?=ƕk`z*Vn\o7}lQڠ7B~!G6.>$3}}'˜{C0:E0z^A4~&nAwoku{(н݌mh7} =#)^*c i| <^ljI#vj/83M0K2fjV7>1^FGb--m3{ ->t.!šN}tIz݊DLE`8ߌȋ|!j'~r1IfRla|yCptkQ+ASଛ]Y;1Akѵ}l ih kat-:GopG[)>Q/p0ƭ@ </򴎺5UXe<24\R\TX 9Y>r:6E&AjcJqعߣ `Wz>KSzI'e}> 9RȞj 56G-蘿-)DނmsM )OcOw7h IT˹:}cq4}LK ҚJSpo&eCJP< Zl[GvMnB0,Ɣ7>%LKGvЪ'ԳJJ~7v<6HqpzAM73D Pz5vpmNY©cg}fݹ@j߂ɭArrÄw6 wTY Vy6o} .:ڵ?sgsOgeOƔA/ci'] KR;@ G[ [v6V6Ot5Pќi ̆)3]kiM ڹ2O èG|) J֬Tk|DPKΝ-@+VRh֝0jhTˮ݋ ,L-2oz,`x$pʕ00n XEњ 4`0H!N>V =IHű dZ&w-1)mğ(9mͽSSW()[c'c҇AS0E@B));G|]PoQu@ .Pjԕ>Vݩam]A8X6]DwJONK2ߚQLpecvtt2inڟmɴ! j%\>hia zz#ZazQLuR':+#tB7[Jj4MPƒ$$O@3f&Y Zp'EeUt^Fy>~({G(ᜀv(^4]uՃV VT >@/>?CaKxK8:(ItDT'# A;T@} n0R ԙ(2R$ z=~ku x<`]y`"EQ>d*vb;`Pp{.==3==-6{8* @à8z3>rS`ڠ\#!{ϗøX ϯdz\,~\ W\8:hGf*\PrPGp 0Pa #WuWKp_̯kkf@z]gj( G<8p`p`j3s,߄%%Lc%cxG1Շ/QN'#.?~8r8^SQ=ii鉠1oH,π"CIģhe2cX<\L\YUCgBpP6ԉUmg6& 'Yo mM:kUXomj-ck*Kz`T]bvbajU%#- ,۽[Q}2_jǢ?1ȅ-K~=z~8`>o{(v,g4V!"8v(>O?qQ% n1t q"#);ΌTs,SQ|蔵v4lT†og!t kH }.wRZ)f ]%6ޕ)!t 13xQH`1ԄSޔ=&<P&еmo3-ah }93m')tAaгͽpD3Dk@ !R"'8IOAKВ' srENAW{9l9MR5&'WcrgLY Fm96D8$G+#zHT$+0Z]8VbN?*`n~K tJ?ҿ{7s3l:+#K! 6Vg:]o2Z1g&01GCzA#kE. 4|thB*k<+V=gϙ6m0s>t)}o`۶S)CȈnCc B3Π5:C! 5 F@l2 άdFHVkX XձDedѪJK+G߿CCþ? 11ǟCFқ zUj[\Cek\ݾ-|7vZ~T]P &ڳ,/~3ߙ5ЛH8U = 3&(OT !-rOJ(waTC sCWV7FK XyS̼~z/|99>';1c`e{aO'J/xXhcSYXѣ/24[-(hcZ,:B ZDY/S:IFH(* |".g&߁NtjA2 (/p?$xF*rT)k$o30 e# 8MOLX4 j N '@($D?E &+ Y*zKoowٓ^o߻w9}ugGLvF ZgG־oS[ÿ{?( ߾|m1Tmc?X1.,\ 0/'}(7Ee".zVd^g+iY,r\2b\\lDmfƌL(bVhG%R SPd!#%tRyDXRr1ҖV d.|yϚ˰֝MY-}%o- c;M*^={kv8AfM)JrϙysGƶZbI4i ^(d b-QnQ:B0JTeQ}64J3'TI#WQ.>Lkا̾>6łJR ,9AD+!WZB;vQ=܏|)G1,Z*z ֣¥b0Y"6%ӔGPmRВe Qȟ^ T4,ٵDkJv_h$k XDna^ϰ:r\k:8  s8AbV706-x{bSB4}#`\:>5ޚ=!zbH#i5FsNkiQ3rFVS_C8A 2?I K. "2vml6?=~E˟WEnN>pwWqʇ{?]ZQ-s=\-W/BS9#&xm-*ʋA -q96p*邊>͊7 a#1_d|@W#tucub=T9'gqE*E*EHEHEHE=uf#Vƹ㬵m^Ñ;klwֹs[޹#+S*7ٌ{p)6<Ǿwٻ7뤛"0HxcL0;&Z gi":Gl~MF_}$$iT=ϰ9?x 3>(m@}ƢV +ۤ#8D⋬N܋/8;=.zxx޼e~wEY<\K*_q5,س9-dlÀI zHOYiy 2 QP%OKPXoU,T8Q12Y&ڍ!F_P DH.D.^GUGG`$8\jHMP'yTŠSS}ƫs#Iɠ :wF&3IS}?+@NOr5 xld=YFSo^KJrk|&&ϯƽiȃ}5,U{$:,SX8I?UMc%= ۏRNXKeG$0waAs؉qQx >b@FCD:,!ƓUWvNE"eU6,NCܟVKlUZ{47+r[(y .0r1؈oroQ6JUp >ΉZM/Kz8GDBv^6QmBfAL&[cx9&$Am)?CFxddW8 LsEyЪ5]>/i 0W̭l^6ZKs'Q(MMNU1~DM>/ԇ2môin:ncS3!J%3gh(fEBkBP+wmsf:LehRKd$2k$*)RN-h4ސ2Z,ajB8W3%v0S)jsS4E`(EMG)ed-Ş.EKjq+:5͸は>瞯ms^^?{Q~!>{\'uQ!nAaT כ(X=~S 0e" PLF&SYiLC)RrTX+ ksԴjp[V:A.iIwB$5~\2j2oLlr=i`5}zn]]Ht_34D>]Y# ksrٚJ1#/eq/Ck/x, жVB 3@?. ǏRZLRBǩ.Ĵz_Ьm\+qmgg㯚0I"&AK\J4W irvi_<)StҀFK^:d8HDYU]X&]uEbE-}w ۜH3v o۝5!+.6spY#ONM/&iJqͫ8 ouּ O ;H& Tښ ƙ1֚HZ3!b|#šKg%3c $ZRqL&:K-*XӱJ&u:&-3A:Ƌ(]Bt6Tkl֩-edDCsf}M u6M4LD`,%9âõpffw<0~QpNY-OvpXŵoXZD4uojL7x4.cE*q\ͤ$NPS2y6uK S\c̥]u0f VFt:-j[x嗹/R+5*.,5p`k ӏL&,uJk X&2)5O)O ˄MG uɞ"w:V8,|ު#39@Ą @KQ0 iuk3zF&LZ6^"7)Z*$؃ZMXk$ȍƴ#( qe8PNƕ+98㛕.6ߥɗBwgYO 2s9d'}W!v_Zx[{(?^(|$ԀuϨ| 󜚆BgC rYҊZv Yd΀fћ> W]HbT&WsDsd&Ő覩ˡW">HĖ2QS]}2-Uի$}"m/.$K!GIA֯zr4ΆBX8D f/j8fTޫ󚵊( RtHD V>ş \J:hVG;hw)H|{K pTRv"ĮKC3(6>'1[31;Li&q-Y[K*[]~QFK$0T.,XnŪhkƂ(ck׾lk֞ [Gmmoʩ[[;&L 2v$XqFdP&)E2:\Hy^(*PUћ@EvRf葴b^c}Pb:gIj:`zi)sUTɤ2˕f߃>&  ~fvF/Y0I5)Abc]SΟ>֟ҟ`ۛoak޻LI>a qU7w_}W% LpsiR6bX{>ixKx?3-Cf;cpi2ejU=gUXE\6 gsgt RAr`dth-r4;@w~4S+fT;yESu<NúFe˧F-DnG@SԆ0.YϬ)[!qۋ]u:`w)׆o> Oq9;'/ z6 x- F3dSXAnV];#/y;2Qa4P@sj 76SVn5.~V~8|}ݳo)/\9^ݿyi]זղ ? x`.=<3۽ )Rfa>\?P鉄ox'I$Jn'!zYu#[ =X]:T8e@!!3V#GF$Ģ֯hWhYmH6N&6D4օ $I#.CcGqK~\kpWW'/=߻̵ Ǐ{VrVma' yOto3lt/̫ͫDx4ll [/%G1u.q|\>.q|\>.W`BZ#嬣iYW 3 ;K,_2#<ϏC#!pEP9́JP%jB4 ]x4vԀf Q-D-@P>Zfԁbuf#+ЁH }W݈Gڿq_wg ZX ] e_+r85\@La?G %  5p0)eMF;u\cvl oE;h;) RuZ2cނwFa䀶+(W~lG?A>!W"zbKXSnu?KDd endstream endobj 81 0 obj <>stream GPL Ghostscript 9.04 () 2012-04-30T18:51:12+02:00 2012-04-30T18:51:12+02:00 PDFCreator Version 1.2.3 The TLM 2.0 Loosely Time (LT) with DMI System ExampleJack Donovan, Charles Wilson() endstream endobj 2 0 obj <>endobj xref 0 82 0000000000 65535 f 0000018019 00000 n 0000052183 00000 n 0000017896 00000 n 0000015938 00000 n 0000000015 00000 n 0000000680 00000 n 0000018084 00000 n 0000021019 00000 n 0000035537 00000 n 0000020959 00000 n 0000020989 00000 n 0000024014 00000 n 0000016132 00000 n 0000000699 00000 n 0000001481 00000 n 0000024044 00000 n 0000031916 00000 n 0000026954 00000 n 0000029967 00000 n 0000035761 00000 n 0000036622 00000 n 0000029881 00000 n 0000029924 00000 n 0000034302 00000 n 0000016328 00000 n 0000001501 00000 n 0000002821 00000 n 0000036333 00000 n 0000039441 00000 n 0000035469 00000 n 0000034343 00000 n 0000034386 00000 n 0000034429 00000 n 0000016524 00000 n 0000002842 00000 n 0000003521 00000 n 0000034481 00000 n 0000034524 00000 n 0000034567 00000 n 0000016720 00000 n 0000003541 00000 n 0000004900 00000 n 0000034619 00000 n 0000034662 00000 n 0000034705 00000 n 0000016916 00000 n 0000004921 00000 n 0000006262 00000 n 0000035696 00000 n 0000034757 00000 n 0000034800 00000 n 0000034843 00000 n 0000017112 00000 n 0000006283 00000 n 0000007922 00000 n 0000034895 00000 n 0000034938 00000 n 0000034981 00000 n 0000017308 00000 n 0000007943 00000 n 0000010325 00000 n 0000035033 00000 n 0000035076 00000 n 0000035119 00000 n 0000017504 00000 n 0000010346 00000 n 0000014368 00000 n 0000035182 00000 n 0000035225 00000 n 0000035268 00000 n 0000017700 00000 n 0000014389 00000 n 0000015917 00000 n 0000035331 00000 n 0000035374 00000 n 0000035417 00000 n 0000036819 00000 n 0000039656 00000 n 0000035622 00000 n 0000035895 00000 n 0000050285 00000 n trailer << /Size 82 /Root 1 0 R /Info 2 0 R /ID [<324FB7606B84438BFF0E3EEFA4A67F86><324FB7606B84438BFF0E3EEFA4A67F86>] >> startxref 52910 %%EOF systemc-2.3.4/examples/tlm/lt_dmi/CMakeLists.txt0000644000175000017500000000531014342422106021506 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/tlm/lt_dmi/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (lt_dmi src/lt_dmi.cpp include/lt_dmi_top.h src/lt_dmi_top.cpp include/initiator_top.h src/initiator_top.cpp ../common/include/lt_dmi_initiator.h ../common/src/lt_dmi_initiator.cpp ../common/include/lt_dmi_target.h ../common/src/lt_dmi_target.cpp ../common/include/memory.h ../common/src/memory.cpp ../common/include/dmi_memory.h ../common/src/dmi_memory.cpp ../common/include/reporting.h ../common/src/report.cpp ../common/include/traffic_generator.h ../common/src/traffic_generator.cpp) target_include_directories (lt_dmi PRIVATE include ../common/include) target_link_libraries (lt_dmi SystemC::systemc) configure_and_add_test (lt_dmi) systemc-2.3.4/examples/tlm/lt_dmi/include/0000755000175000017500000000000014342422106020372 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/include/lt_dmi_top.h0000644000175000017500000000506614342422106022704 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_dmi_top.h // /// @brief Top level interconnect and instantiation for lt with DMI example // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Anna Keist, ESLX // Charles Wilson, ESLX //============================================================================== #ifndef __LT_DMI_TOP_H__ #define __LT_DMI_TOP_H__ #include "tlm.h" // TLM header #include "lt_dmi_target.h" // lt wih DMI support mem target #include "initiator_top.h" // top for lt with DMI initiator #include "models/SimpleBusLT.h" // Bus/Router Implementation /// Top wrapper Module class lt_dmi_top // Declare SC_MODULE : public sc_core::sc_module { public: /// Constructor lt_dmi_top( sc_core::sc_module_name name ); void limit_thread(void); ///< limit_thread //Member Variables ============================================================ private: SimpleBusLT<2, 2> m_bus; ///< simple bus sc_core::sc_time m_simulation_limit; ///< simulation time limit lt_dmi_target m_lt_dmi_target_1; ///< lt with dmi mem target lt_dmi_target m_lt_dmi_target_2; ///< 2nd lt with dmi mem target initiator_top m_initiator_1; ///< lt initiatior with dmi support initiator_top m_initiator_2; ///< 2nd initiator }; #endif /* __LT_DMI_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_dmi/include/initiator_top.h0000644000175000017500000000743014342422106023433 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file initiator_top.h // /// @brief header file for initiator top for example with LT and DMI // //============================================================================== // // Original Authors: // Charles Wilson, ESLX // Jack Donovan, ESLX // //============================================================================== #ifndef __INITIATOR_TOP_H__ #define __INITIATOR_TOP_H__ #include "tlm.h" // TLM headers #include "lt_dmi_initiator.h" // LT/BLocking initiator with DMI #include "traffic_generator.h" // traffic generator class initiator_top : public sc_core::sc_module , virtual public tlm::tlm_bw_transport_if<> // inherit form TLM 2.0 interfaces { public: //Member Methods ============================================================== //============================================================================== /// @fn initiator_top::initiator_top // /// @brief initiator_top constructor // /// @details /// Initiator top module contains a traffic generator and an example /// unique initiator module // //============================================================================== initiator_top ( sc_core::sc_module_name name ///< module instance name , const unsigned int ID ///< initiator ID , sc_dt::uint64 base_address_1 ///< first base address , sc_dt::uint64 base_address_2 ///< second base address ); /// Required and unused virtual methods required for hierarchical connectivity void invalidate_direct_mem_ptr ( sc_dt::uint64 start_range , sc_dt::uint64 end_range ); tlm::tlm_sync_enum nb_transport_bw ( tlm::tlm_generic_payload &payload , tlm::tlm_phase &phase , sc_core::sc_time &delta ); public: //Member Variables/Objects ==================================================== tlm::tlm_initiator_socket< > top_initiator_socket; private: typedef tlm::tlm_generic_payload *gp_ptr; ///< Generic Payload pointer sc_core::sc_fifo m_request_fifo; ///< request SC FIFO sc_core::sc_fifo m_response_fifo; ///< response SC FIFO const unsigned int m_ID; ///< initiator ID lt_dmi_initiator m_lt_dmi_initiator;///< TLM initiator instance traffic_generator m_traffic_gen; ///< traffic generator instance }; #endif /* __INITIATOR_TOP_H__ */ systemc-2.3.4/examples/tlm/lt_dmi/src/0000755000175000017500000000000014342422106017536 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/src/initiator_top.cpp0000644000175000017500000001203614342422106023130 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file initiator_top.cpp // /// @brief Instantiates initiator and traffic_generator // /// @details /// This module performs: /// 1. Instantiation of the traffic_generator and the lt_initiator /// and the interconnecting sc_fifo's /// 2. Binding of the Interconnect for the components // //============================================================================== // // Original Authors: // Jack Donovan, ESLX // Charles Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "initiator_top.h" // header for this class #include "reporting.h" // reporting macro helpers static const char *filename = "initiator_top.cpp"; ///< filename for reporting /// Constructor initiator_top::initiator_top ( sc_core::sc_module_name name , const unsigned int ID , sc_dt::uint64 base_address_1 , sc_dt::uint64 base_address_2 ) :sc_module (name) // module instance name ,top_initiator_socket // TLM socket initiatlization ("top_initiator_socket") ,m_ID (ID) // initiator ID ,m_lt_dmi_initiator // Init LT initiator with DMI ("m_lt_dmi_initiator" ,ID // ID for reporting ) ,m_traffic_gen // Init traffic Generator ("m_traffic_gen" ,ID // ID for reporting ,base_address_1 // first base address ,base_address_2 // second base address , 1 // nbr of active transactions ) { /// Bind ports to m_request_fifo between m_initiator and m_traffic_gen m_traffic_gen.request_out_port (m_request_fifo); m_lt_dmi_initiator.request_in_port (m_request_fifo); /// Bind ports to m_response_fifo between m_initiator and m_traffic_gen m_lt_dmi_initiator.response_out_port(m_response_fifo); m_traffic_gen.response_in_port (m_response_fifo); /// Bind initiator-socket to initiator-socket hierarchical connection m_lt_dmi_initiator.initiator_socket(top_initiator_socket); } //============================================================================== /// @fn initiator_top::invalidate_direct_mem_ptr /// /// @brief Mandatory virtual implementation /// /// @details /// DMI is implemented in this example but this implementation /// is not used and is required for hierarchical connectivity of the /// tlm socket // //============================================================================== void initiator_top::invalidate_direct_mem_ptr ( sc_dt::uint64 /*start_range*/ , sc_dt::uint64 /*end_range*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); } // end invalidate_direct_mem_ptr //============================================================================== /// @fn initiator_top::nb_transport_bw // /// @brief Mandatory virtual implementation // /// @details /// Unused implementation required for hierarchichal connectivity of /// Initiator sockets. /// //============================================================================== tlm::tlm_sync_enum initiator_top::nb_transport_bw ( tlm::tlm_generic_payload & /*payload*/ , tlm::tlm_phase & /*phase*/ , sc_core::sc_time & /*delta*/ ) { std::ostringstream msg; // log message msg.str (""); msg << "Initiator: " << m_ID << " Not implemented, for hierachical connection of initiator socket"; REPORT_ERROR(filename, __FUNCTION__, msg.str()); return tlm::TLM_COMPLETED; } // end nb_transport_bw systemc-2.3.4/examples/tlm/lt_dmi/src/lt_dmi.cpp0000644000175000017500000000450214342422106021513 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "lt_dmi_top.h" // top module #include "tlm.h" // TLM header #define REPORT_DEFINE_GLOBALS // reporting overhead #include "reporting.h" //============================================================================== /// @fn sc_main // /// @brief sc_main for lt example // /// @details /// This is the SystemC entry point for an example system. The argc and argv /// parameters are not used. Simulation runtime is not specified when /// sc_start() is called, the example traffic generator will run to /// completion, ending the simulation. // //============================================================================== // // Original Authors: // Charles Wilson, ESLX // Jack Donovan, ESLX // Anna Keist, ESLX // //============================================================================== int // return status sc_main // SystemC entry point (int /*argc*/ // argument count ,char* /*argv*/[] // argument vector ) { REPORT_ENABLE_ALL_REPORTING (); lt_dmi_top top("top"); // instantiate a exmaple top module sc_core::sc_start(); // start the simulation // sc_core::sc_start(2000,sc_core::SC_NS); return 0; // return okay status } systemc-2.3.4/examples/tlm/lt_dmi/src/lt_dmi_top.cpp0000644000175000017500000001217014342422106022375 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ //============================================================================== /// @file lt_dmi_top.cpp // /// @brief Very Basic Loosley Timed (blocking) example with DMI // /// @details This class instantiates components that compose the lt_dmi /// example system. A demonstration of the blocking interface for // TLM 2.0. The same (or similar) block diagram is created /// for additional examples, but with different components // //============================================================================== // // Authors: // Jack Donovan, ESLX // Charls Wilson, ESLX // Anna Keist, ESLX // //============================================================================== #include "lt_dmi_top.h" // example system top header //============================================================================== /// @fn lt_dmi_top::lt_dmi_top // /// @brief Constructor for the top module for an LT example with DMI /// @details /// The construcor method /// 1. initializes the instantiated components /// 2. calls the bind methods to connect the example components // //============================================================================== SC_HAS_PROCESS(lt_dmi_top); lt_dmi_top::lt_dmi_top ( sc_core::sc_module_name name ) : sc_core::sc_module /// Init SC base ( name ) , m_bus /// Init Simple Bus ( "m_bus" ) , m_simulation_limit(1000000, sc_core::SC_NS) ///< simulation time limit , m_lt_dmi_target_1 /// Init target with support for DMI ( "m_lt_dmi_target_1" // instance name , 201 // 1st Target ID is 201 , "memory_socket_1" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(20, sc_core::SC_NS) // accept delay , sc_core::sc_time(20, sc_core::SC_NS) // read response delay , sc_core::sc_time(15, sc_core::SC_NS) // write response delay ) , m_lt_dmi_target_2 /// Init Target with support for DMI ( "m_lt_dmi_target_2" // instance name , 202 // 2nd Target ID is 202 , "memory_socket_2" // socket name , 4*1024 // memory size (bytes) , 4 // memory width (bytes) , sc_core::sc_time(20, sc_core::SC_NS) // accept delay , sc_core::sc_time(50, sc_core::SC_NS) // read response delay , sc_core::sc_time(30, sc_core::SC_NS) // write response delay ) , m_initiator_1 /// LT instance with DMI ( "m_initiator_1" // instance name , 101 // 1st Initiator ID is 101 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) , m_initiator_2 /// LT instance with DMI ( "m_initiator_2" // instance name , 102 // 2nd Initiator ID is 102 , 0x0000000000000000 // fitst base address , 0x0000000010000000 // second base address ) { // register the time limiter SC_THREAD(limit_thread); /// bind TLM2 initiators to TLM2 target sockets on SimpleBus m_initiator_1.top_initiator_socket(m_bus.target_socket[0]); m_initiator_2.top_initiator_socket(m_bus.target_socket[1]); /// bind TLM2 targets to TLM2 initiator sockets on SimpleBus m_bus.initiator_socket[0](m_lt_dmi_target_1.m_memory_socket); m_bus.initiator_socket[1](m_lt_dmi_target_2.m_memory_socket); } void lt_dmi_top::limit_thread ///< limit_thread ( void ) { sc_core::wait ( sc_core::SC_ZERO_TIME ); // Only after simulation initialized sc_core::wait ( m_simulation_limit ); // Limit simulation time sc_core::sc_stop (); // Ensure end_of_simulation called } systemc-2.3.4/examples/tlm/lt_dmi/build-unix/0000755000175000017500000000000014342422106021027 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/build-unix/Makefile0000644000175000017500000000060014342422106022463 0ustar carstencarsteninclude ../../../build-unix/Makefile.config PROJECT = lt_dmi VPATH = \ ../src \ ../../common/src INCDIR = \ -I../include \ -I../../common/include OBJS = \ $(PROJECT).o \ $(PROJECT)_top.o \ initiator_top.o \ \ dmi_memory.o \ lt_dmi_initiator.o \ lt_dmi_target.o \ memory.o \ report.o \ traffic_generator.o include ../../../build-unix/Makefile.rules # DO NOT DELETE systemc-2.3.4/examples/tlm/lt_dmi/results/0000755000175000017500000000000014342422106020450 5ustar carstencarstensystemc-2.3.4/examples/tlm/lt_dmi/results/expected.log0000644000175000017500000027662214342422106022773 0ustar carstencarsten Info: lt_dmi_target.cpp: 0 s - toggle_dmi_method Target: 201 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (0, 4096) Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (0, 4096) Info: lt_dmi_target.cpp: 0 s - toggle_dmi_method Target: 202 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (268435456, 268439552) Info: dmi_memory.cpp: 0 s - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (268435456, 268439552) Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 101 Starting Traffic Info: traffic_generator.cpp: 0 s - traffic_generator_thread Initiator: 102 Starting Traffic Info: lt_dmi_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 0 s - is_address_dmi Initiator:101 address is not a dmi address Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_dmi_target.cpp: 0 s - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 0 s - initiator_thread Initiator: 101 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 0 s - is_address_dmi Initiator:102 address is not a dmi address Info: memory.cpp: 0 s - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_dmi_target.cpp: 0 s - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 0 s - initiator_thread Initiator: 102 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 101 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 102 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 35 ns - is_address_dmi Initiator:101 address is not a dmi address Info: memory.cpp: 35 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_dmi_target.cpp: 35 ns - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 101 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 35 ns - is_address_dmi Initiator:102 address is not a dmi address Info: memory.cpp: 35 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_dmi_target.cpp: 35 ns - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 35 ns - initiator_thread Initiator: 102 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 101 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 102 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 70 ns - is_address_dmi Initiator:101 address is not a dmi address Info: memory.cpp: 70 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_dmi_target.cpp: 70 ns - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 101 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 70 ns - is_address_dmi Initiator:102 address is not a dmi address Info: memory.cpp: 70 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_dmi_target.cpp: 70 ns - custom_b_transport Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 70 ns - initiator_thread Initiator: 102 b_transport returned a delay of 35 ns Info: lt_dmi_target.cpp: 100 ns - toggle_dmi_method Target: 202 DMI has been enabled in this target Info: lt_dmi_target.cpp: 100 ns - toggle_dmi_method Target: 201 DMI has been enabled in this target Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 101 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 102 gp_tpr was returned with dmi_allowed set to 0 Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 105 ns - is_address_dmi Initiator:101 address is not a dmi address Info: memory.cpp: 105 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_dmi_target.cpp: 105 ns - custom_b_transport Target: 201 has set dmi_allowed Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 101 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 105 ns - is_address_dmi Initiator:102 address is not a dmi address Info: memory.cpp: 105 ns - print ID: 201 COMMAND: WRITE Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_dmi_target.cpp: 105 ns - custom_b_transport Target: 201 has set dmi_allowed Target: 201 returned delay of 0 s + 20 ns + 15 ns = 35 ns Info: lt_dmi_initiator.cpp: 105 ns - initiator_thread Initiator: 102 b_transport returned a delay of 35 ns Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 101 gp_tpr was returned with dmi_allowed set to 1 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 101 set up dmi for next access to this target Initiator: 101 requesting DMI pointer Info: lt_dmi_target.cpp: 140 ns - get_direct_mem_ptr Target: 201 passing DMI pointer back to initiator Info: dmi_memory.cpp: 140 ns - print Initiator: 101 start addr = 0 end addr = 4096 read latency = 20 ns write latency = 15 ns granted access = 3 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 102 gp_tpr was returned with dmi_allowed set to 1 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 102 set up dmi for next access to this target Initiator: 102 requesting DMI pointer Info: lt_dmi_target.cpp: 140 ns - get_direct_mem_ptr Target: 201 passing DMI pointer back to initiator Info: dmi_memory.cpp: 140 ns - print Initiator: 102 start addr = 0 end addr = 4096 read latency = 20 ns write latency = 15 ns granted access = 3 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 140 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 140 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 140 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 140 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 140 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 140 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_dmi_initiator.cpp: 140 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 155 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 155 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 155 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 155 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 155 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 155 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_dmi_initiator.cpp: 155 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 170 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 170 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 170 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 170 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 170 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 170 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_dmi_initiator.cpp: 170 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 185 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 185 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 185 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 185 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 185 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 185 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_dmi_initiator.cpp: 185 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 200 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 200 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 200 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 200 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 200 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 200 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_dmi_initiator.cpp: 200 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 215 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 215 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 215 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 215 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 215 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 215 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_dmi_initiator.cpp: 215 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 230 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 230 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 230 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 230 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 230 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 230 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_dmi_initiator.cpp: 230 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 245 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 245 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 245 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 245 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 245 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 245 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_dmi_initiator.cpp: 245 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 260 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 260 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 260 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 260 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 260 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 260 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_dmi_initiator.cpp: 260 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 275 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 275 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 275 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 275 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 275 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 275 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_dmi_initiator.cpp: 275 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 290 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 290 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 290 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 290 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 290 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 290 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_dmi_initiator.cpp: 290 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 305 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 305 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 305 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 305 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 305 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 305 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_dmi_initiator.cpp: 305 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 15 ns Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 320 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 320 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 320 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 320 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 320 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 320 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000000 Data: 0x00000000 Info: lt_dmi_initiator.cpp: 320 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 340 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 340 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 340 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 340 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 340 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 340 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000004 Data: 0x00000004 Info: lt_dmi_initiator.cpp: 340 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 360 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 360 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 360 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 360 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 360 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 360 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000008 Data: 0x00000008 Info: lt_dmi_initiator.cpp: 360 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 380 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 380 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 380 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 380 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 380 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 380 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000000000000C Data: 0x0000000C Info: lt_dmi_initiator.cpp: 380 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 400 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 400 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 400 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 400 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 400 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 400 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000010 Data: 0x00000010 Info: lt_dmi_initiator.cpp: 400 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 420 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 420 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 420 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 420 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 420 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 420 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000014 Data: 0x00000014 Info: lt_dmi_initiator.cpp: 420 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 440 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 440 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 440 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 440 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 440 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 440 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000018 Data: 0x00000018 Info: lt_dmi_initiator.cpp: 440 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 460 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 460 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 460 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 460 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 460 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 460 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000000000001C Data: 0x0000001C Info: lt_dmi_initiator.cpp: 460 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 480 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 480 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 480 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 480 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 480 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 480 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000020 Data: 0x00000020 Info: lt_dmi_initiator.cpp: 480 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 500 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 500 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 500 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 500 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 500 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 500 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000024 Data: 0x00000024 Info: lt_dmi_initiator.cpp: 500 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 520 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 520 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 520 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 520 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 520 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 520 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000028 Data: 0x00000028 Info: lt_dmi_initiator.cpp: 520 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 540 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 540 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 540 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 540 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 540 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 540 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000000000002C Data: 0x0000002C Info: lt_dmi_initiator.cpp: 540 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 560 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 560 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 560 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 560 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 560 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 560 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000030 Data: 0x00000030 Info: lt_dmi_initiator.cpp: 560 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 580 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 580 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 580 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 580 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 580 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 580 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000034 Data: 0x00000034 Info: lt_dmi_initiator.cpp: 580 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 600 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 600 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 600 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 600 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 600 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 600 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000000000038 Data: 0x00000038 Info: lt_dmi_initiator.cpp: 600 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 620 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 620 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 620 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 620 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 620 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 620 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000000000003C Data: 0x0000003C Info: lt_dmi_initiator.cpp: 620 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 20 ns Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 640 ns - is_address_dmi Initiator:101 address is not a dmi address Info: memory.cpp: 640 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_dmi_target.cpp: 640 ns - custom_b_transport Target: 202 has set dmi_allowed Target: 202 returned delay of 0 s + 20 ns + 30 ns = 50 ns Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 101 b_transport returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 640 ns - is_address_dmi Initiator:102 address is not a dmi address Info: memory.cpp: 640 ns - print ID: 202 COMMAND: WRITE Length: 04 Addr: 0x0000000000000000 Data: 0xEFFFFFFF Info: lt_dmi_target.cpp: 640 ns - custom_b_transport Target: 202 has set dmi_allowed Target: 202 returned delay of 0 s + 20 ns + 30 ns = 50 ns Info: lt_dmi_initiator.cpp: 640 ns - initiator_thread Initiator: 102 b_transport returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 101 gp_tpr was returned with dmi_allowed set to 1 Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 101 set up dmi for next access to this target Initiator: 101 requesting DMI pointer Info: lt_dmi_target.cpp: 690 ns - get_direct_mem_ptr Target: 202 passing DMI pointer back to initiator Info: dmi_memory.cpp: 690 ns - print Initiator: 101 start addr = 268435456 end addr = 268439552 read latency = 50 ns write latency = 30 ns granted access = 3 Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 102 gp_tpr was returned with dmi_allowed set to 1 Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 102 set up dmi for next access to this target Initiator: 102 requesting DMI pointer Info: lt_dmi_target.cpp: 690 ns - get_direct_mem_ptr Target: 202 passing DMI pointer back to initiator Info: dmi_memory.cpp: 690 ns - print Initiator: 102 start addr = 268435456 end addr = 268439552 read latency = 50 ns write latency = 30 ns granted access = 3 Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 690 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 690 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 690 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000004 Data: 0xEFFFFFFB Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 690 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 690 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 690 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000004 Data: 0xEFFFFFFB Info: lt_dmi_initiator.cpp: 690 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 720 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 720 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 720 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000008 Data: 0xEFFFFFF7 Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 720 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 720 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 720 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000008 Data: 0xEFFFFFF7 Info: lt_dmi_initiator.cpp: 720 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 750 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 750 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 750 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000001000000C Data: 0xEFFFFFF3 Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 750 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 750 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 750 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000001000000C Data: 0xEFFFFFF3 Info: lt_dmi_initiator.cpp: 750 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 780 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 780 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 780 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000010 Data: 0xEFFFFFEF Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 780 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 780 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 780 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000010 Data: 0xEFFFFFEF Info: lt_dmi_initiator.cpp: 780 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 810 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 810 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 810 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000014 Data: 0xEFFFFFEB Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 810 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 810 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 810 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000014 Data: 0xEFFFFFEB Info: lt_dmi_initiator.cpp: 810 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 840 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 840 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 840 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000018 Data: 0xEFFFFFE7 Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 840 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 840 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 840 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000018 Data: 0xEFFFFFE7 Info: lt_dmi_initiator.cpp: 840 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 870 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 870 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 870 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000001000001C Data: 0xEFFFFFE3 Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 870 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 870 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 870 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000001000001C Data: 0xEFFFFFE3 Info: lt_dmi_initiator.cpp: 870 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 900 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 900 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 900 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000020 Data: 0xEFFFFFDF Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 900 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 900 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 900 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000020 Data: 0xEFFFFFDF Info: lt_dmi_initiator.cpp: 900 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 930 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 930 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 930 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000024 Data: 0xEFFFFFDB Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 930 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 930 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 930 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000024 Data: 0xEFFFFFDB Info: lt_dmi_initiator.cpp: 930 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 960 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 960 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 960 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000028 Data: 0xEFFFFFD7 Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 960 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 960 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 960 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000028 Data: 0xEFFFFFD7 Info: lt_dmi_initiator.cpp: 960 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 990 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 990 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 990 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000001000002C Data: 0xEFFFFFD3 Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 990 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 990 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 990 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000001000002C Data: 0xEFFFFFD3 Info: lt_dmi_initiator.cpp: 990 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1020 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1020 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1020 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000030 Data: 0xEFFFFFCF Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1020 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1020 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1020 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000030 Data: 0xEFFFFFCF Info: lt_dmi_initiator.cpp: 1020 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1050 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1050 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1050 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000034 Data: 0xEFFFFFCB Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1050 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1050 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1050 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000034 Data: 0xEFFFFFCB Info: lt_dmi_initiator.cpp: 1050 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1080 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1080 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1080 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x0000000010000038 Data: 0xEFFFFFC7 Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1080 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1080 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1080 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x0000000010000038 Data: 0xEFFFFFC7 Info: lt_dmi_initiator.cpp: 1080 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_target.cpp: 1100 ns - toggle_dmi_method Target: 202 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 1100 ns - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (268435456, 268439552) Info: dmi_memory.cpp: 1100 ns - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (268435456, 268439552) Info: lt_dmi_target.cpp: 1100 ns - toggle_dmi_method Target: 201 invalidate_direct_ptr (0, 4096); Info: dmi_memory.cpp: 1100 ns - invalidate_dmi_ptr Initiator:101 DMI Pointer not invalidated for (0, 4096) Info: dmi_memory.cpp: 1100 ns - invalidate_dmi_ptr Initiator:102 DMI Pointer not invalidated for (0, 4096) Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1110 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1110 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1110 ns - print ID: 101 COMMAND: WRITE Length: 04 Addr: 0x000000001000003C Data: 0xEFFFFFC3 Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1110 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1110 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Write Command Info: dmi_memory.cpp: 1110 ns - print ID: 102 COMMAND: WRITE Length: 04 Addr: 0x000000001000003C Data: 0xEFFFFFC3 Info: lt_dmi_initiator.cpp: 1110 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 30 ns Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1140 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1140 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1140 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000000 Data: 0xEFFFFFFF Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1140 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1140 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1140 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000000 Data: 0xEFFFFFFF Info: lt_dmi_initiator.cpp: 1140 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1190 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1190 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1190 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000004 Data: 0xEFFFFFFB Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1190 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1190 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1190 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000004 Data: 0xEFFFFFFB Info: lt_dmi_initiator.cpp: 1190 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1240 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1240 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1240 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000008 Data: 0xEFFFFFF7 Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1240 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1240 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1240 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000008 Data: 0xEFFFFFF7 Info: lt_dmi_initiator.cpp: 1240 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1290 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1290 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1290 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000001000000C Data: 0xEFFFFFF3 Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1290 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1290 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1290 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000001000000C Data: 0xEFFFFFF3 Info: lt_dmi_initiator.cpp: 1290 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1340 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1340 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1340 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000010 Data: 0xEFFFFFEF Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1340 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1340 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1340 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000010 Data: 0xEFFFFFEF Info: lt_dmi_initiator.cpp: 1340 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1390 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1390 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1390 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000014 Data: 0xEFFFFFEB Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1390 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1390 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1390 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000014 Data: 0xEFFFFFEB Info: lt_dmi_initiator.cpp: 1390 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1440 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1440 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1440 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000018 Data: 0xEFFFFFE7 Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1440 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1440 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1440 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000018 Data: 0xEFFFFFE7 Info: lt_dmi_initiator.cpp: 1440 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1490 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1490 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1490 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000001000001C Data: 0xEFFFFFE3 Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1490 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1490 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1490 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000001000001C Data: 0xEFFFFFE3 Info: lt_dmi_initiator.cpp: 1490 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1540 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1540 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1540 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000020 Data: 0xEFFFFFDF Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1540 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1540 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1540 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000020 Data: 0xEFFFFFDF Info: lt_dmi_initiator.cpp: 1540 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1590 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1590 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1590 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000024 Data: 0xEFFFFFDB Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1590 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1590 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1590 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000024 Data: 0xEFFFFFDB Info: lt_dmi_initiator.cpp: 1590 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1640 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1640 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1640 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000028 Data: 0xEFFFFFD7 Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1640 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1640 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1640 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000028 Data: 0xEFFFFFD7 Info: lt_dmi_initiator.cpp: 1640 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1690 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1690 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1690 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000001000002C Data: 0xEFFFFFD3 Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1690 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1690 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1690 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000001000002C Data: 0xEFFFFFD3 Info: lt_dmi_initiator.cpp: 1690 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1740 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1740 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1740 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000030 Data: 0xEFFFFFCF Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1740 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1740 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1740 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000030 Data: 0xEFFFFFCF Info: lt_dmi_initiator.cpp: 1740 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1790 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1790 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1790 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000034 Data: 0xEFFFFFCB Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1790 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1790 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1790 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000034 Data: 0xEFFFFFCB Info: lt_dmi_initiator.cpp: 1790 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1840 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1840 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1840 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x0000000010000038 Data: 0xEFFFFFC7 Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1840 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1840 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1840 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x0000000010000038 Data: 0xEFFFFFC7 Info: lt_dmi_initiator.cpp: 1840 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 102 End of processing Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 101 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1890 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1890 ns - is_address_dmi Initiator:101 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1890 ns - print ID: 101 COMMAND: READ Length: 04 Addr: 0x000000001000003C Data: 0xEFFFFFC3 Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 101 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 102 b_transport with delay of 0 s); Info: dmi_memory.cpp: 1890 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1890 ns - is_address_dmi Initiator:102 correct address and appropriate access for a GP Read Command Info: dmi_memory.cpp: 1890 ns - print ID: 102 COMMAND: READ Length: 04 Addr: 0x000000001000003C Data: 0xEFFFFFC3 Info: lt_dmi_initiator.cpp: 1890 ns - initiator_thread Initiator: 102 dmi based transaction returned a delay of 50 ns Info: lt_dmi_initiator.cpp: 1940 ns - initiator_thread Initiator: 101 End of processing Info: lt_dmi_initiator.cpp: 1940 ns - initiator_thread Initiator: 102 End of processing Info: traffic_generator.cpp: 1940 ns - traffic_generator_thread Traffic Generator : 101 ========================================================= #### Traffic Generator Complete #### Info: traffic_generator.cpp: 1940 ns - traffic_generator_thread Traffic Generator : 102 ========================================================= #### Traffic Generator Complete #### Info: /OSCI/SystemC: Simulation stopped by user. systemc-2.3.4/examples/build-msvc/0000755000175000017500000000000014342422106016750 5ustar carstencarstensystemc-2.3.4/examples/build-msvc/READMEcommandlinemsvc.txt0000644000175000017500000000531314342422106023550 0ustar carstencarstenThis directory allows the examples to be launched from the command line on Windows. It has been tested on Windows 10 with the following compiler versions: Microsoft Visual C++ 2015 Express Edition Microsoft Visual C++ 2019 Express Edition Note ~~~~ In normal use, you'll probably find it easier to use the Visual C++ integrated development environment. However this command line build system is useful for regression of unit tests with self-checking. Usage ~~~~~ 1. Check the settings in the file Makefile.config Check the path to the SystemC installation. Usually, it should be sufficient to set the SYSTEMC_HOME environment and MSVC environment. If you want to use SystemC with different versions of MSVC, it is recommended to copy the MSVC10 project files to a new subdirectory (msvc/SystemC) before upgrading the project files. Afterwards, update the MSVC variable to point to the newly versions msvc directory. If you use a full-featured Visual Studio version, you might want to use the VCBuild-based command-line interface. Uncomment the "VCBUILD" setting in Makefile.config. 2. Double-click openhere.bat to open a cmd prompt 3. Run vsvars.bat to set up Visual C++ paths You can specify the version and the platform to use via additional command-line options given to vsvars.bat, e.g. vsvars.bat [arch] # load MSVC 2005 for [arch] vsvars.bat [version] # load MSVC [version] for x86 vsvars.bat [version] [platform] # load MSVC [version] for [platform] vsvars.bat 2010 amd64 # load 64-bit tools for MSVC 10.0 vsvars.bat 11.0 # load default (x86) tools for MSVC 2012 vsvars.vat x86_amd64 # load x64 cross-tools for MSVC 2005 4. You can then use the Microsoft tool nmake, e.g. nmake build # compile unit tests [default] nmake run # run unit tests nmake check # run unit tests and compare against golden results nmake clean # clean unit tests Additionally, you can override the settings from Makefile.config via the command-line as well. Common settings are CONFIG (Debug, Release, Both): build specific configuration PLATFORM (Win32, x64, Both) : build for given platform(s) VCBUILD : command-line tool to build project files V=1 : build with more verbosity Examples: - Build, run and compare output for "Release" configuration on 32 and 64-bit, by using the VCBuild command-line interface: nmake /nologo CONFIG=Release PLATFORM=Both VCBUILD=vcbuild check - Build and run examples for "Release" and "Debug" configurations on 32-bit by using the compiler and linker directly: nmake /nologo CONFIG=Both run systemc-2.3.4/examples/build-msvc/SystemC_examples.props0000644000175000017500000000155714342422106023332 0ustar carstencarsten msvc10 false /vmg %(AdditionalOptions) Level3 4996;%(DisableSpecificWarnings) SC_ENABLE_ASSERTIONS;%(PreprocessorDefinitions) $(MSVC) true systemc-2.3.4/examples/build-msvc/Makefile.config0000644000175000017500000000255514342422106021663 0ustar carstencarsten# MSVC WINDOWS build: MAKE = nmake /NOLOGO # set, if you want to build the MSVC project files with MSBUILD #MSBUILD = MSBUILD.exe MSBUILDFLAGS = /nologo # use INCLUDE, LIBS, LIBPATH, PATH from environment #MSBUILDFLAGS = $(MSBUILDFLAGS) /useenv # Project file extension # (changed to .vcxproj in recent versions of VC++) PROJEXT=.vcxproj # use CONFIG=Both, to build Debug and Release together CONFIG=Debug # Win32 and x64 are configured in the projects #PLATFORM=Win32 # set, to ink against SystemC DLL (in command-line mode) #DLL=DLL # underlying command-line tools CXX = CL.exe /nologo LD = LINK.exe /nologo CXXFLAGS=$(CXXFLAGS_COMMON) $(CXXFLAGS_WARN) \ $(CXXFLAGS_DEFINES) $(CXXFLAGS_INCLUDE) LDFLAGS =/SUBSYSTEM:CONSOLE /LIBPATH:$(SYSTEMC_LIB_DIR) CXXFLAGS_COMMON=/GR /vmg /EHsc /Zm800 CXXFLAGS_WARN=/W4 /WX \ /wd4100 /wd4121 /wd4127 /wd4267 /wd4996 CXXFLAGS_DEFINES=/D_CONSOLE /DSC_ENABLE_ASSERTIONS CXXFLAGS_INCLUDE=\ /I..\include \ /I..\..\common\include \ /I$(SYSTEMC_INC_DIR) CXXFLAGS_RELEASE=/O2 /DNDEBUG LDFLAGS_RELEASE= CXXFLAGS_DEBUG=/D_DEBUG /Zi /Fd"$(OUTDIR)/$(PROJECT).pdb" LDFLAGS_DEBUG =/DEBUG /PDB:"$(OUTDIR)/$(PROJECT).pdb" SRCDIR =..\src SRCDIRCOMMON=..\..\common\src # defaults to environment variables if found SYSTEMC_INC_DIR=$(SYSTEMC_HOME)\src SYSTEMC_LIB_DIR=$(SYSTEMC_HOME)\$(MSVC)\SystemC\$(OUTDIR)$(DLL) systemc-2.3.4/examples/build-msvc/SystemC_examples.sln0000644000175000017500000004717214342422106022766 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2.1", "2.1", "{EA49F7EC-B115-4409-81B7-4F514FE170EA}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2.3", "2.3", "{D1CC3D13-04DA-4991-86A0-8DE1585A893A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fft", "fft", "{AD152989-553E-40D7-A328-9D8C4DF43B6E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fir", "fir", "{8488BC8F-C492-406C-AE5D-488A753CE810}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dpipe", "..\sysc\2.1\dpipe\dpipe.vcxproj", "{5777AF4E-C70F-4EDF-924C-3520152CDDC9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "forkjoin", "..\sysc\2.1\forkjoin\forkjoin.vcxproj", "{44313F6B-8A94-43AE-BD81-4D7F6F8522F2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reset_signal_is", "..\sysc\2.1\reset_signal_is\reset_signal_is.vcxproj", "{2B8E2069-D45C-4CE2-8D65-DBFB2B205889}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_export", "..\sysc\2.1\sc_export\sc_export.vcxproj", "{E1EA1796-55BF-4570-9905-2986C2DEF683}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_report", "..\sysc\2.1\sc_report\sc_report.vcxproj", "{823D7385-FB5C-4823-AE8D-2B2032250085}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scx_barrier", "..\sysc\2.1\scx_barrier\scx_barrier.vcxproj", "{59B66B48-2280-4933-B940-9526B4FA4E7B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scx_mutex_w_policy", "..\sysc\2.1\scx_mutex_w_policy\scx_mutex_w_policy.vcxproj", "{3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_rvd", "..\sysc\2.3\sc_rvd\sc_rvd.vcxproj", "{5DA7B653-E73E-4C68-BEF6-382A605B0851}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_ttd", "..\sysc\2.3\sc_ttd\sc_ttd.vcxproj", "{4A6AD027-9C4C-42BD-A5CE-C7BED609690E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fft_flpt", "..\sysc\fft\fft_flpt\fft_flpt.vcxproj", "{40538B2A-48F0-4EAE-AF89-030942A6DAFE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fft_fxpt", "..\sysc\fft\fft_fxpt\fft_fxpt.vcxproj", "{012C2D43-199A-4899-B057-12FE2E71DFB0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pipe", "..\sysc\pipe\pipe.vcxproj", "{2993F85A-036B-489A-8EE5-ED27E2B1A4E6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkt_switch", "..\sysc\pkt_switch\pkt_switch.vcxproj", "{8851E829-5B71-4744-BE45-1592FFCBF1F4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "risc_cpu", "..\sysc\risc_cpu\risc_cpu.vcxproj", "{7E89CFF9-22EE-45E4-942B-100C34D8AD72}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rsa", "..\sysc\rsa\rsa.vcxproj", "{99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_bus", "..\sysc\simple_bus\simple_bus.vcxproj", "{CE91C43D-8F06-4821-A84A-C561D9A19558}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_fifo", "..\sysc\simple_fifo\simple_fifo.vcxproj", "{1CDB535E-14E9-4E52-8898-0CE0B826B97C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_perf", "..\sysc\simple_perf\simple_perf.vcxproj", "{23829CD3-C06B-491E-8A0E-264B3A23FA6F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir_rtl", "..\sysc\fir\fir_rtl.vcxproj", "{1C76D968-D583-4B12-A138-D52A8AA6E835}" ProjectSection(ProjectDependencies) = postProject {171393B0-59C8-4E90-96EE-1DDF852CBE9B} = {171393B0-59C8-4E90-96EE-1DDF852CBE9B} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir", "..\sysc\fir\fir.vcxproj", "{EF9191E5-B7F6-499A-A3CB-55283EFD6370}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir_common", "..\sysc\fir\fir_common.vcxproj", "{171393B0-59C8-4E90-96EE-1DDF852CBE9B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "specialized_signals", "..\sysc\2.1\specialized_signals\specialized_signals.vcxproj", "{CD770F7E-11AA-469F-B0F5-2A8395DF0355}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_async", "..\sysc\2.3\simple_async\simple_async.vcxproj", "{B2C51629-4AF6-48D0-B54C-378F55C63302}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|Win32.ActiveCfg = Debug|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|Win32.Build.0 = Debug|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|x64.ActiveCfg = Debug|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|x64.Build.0 = Debug|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|Win32.ActiveCfg = Release|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|Win32.Build.0 = Release|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|x64.ActiveCfg = Release|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|x64.Build.0 = Release|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|Win32.ActiveCfg = Debug|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|Win32.Build.0 = Debug|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|x64.ActiveCfg = Debug|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|x64.Build.0 = Debug|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|Win32.ActiveCfg = Release|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|Win32.Build.0 = Release|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|x64.ActiveCfg = Release|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|x64.Build.0 = Release|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|Win32.ActiveCfg = Debug|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|Win32.Build.0 = Debug|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|x64.ActiveCfg = Debug|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|x64.Build.0 = Debug|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|Win32.ActiveCfg = Release|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|Win32.Build.0 = Release|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|x64.ActiveCfg = Release|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|x64.Build.0 = Release|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|Win32.ActiveCfg = Debug|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|Win32.Build.0 = Debug|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|x64.ActiveCfg = Debug|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|x64.Build.0 = Debug|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|Win32.ActiveCfg = Release|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|Win32.Build.0 = Release|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|x64.ActiveCfg = Release|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|x64.Build.0 = Release|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|Win32.ActiveCfg = Debug|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|Win32.Build.0 = Debug|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|x64.ActiveCfg = Debug|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|x64.Build.0 = Debug|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|Win32.ActiveCfg = Release|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|Win32.Build.0 = Release|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|x64.ActiveCfg = Release|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|x64.Build.0 = Release|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|Win32.ActiveCfg = Debug|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|Win32.Build.0 = Debug|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|x64.ActiveCfg = Debug|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|x64.Build.0 = Debug|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|Win32.ActiveCfg = Release|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|Win32.Build.0 = Release|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|x64.ActiveCfg = Release|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|x64.Build.0 = Release|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|Win32.ActiveCfg = Debug|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|Win32.Build.0 = Debug|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|x64.ActiveCfg = Debug|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|x64.Build.0 = Debug|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|Win32.ActiveCfg = Release|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|Win32.Build.0 = Release|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|x64.ActiveCfg = Release|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|x64.Build.0 = Release|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|Win32.ActiveCfg = Debug|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|Win32.Build.0 = Debug|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|x64.ActiveCfg = Debug|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|x64.Build.0 = Debug|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|Win32.ActiveCfg = Release|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|Win32.Build.0 = Release|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|x64.ActiveCfg = Release|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|x64.Build.0 = Release|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|Win32.ActiveCfg = Debug|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|Win32.Build.0 = Debug|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|x64.ActiveCfg = Debug|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|x64.Build.0 = Debug|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|Win32.ActiveCfg = Release|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|Win32.Build.0 = Release|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|x64.ActiveCfg = Release|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|x64.Build.0 = Release|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|Win32.ActiveCfg = Debug|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|Win32.Build.0 = Debug|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|x64.ActiveCfg = Debug|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|x64.Build.0 = Debug|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|Win32.ActiveCfg = Release|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|Win32.Build.0 = Release|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|x64.ActiveCfg = Release|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|x64.Build.0 = Release|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|Win32.ActiveCfg = Debug|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|Win32.Build.0 = Debug|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|x64.ActiveCfg = Debug|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|x64.Build.0 = Debug|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|Win32.ActiveCfg = Release|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|Win32.Build.0 = Release|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|x64.ActiveCfg = Release|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|x64.Build.0 = Release|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|Win32.ActiveCfg = Debug|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|Win32.Build.0 = Debug|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|x64.ActiveCfg = Debug|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|x64.Build.0 = Debug|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|Win32.ActiveCfg = Release|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|Win32.Build.0 = Release|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|x64.ActiveCfg = Release|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|x64.Build.0 = Release|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|Win32.ActiveCfg = Debug|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|Win32.Build.0 = Debug|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|x64.ActiveCfg = Debug|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|x64.Build.0 = Debug|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|Win32.ActiveCfg = Release|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|Win32.Build.0 = Release|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|x64.ActiveCfg = Release|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|x64.Build.0 = Release|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|Win32.ActiveCfg = Debug|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|Win32.Build.0 = Debug|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|x64.ActiveCfg = Debug|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|x64.Build.0 = Debug|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|Win32.ActiveCfg = Release|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|Win32.Build.0 = Release|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|x64.ActiveCfg = Release|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|x64.Build.0 = Release|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|Win32.ActiveCfg = Debug|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|Win32.Build.0 = Debug|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|x64.ActiveCfg = Debug|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|x64.Build.0 = Debug|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|Win32.ActiveCfg = Release|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|Win32.Build.0 = Release|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|x64.ActiveCfg = Release|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|x64.Build.0 = Release|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|Win32.ActiveCfg = Debug|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|Win32.Build.0 = Debug|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|x64.ActiveCfg = Debug|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|x64.Build.0 = Debug|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|Win32.ActiveCfg = Release|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|Win32.Build.0 = Release|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|x64.ActiveCfg = Release|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|x64.Build.0 = Release|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|Win32.ActiveCfg = Debug|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|Win32.Build.0 = Debug|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|x64.ActiveCfg = Debug|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|x64.Build.0 = Debug|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|Win32.ActiveCfg = Release|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|Win32.Build.0 = Release|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|x64.ActiveCfg = Release|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|x64.Build.0 = Release|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|Win32.ActiveCfg = Debug|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|Win32.Build.0 = Debug|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|x64.ActiveCfg = Debug|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|x64.Build.0 = Debug|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|Win32.ActiveCfg = Release|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|Win32.Build.0 = Release|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|x64.ActiveCfg = Release|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|x64.Build.0 = Release|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|Win32.ActiveCfg = Debug|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|Win32.Build.0 = Debug|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|x64.ActiveCfg = Debug|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|x64.Build.0 = Debug|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|Win32.ActiveCfg = Release|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|Win32.Build.0 = Release|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|x64.ActiveCfg = Release|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|x64.Build.0 = Release|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|Win32.ActiveCfg = Debug|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|Win32.Build.0 = Debug|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|x64.ActiveCfg = Debug|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|x64.Build.0 = Debug|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|Win32.ActiveCfg = Release|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|Win32.Build.0 = Release|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|x64.ActiveCfg = Release|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|x64.Build.0 = Release|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|Win32.ActiveCfg = Debug|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|Win32.Build.0 = Debug|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|x64.ActiveCfg = Debug|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|x64.Build.0 = Debug|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|Win32.ActiveCfg = Release|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|Win32.Build.0 = Release|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|x64.ActiveCfg = Release|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|x64.Build.0 = Release|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|Win32.ActiveCfg = Debug|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|Win32.Build.0 = Debug|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|x64.ActiveCfg = Debug|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|x64.Build.0 = Debug|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|Win32.ActiveCfg = Release|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|Win32.Build.0 = Release|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|x64.ActiveCfg = Release|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|x64.Build.0 = Release|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|Win32.ActiveCfg = Debug|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|Win32.Build.0 = Debug|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|x64.ActiveCfg = Debug|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|x64.Build.0 = Debug|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|Win32.ActiveCfg = Release|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|Win32.Build.0 = Release|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|x64.ActiveCfg = Release|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {5777AF4E-C70F-4EDF-924C-3520152CDDC9} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {44313F6B-8A94-43AE-BD81-4D7F6F8522F2} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {2B8E2069-D45C-4CE2-8D65-DBFB2B205889} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {E1EA1796-55BF-4570-9905-2986C2DEF683} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {823D7385-FB5C-4823-AE8D-2B2032250085} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {59B66B48-2280-4933-B940-9526B4FA4E7B} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {CD770F7E-11AA-469F-B0F5-2A8395DF0355} = {EA49F7EC-B115-4409-81B7-4F514FE170EA} {5DA7B653-E73E-4C68-BEF6-382A605B0851} = {D1CC3D13-04DA-4991-86A0-8DE1585A893A} {4A6AD027-9C4C-42BD-A5CE-C7BED609690E} = {D1CC3D13-04DA-4991-86A0-8DE1585A893A} {B2C51629-4AF6-48D0-B54C-378F55C63302} = {D1CC3D13-04DA-4991-86A0-8DE1585A893A} {40538B2A-48F0-4EAE-AF89-030942A6DAFE} = {AD152989-553E-40D7-A328-9D8C4DF43B6E} {012C2D43-199A-4899-B057-12FE2E71DFB0} = {AD152989-553E-40D7-A328-9D8C4DF43B6E} {1C76D968-D583-4B12-A138-D52A8AA6E835} = {8488BC8F-C492-406C-AE5D-488A753CE810} {EF9191E5-B7F6-499A-A3CB-55283EFD6370} = {8488BC8F-C492-406C-AE5D-488A753CE810} {171393B0-59C8-4E90-96EE-1DDF852CBE9B} = {8488BC8F-C492-406C-AE5D-488A753CE810} EndGlobalSection EndGlobal systemc-2.3.4/examples/build-msvc/tlm_examples.sln0000644000175000017500000002161114342422106022161 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_1_phase", "..\tlm\at_1_phase\build-msvc\at_1_phase.vcxproj", "{54F8C078-369E-4AA4-9859-264839C6F89A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_2_phase", "..\tlm\at_2_phase\build-msvc\at_2_phase.vcxproj", "{487A123F-10AC-4532-8D27-48DB8F6D4684}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_4_phase", "..\tlm\at_4_phase\build-msvc\at_4_phase.vcxproj", "{AF208CA8-8FAC-48C9-8220-6B6CDE50A003}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_extension_optional", "..\tlm\at_extension_optional\build-msvc\at_extension_optional.vcxproj", "{00BD69D4-8808-4192-8A36-ABEB48A6EBD8}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_mixed_targets", "..\tlm\at_mixed_targets\build-msvc\at_mixed_targets.vcxproj", "{57CAD649-9C8D-4F60-B366-C6573D00EB5C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_ooo", "..\tlm\at_ooo\build-msvc\at_ooo.vcxproj", "{085992EF-F59F-44A9-8971-D23785FB81D9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt", "..\tlm\lt\build-msvc\lt.vcxproj", "{8235921F-4E7D-455C-9C15-48B891B95573}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_dmi", "..\tlm\lt_dmi\build-msvc\lt_dmi.vcxproj", "{83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_extension_mandatory", "..\tlm\lt_extension_mandatory\build-msvc\lt_extension_mandatory.vcxproj", "{73DB032D-F15D-4701-B266-8432BB97D219}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_mixed_endian", "..\tlm\lt_mixed_endian\build-msvc\lt_mixed_endian.vcxproj", "{2791E41A-B893-4F21-9A93-02226EED404B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lt_temporal_decouple", "..\tlm\lt_temporal_decouple\build-msvc\lt_temporal_decouple.vcxproj", "{B1CE1D0B-CDC0-4207-849E-9C25335EB88C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|Win32.ActiveCfg = Debug|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|Win32.Build.0 = Debug|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|x64.ActiveCfg = Debug|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Debug|x64.Build.0 = Debug|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|Win32.ActiveCfg = Release|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|Win32.Build.0 = Release|Win32 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|x64.ActiveCfg = Release|x64 {54F8C078-369E-4AA4-9859-264839C6F89A}.Release|x64.Build.0 = Release|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|Win32.ActiveCfg = Debug|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|Win32.Build.0 = Debug|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|x64.ActiveCfg = Debug|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Debug|x64.Build.0 = Debug|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|Win32.ActiveCfg = Release|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|Win32.Build.0 = Release|Win32 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|x64.ActiveCfg = Release|x64 {487A123F-10AC-4532-8D27-48DB8F6D4684}.Release|x64.Build.0 = Release|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|Win32.ActiveCfg = Debug|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|Win32.Build.0 = Debug|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|x64.ActiveCfg = Debug|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Debug|x64.Build.0 = Debug|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|Win32.ActiveCfg = Release|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|Win32.Build.0 = Release|Win32 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|x64.ActiveCfg = Release|x64 {AF208CA8-8FAC-48C9-8220-6B6CDE50A003}.Release|x64.Build.0 = Release|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|Win32.ActiveCfg = Debug|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|Win32.Build.0 = Debug|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|x64.ActiveCfg = Debug|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Debug|x64.Build.0 = Debug|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|Win32.ActiveCfg = Release|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|Win32.Build.0 = Release|Win32 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|x64.ActiveCfg = Release|x64 {00BD69D4-8808-4192-8A36-ABEB48A6EBD8}.Release|x64.Build.0 = Release|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|Win32.ActiveCfg = Debug|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|Win32.Build.0 = Debug|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|x64.ActiveCfg = Debug|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Debug|x64.Build.0 = Debug|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|Win32.ActiveCfg = Release|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|Win32.Build.0 = Release|Win32 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|x64.ActiveCfg = Release|x64 {57CAD649-9C8D-4F60-B366-C6573D00EB5C}.Release|x64.Build.0 = Release|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|Win32.ActiveCfg = Debug|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|Win32.Build.0 = Debug|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|x64.ActiveCfg = Debug|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Debug|x64.Build.0 = Debug|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|Win32.ActiveCfg = Release|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|Win32.Build.0 = Release|Win32 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|x64.ActiveCfg = Release|x64 {085992EF-F59F-44A9-8971-D23785FB81D9}.Release|x64.Build.0 = Release|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|Win32.ActiveCfg = Debug|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|Win32.Build.0 = Debug|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|x64.ActiveCfg = Debug|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Debug|x64.Build.0 = Debug|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|Win32.ActiveCfg = Release|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|Win32.Build.0 = Release|Win32 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|x64.ActiveCfg = Release|x64 {8235921F-4E7D-455C-9C15-48B891B95573}.Release|x64.Build.0 = Release|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|Win32.ActiveCfg = Debug|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|Win32.Build.0 = Debug|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|x64.ActiveCfg = Debug|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Debug|x64.Build.0 = Debug|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|Win32.ActiveCfg = Release|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|Win32.Build.0 = Release|Win32 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|x64.ActiveCfg = Release|x64 {83F5E6A5-45C5-49ED-9E09-E8C64FB20EB5}.Release|x64.Build.0 = Release|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|Win32.ActiveCfg = Debug|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|Win32.Build.0 = Debug|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|x64.ActiveCfg = Debug|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Debug|x64.Build.0 = Debug|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|Win32.ActiveCfg = Release|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|Win32.Build.0 = Release|Win32 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|x64.ActiveCfg = Release|x64 {73DB032D-F15D-4701-B266-8432BB97D219}.Release|x64.Build.0 = Release|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|Win32.ActiveCfg = Debug|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|Win32.Build.0 = Debug|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|x64.ActiveCfg = Debug|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Debug|x64.Build.0 = Debug|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|Win32.ActiveCfg = Release|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|Win32.Build.0 = Release|Win32 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|x64.ActiveCfg = Release|x64 {2791E41A-B893-4F21-9A93-02226EED404B}.Release|x64.Build.0 = Release|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|Win32.ActiveCfg = Debug|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|Win32.Build.0 = Debug|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|x64.ActiveCfg = Debug|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Debug|x64.Build.0 = Debug|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|Win32.ActiveCfg = Release|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|Win32.Build.0 = Release|Win32 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|x64.ActiveCfg = Release|x64 {B1CE1D0B-CDC0-4207-849E-9C25335EB88C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/build-msvc/Makefile.rules0000644000175000017500000001434514342422106021550 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.rules -- simple generic SystemC example build rules ## (for MSVC projects) ## ## Include this file from your own Makefile to obtain a simple build ## environment. You need to set at least the variables ## PLATFORM - platform to build for (default Win32) ## CONFIG - configuration to use (Debug, Release, Both) ## ## PROJECT - name of the MSVC project to use ## or, when building manually ## OBJS - object filenames of the sources you use ## (located in SRCDIR or SRCDIRCOMMON) ## to make things work. ## ## The environment is assumed to be set up from Makefile.config file ## and the main example Makefile. ## ## Original Author: Philipp A. Hartmann, OFFIS ## ## *************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** GOLDEN=..\results\expected.log EXEEXT=.exe # Windows "find" command (grep) !IFNDEF FIND # The full path to find is used as some users may have cygwin installed, # which includes another version of find FIND="%WINDIR%\system32\find" !ENDIF !IFNDEF PROJECT !ERROR "PROJECT" not set. Cannot build. !ENDIF !IFNDEF EXECUTABLE EXECUTABLE=$(PROJECT)$(EXEEXT) !ENDIF !IFNDEF PLATFORM !IFDEF SYSTEMC_MSVC_PLATFORM PLATFORM=$(SYSTEMC_MSVC_PLATFORM) !ELSE PLATFORM=Win32 !ENDIF !ENDIF !IFNDEF CONFIG CONFIG=Debug !ENDIF # if systemc.props is not correctly updated !IFNDEF SYSTEMC_HOME SYSTEMC_HOME=..\..\..\.. !ENDIF CXXFLAGS_RELEASE=/MD $(CXXFLAGS_RELEASE) CXXFLAGS_DEBUG=/MDd $(CXXFLAGS_DEBUG) !IFDEF DLL CXXFLAGS_DEFINES=/DSC_WIN_DLL $(CXXFLAGS_DEFINES) !ENDIF ## default rule all: announce build announce: @if defined FLAG_BATCH (echo *** $(PROJECT) "$(CONFIG)|$(PLATFORM)":) ## *************************************************************************** ## forward rules !IF "$(PLATFORM)" == "Both" build run check clean: @( $(MAKE) FLAG_BATCH=1 CONFIG=$(CONFIG) PLATFORM=Win32 $@ && \ $(MAKE) FLAG_BATCH=1 CONFIG=$(CONFIG) PLATFORM=x64 $@ ) !ELSEIF "$(CONFIG)" == "Both" build run check clean: @( $(MAKE) FLAG_BATCH=1 CONFIG=Debug PLATFORM=$(PLATFORM) $@ && \ $(MAKE) FLAG_BATCH=1 CONFIG=Release PLATFORM=$(PLATFORM) $@ ) ## *************************************************************************** ## actual rules !ELSE ## platform-specific flag additions !IF "$(PLATFORM)" == "x64" || "$(PLATFORM)" == "X64" OUTDIR=$(PLATFORM)\$(CONFIG) CXXFLAGS=$(CXXFLAGS) /DWIN64 LDFLAGS =$(LDFLAGS) /MACHINE:X64 !ELSE OUTDIR=$(CONFIG) CXXFLAGS=$(CXXFLAGS) /DWIN32 LDFLAGS =$(LDFLAGS) /MACHINE:X86 !ENDIF ## debug / release flag additions !IF "$(CONFIG)" == "Debug" CXXFLAGS=$(CXXFLAGS) $(CXXFLAGS_DEBUG) LDFLAGS =$(LDFLAGS) $(LDFLAGS_DEBUG) !ELSE CXXFLAGS=$(CXXFLAGS) $(CXXFLAGS_RELEASE) LDFLAGS =$(LDFLAGS) $(LDFLAGS_RELEASE) !ENDIF CPP=$(CXX) CPPFLAGS=$(CXXFLAGS) # TODO: fix input handling !IF defined(INPUT) && EXISTS( $(INPUT) ) INPUTFILE= < "$(INPUT)" !ELSE INPUTFILE= !ENDIF !IFNDEF FILTER FILTERCMD= !ELSE FILTERCMD=| $(FIND) $(FILTER) !ENDIF !IFNDEF ARGS ARGS= !ENDIF !IF "$(V)" == "1" AT= !ELSE AT=@ !ENDIF PATH=$(SYSTEMC_LIB_DIR);$(PATH) # Notes: # 1. two lines starting @type filter out lines containing # "stopped by user" so that differences in messages between SystemC 2.2.0 # and SystemC 2.3.0 (or later) are not significant. # 2. find /v returns all lines that don't match. # fc /w ignores (collapses) white space check: announce $(EXECUTABLE) $(AT).\$(EXECUTABLE) $(ARGS) $(INPUTFILE) $(FILTERCMD) > runtemp.log @type runtemp.log | $(FIND) /v /i "stopped by user" > run.log @type $(GOLDEN) | $(FIND) /v /i "stopped by user" > expected.log @(fc /w run.log expected.log > diff.log) & \ if ERRORLEVEL 1 (echo "***ERROR:" & type diff.log) else (echo OK) run: announce $(EXECUTABLE) $(AT).\$(EXECUTABLE) $(ARGS) $(INPUTFILE) $(EXECUTABLE): build $(AT)copy /y $(OUTDIR)\$@ .\$@ !IFDEF MSBUILD # Visual Studio command-line builder build: announce $(AT)$(MSBUILD) $(MSBUILDFLAGS) $(PROJECT)$(PROJEXT) \ /p:configuration="$(CONFIG)" /p:platform="$(PLATFORM)" clean: announce $(AT)$(MSBUILD) /t:clean $(MSBUILDFLAGS) $(PROJECT)$(PROJEXT) \ /p:configuration="$(CONFIG)" /p:platform="$(PLATFORM)" $(AT)for %%X in ( $(OUTDIR)\BuildLog.htm $(OUTDIR)\*.log ) do \ @( if exist %%X del /q %%X ) $(AT)if exist $(OUTDIR) ( rmdir /q $(OUTDIR) ) $(AT)for %%X in ( $(EXECUTABLE) *.log $(EXTRA_CLEAN) ) do \ @( if exist %%X del /q %%X ) !ELSE # command-line rules (direct use of compiler and linker) !IFNDEF OBJS !ERROR "OBJS" not set. Cannot build. !ENDIF build: announce $(OUTDIR)\$(EXECUTABLE) $(OUTDIR)\$(EXECUTABLE): $(OBJS) @echo $@ $(AT)$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) systemc.lib {$(SRCDIR)}.cpp{$(OUTDIR)}.obj: @if not exist $(OUTDIR) MKDIR $(OUTDIR) $(AT)$(CXX) /c $(CXXFLAGS) /Fo"$(@)" $< {$(SRCDIRCOMMON)}.cpp{$(OUTDIR)}.obj: @if not exist $(OUTDIR) MKDIR $(OUTDIR) $(AT)$(CXX) /c $(CXXFLAGS) /Fo"$(@)" $< clean: announce $(AT)if exist $(OUTDIR) ( rmdir /s /q $(OUTDIR) ) $(AT)for %%X in ( $(EXECUTABLE) *.log $(EXTRA_CLEAN) ) do \ @( if exist %%X del /q %%X ) !ENDIF # plain command-line rules !ENDIF ## Taf! systemc-2.3.4/examples/build-msvc/openhere.bat0000644000175000017500000000007314342422106021245 0ustar carstencarsten@echo off %~d1 cd %~p1 cd %1 %SystemRoot%\system32\cmd.exe systemc-2.3.4/examples/build-msvc/vsvars.bat0000644000175000017500000001242014342422106020763 0ustar carstencarsten@echo off rem *************************************************************************** rem rem Licensed to Accellera Systems Initiative Inc. (Accellera) under one or rem more contributor license agreements. See the NOTICE file distributed rem with this work for additional information regarding copyright ownership. rem Accellera licenses this file to you under the Apache License, Version 2.0 rem (the "License"); you may not use this file except in compliance with the rem License. You may obtain a copy of the License at rem rem http://www.apache.org/licenses/LICENSE-2.0 rem rem Unless required by applicable law or agreed to in writing, software rem distributed under the License is distributed on an "AS IS" BASIS, rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or rem implied. See the License for the specific language governing rem permissions and limitations under the License. rem rem *************************************************************************** rem rem vsvars.bat -- rem Run this file in a command prompt to load MS Visual C++ environment rem rem Original Author: Philipp A. Hartmann, OFFIS, 2013-12-09 rem rem *************************************************************************** rem rem You can specify the version and the platform to use via additional rem command-line options given to vsvars.bat, e.g. rem rem vsvars.bat [arch] # load MSVC 2010 for [arch] rem vsvars.bat [version] # load MSVC [version] for x86 rem vsvars.bat [version] [platform] # load MSVC [version] for [platform] rem rem vsvars.bat 2010 amd64 # load 64-bit tools for MSVC 10.0 rem vsvars.bat 11.0 # load default (x86) tools for MSVC 2012 rem vsvars.bat x86_amd64 # load x64 cross-tools for MSVC 2010 rem rem *************************************************************************** set SYSTEMC_MSVC_VERSION= set SYSTEMC_MSVC_PLATFORM= set VCVARSDIR= if "%1" == "8.0" goto check_MSVC80 if "%1" == "2005" goto check_MSVC80 if "%1" == "9.0" goto check_MSVC90 if "%1" == "2008" goto check_MSVC90 if "%1" == "10.0" goto check_MSVC100 if "%1" == "2010" goto check_MSVC100 if "%1" == "11.0" goto check_MSVC110 if "%1" == "2011" goto check_MSVC110 if "%1" == "2012" goto check_MSVC110 if "%1" == "12.0" goto check_MSVC120 if "%1" == "2013" goto check_MSVC120 if "%1" == "2014" goto check_MSVC120 if "%1" == "14.0" goto check_MSVC140 if "%1" == "2015" goto check_MSVC140 if "%1" == "15.0" goto check_MSVC150 if "%1" == "2017" goto check_MSVC150 if "%1" == "16.0" goto check_MSVC160 if "%1" == "2019" goto check_MSVC160 if not "%1" == "" set SYSTEMC_MSVC_PLATFORM=%1 if "%1" == "" set SYSTEMC_MSVC_PLATFORM=x86 goto check_MSVC100 rem We rely on the variables VSXXXCOMNTOOLS to be set by the MSVC rem installation. This should be usually the case by default. rem For MSVC 2017 and newer, VSXXXCOMNTOOLS is not defined anymore, rem and we need to set the variable ourselves. We will check for the rem Community and Professions release in the most commonly used rem install directories :check_MSVC80 set SYSTEMC_MSVC_VERSION=8.0 (2005) set VSINSTALLDIR=%VS80COMNTOOLS%..\..\ set MSVC=msvc80 goto load_MSVC :check_MSVC90 set SYSTEMC_MSVC_VERSION=9.0 (2008) set VSINSTALLDIR=%VS90COMNTOOLS%..\..\ set MSVC=msvc90 goto load_MSVC :check_MSVC100 set SYSTEMC_MSVC_VERSION=10.0 (2010) set VSINSTALLDIR=%VS100COMNTOOLS%..\..\ set MSVC=msvc10 goto load_MSVC :check_MSVC110 set SYSTEMC_MSVC_VERSION=11.0 (2012) set VSINSTALLDIR=%VS110COMNTOOLS%..\..\ set MSVC=msvc11 goto load_MSVC :check_MSVC120 set SYSTEMC_MSVC_VERSION=12.0 (2013) set VSINSTALLDIR=%VS120COMNTOOLS%..\..\ set MSVC=msvc12 goto load_MSVC :check_MSVC140 set SYSTEMC_MSVC_VERSION=14.0 (2015) set VSINSTALLDIR=%VS140COMNTOOLS%..\..\ set MSVC=msvc14 goto load_MSVC :check_MSVC150 set SYSTEMC_MSVC_VERSION=15.0 (2017) set MSVC=msvc15 set VCVARSDIR=Auxiliary\Build\ set VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\ set VSINSTALLDIR=%VS150COMNTOOLS%..\..\ if exist "%VSINSTALLDIR%" goto load_MSVC set VS160COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\ set VSINSTALLDIR=%VS160COMNTOOLS%..\..\ goto load_MSVC :check_MSVC160 set SYSTEMC_MSVC_VERSION=16.0 (2019) set MSVC=msvc16 set VCVARSDIR=Auxiliary\Build\ set VS160COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\ set VSINSTALLDIR=%VS160COMNTOOLS%..\..\ if exist "%VSINSTALLDIR%" goto load_MSVC set VS160COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\ set VSINSTALLDIR=%VS160COMNTOOLS%..\..\ goto load_MSVC :load_MSVC if "%SYSTEMC_MSVC_PLATFORM%" == "" set SYSTEMC_MSVC_PLATFORM=%2 if "%SYSTEMC_MSVC_PLATFORM%" == "" set SYSTEMC_MSVC_PLATFORM=x86 if not exist "%VSINSTALLDIR%" goto error_no_MSVC_VERSION set VCINSTALLDIR=%VSINSTALLDIR%VC\%VCVARSDIR% if not exist "%VCINSTALLDIR%vcvarsall.bat" goto error_no_MSVC_VERSION echo Loading settings for MS Visual C++ %SYSTEMC_MSVC_VERSION% (%SYSTEMC_MSVC_PLATFORM% platform) call "%VCINSTALLDIR%vcvarsall.bat" %SYSTEMC_MSVC_PLATFORM% goto end :error_no_MSVC_VERSION echo MS Visual C++ %SYSTEMC_MSVC_VERSION% not found. echo Could not load compiler environment. echo Check your MS Visual C++ %SYSTEMC_MSVC_VERSION% installation. goto end :end systemc-2.3.4/examples/build-msvc/tlm_examples.props0000644000175000017500000000205114342422106022525 0ustar carstencarsten msvc10 <_ProjectFileVersion>10.0.30319.1 false /vmg %(AdditionalOptions) $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) true Level4 4100;4127;4267;4996;%(DisableSpecificWarnings) SC_ENABLE_ASSERTIONS;%(PreprocessorDefinitions) $(MSVC) systemc-2.3.4/examples/build-msvc/Makefile0000644000175000017500000000120414342422106020405 0ustar carstencarsten!include <.\Makefile.config> SUBDIRS = \ ..\tlm\at_1_phase \ ..\tlm\at_2_phase \ ..\tlm\at_4_phase \ ..\tlm\at_extension_optional \ ..\tlm\at_mixed_targets \ ..\tlm\at_ooo \ ..\tlm\lt \ ..\tlm\lt_dmi \ ..\tlm\lt_extension_mandatory \ ..\tlm\lt_mixed_endian \ ..\tlm\lt_temporal_decouple TARGETS = build run check clean # default target all: build # see # - Makefile.rules for actual implementation # - Makefile.config for available configuration options $(TARGETS): @for %%i in ($(SUBDIRS)) do \ @( chdir $(MAKEDIR)\%%i\build-msvc && \ $(MAKE) /nologo FLAG_BATCH=1 \ CONFIG=$(CONFIG) PLATFORM=$(PLATFORM) $@ ) systemc-2.3.4/examples/Makefile.am0000644000175000017500000000465014342422106016744 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## examples/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc. ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation and ## changes you are making here: ## ## Modifier Name & Affiliation: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.examples SUBDIRS = \ sysc \ tlm examples_FILES = \ build-unix/Makefile \ build-unix/Makefile.config \ build-unix/Makefile.rules \ \ build-msvc/Makefile \ build-msvc/Makefile.config \ build-msvc/Makefile.rules \ build-msvc/READMEcommandlinemsvc.txt \ build-msvc/SystemC_examples.props \ build-msvc/SystemC_examples.sln \ build-msvc/openhere.bat \ build-msvc/tlm_examples.props \ build-msvc/tlm_examples.sln \ build-msvc/vsvars.bat # install examples? if SEPARATE_INSTALL_TREE buildexamplesdir = $(examplesdir) nobase_buildexamples_DATA = \ $(examples_FILES) examples_DIRS = \ build-unix \ build-msvc uninstall-hook: test ! -d "$(buildexamplesdir)" || ( set -e ; cd "$(buildexamplesdir)" ; \ for dir in $(examples_DIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir --ignore-fail-on-non-empty "$(buildexamplesdir)" ) endif # SEPARATE_INSTALL_TREE EXTRA_DIST += \ CMakeLists.txt \ \ $(examples_FILES) ## Taf! systemc-2.3.4/examples/CMakeLists.txt0000644000175000017500000001601314342422106017444 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### cmake_minimum_required (VERSION 3.0) # Only built under "check" target # - see https://cmake.org/Wiki/CMakeEmulateMakeCheck add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -C "${CMAKE_BUILD_TYPE}") enable_testing() set_property(GLOBAL PROPERTY USE_FOLDERS TRUE) set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE) set_target_properties(check PROPERTIES FOLDER "examples") ######################################################################## # Common definitions for all examples. ######################################################################## if (DEBUG_SYSTEMC) add_definitions (-DDEBUG_SYSTEMC) endif (DEBUG_SYSTEMC) if (ENABLE_ASSERTIONS) add_definitions (-DSC_ENABLE_ASSERTIONS) endif (ENABLE_ASSERTIONS) if (WIN32) # Not sure, if these preprocessor definitions are strictly required to build # console applications with Visual Studio. Instead of _CONSOLE, _LIB may be # more appropriate. Maybe also WIN32, _WIN32, _WIN64 needs to be #defined to # generate correct VS projects. # # Resources: # . # # # # add_definitions (-D_CONSOLE -DNOGDI) endif (WIN32) # TODO: Set MSVC warning level to 3 and 4 for the individual examples # and disable selected warnings (e.g., 4996). See the individual # *.vcxproj files for details. if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options(-Wall -Wextra -Wno-unused-parameter -Wno-unused-variable) elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_compile_options(/W3 /wd4244 /wd4267 /wd4996) endif (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") # If possible, find a more powerful platform-specific diff tool than "cmake -E compare_files" find_program (DIFF_COMMAND NAMES diff diff.exe fc fc.exe PATHS ENV PATH) if (DIFF_COMMAND MATCHES diff) set (DIFF_OPTIONS -u CACHE STRING "Diff command options.") elseif (DIFF_COMMAND MATCHES fc) set (DIFF_OPTIONS /N CACHE STRING "Diff command options.") else (DIFF_COMMAND MATCHES diff) set (DIFF_COMMAND ${CMAKE_COMMAND} CACHE FILEPATH "Path to diff command.") set (DIFF_OPTIONS -E compare_files CACHE FILEPATH "Diff command options.") endif (DIFF_COMMAND MATCHES diff) mark_as_advanced (DIFF_COMMAND DIFF_OPTIONS) # configure_and_add_test( [INPUT ] [GOLDEN ] [FILTER ]) function (configure_and_add_test TEST_PROG) set (oneValueArgs INPUT GOLDEN FILTER FOLDER) cmake_parse_arguments(TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) if (${TEST_UNPARSED_ARGS}) message (FATAL_ERROR "Invalid options passed to configure_and_add_test( [INPUT ] [GOLDEN ] [FILTER ]): ${TEST_UNPARSED_ARGS}") endif (${TEST_UNPARSED_ARGS}) string (REPLACE "${CMAKE_SOURCE_DIR}/" "" TEST_NAME "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_PROG}") if (NOT "${TEST_INPUT}" STREQUAL "") set (TEST_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_INPUT}) if (NOT EXISTS ${TEST_INPUT}) message (SEND_ERROR "The specified input file ${TEST_INPUT} for test ${TEST_NAME} does not exist.") unset (TEST_INPUT) endif (NOT EXISTS ${TEST_INPUT}) endif (NOT "${TEST_INPUT}" STREQUAL "") if ("${TEST_GOLDEN}" STREQUAL "") if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/golden.log) set (TEST_GOLDEN ${CMAKE_CURRENT_SOURCE_DIR}/golden.log) elseif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/results/expected.log) set (TEST_GOLDEN ${CMAKE_CURRENT_SOURCE_DIR}/results/expected.log) else (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/golden.log) unset (TEST_GOLDEN) endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/golden.log) else ("${TEST_GOLDEN}" STREQUAL "") set (TEST_GOLDEN ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_GOLDEN}) if (NOT EXISTS ${TEST_GOLDEN}) message (SEND_ERROR "The specified golden reference file ${TEST_GOLDEN} for test ${TEST_NAME} does not exist.") unset (TEST_GOLDEN) endif (NOT EXISTS ${TEST_GOLDEN}) endif ("${TEST_GOLDEN}" STREQUAL "") add_test (NAME ${TEST_NAME} COMMAND ${CMAKE_COMMAND} "-DTEST_EXE=$" "-DTEST_DIR=${CMAKE_CURRENT_BINARY_DIR}" "-DTEST_INPUT=${TEST_INPUT}" "-DTEST_GOLDEN=${TEST_GOLDEN}" "-DTEST_FILTER=${TEST_FILTER}" "-DDIFF_COMMAND=${DIFF_COMMAND}" "-DDIFF_OPTIONS=${DIFF_OPTIONS}" -P ${PROJECT_SOURCE_DIR}/cmake/run_test.cmake) add_dependencies(check ${TEST_PROG}) set_tests_properties (${TEST_NAME} PROPERTIES FAIL_REGULAR_EXPRESSION "^[*][*][*]ERROR") set_target_properties(${TEST_PROG} PROPERTIES FOLDER "${TEST_FOLDER}") endfunction (configure_and_add_test) ######################################################################## # Add the SystemC and TLM examples. ######################################################################## add_subdirectory (sysc) add_subdirectory (tlm) systemc-2.3.4/examples/sysc/0000755000175000017500000000000014342422106015664 5ustar carstencarstensystemc-2.3.4/examples/sysc/fft/0000755000175000017500000000000014342422106016443 5ustar carstencarstensystemc-2.3.4/examples/sysc/fft/fft_fxpt/0000755000175000017500000000000014342422106020263 5ustar carstencarstensystemc-2.3.4/examples/sysc/fft/fft_fxpt/in_real.30000644000175000017500000000010514342422106021754 0ustar carstencarsten0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_imag.1.golden0000644000175000017500000000010414342422106023413 0ustar carstencarsten32176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_fxpt/sink.cpp0000644000175000017500000000412114342422106021731 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sink.cpp - This is the implementation file for the synchronous process "sink". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "sink.h" void sink::entry() { sc_int<16> tmp; int tmp_out; fp_real = fopen("out_real","w"); fp_imag = fopen("out_imag","w"); data_ack.write(false); while(true) { do { wait(); } while ( !(data_ready == true) ); tmp = in_real.read(); tmp_out = tmp.to_int(); fprintf(fp_real,"%d \n",tmp_out); tmp = in_imag.read(); tmp_out = tmp.to_int(); fprintf(fp_imag,"%d \n",tmp_out); data_ack.write(true); do { wait(); } while ( !(data_ready == false) ); data_ack.write(false); } } systemc-2.3.4/examples/sysc/fft/fft_fxpt/test.am0000644000175000017500000000650614342422106021570 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: fft/fft_fxpt ## %C%: fft_fft_fxpt examples_TESTS += fft/fft_fxpt/test fft_fft_fxpt_test_CPPFLAGS = \ $(AM_CPPFLAGS) fft_fft_fxpt_test_SOURCES = \ $(fft_fft_fxpt_H_FILES) \ $(fft_fft_fxpt_CXX_FILES) examples_BUILD += \ $(fft_fft_fxpt_BUILD) examples_CLEAN += \ fft/fft_fxpt/run.log \ fft/fft_fxpt/expected_trimmed.log \ fft/fft_fxpt/run_trimmed.log \ fft/fft_fxpt/diff.log examples_FILES += \ $(fft_fft_fxpt_H_FILES) \ $(fft_fft_fxpt_CXX_FILES) \ $(fft_fft_fxpt_BUILD) \ $(fft_fft_fxpt_EXTRA) examples_DIRS += fft/fft_fxpt ## example-specific details examples_CLEAN += \ fft/fft_fxpt/out_real \ fft/fft_fxpt/out_imag fft_fft_fxpt_H_FILES = \ fft/fft_fxpt/fft.h \ fft/fft_fxpt/sink.h \ fft/fft_fxpt/source.h fft_fft_fxpt_CXX_FILES = \ fft/fft_fxpt/fft.cpp \ fft/fft_fxpt/main.cpp \ fft/fft_fxpt/sink.cpp \ fft/fft_fxpt/source.cpp fft_fft_fxpt_BUILD = \ fft/fft_fxpt/golden.log \ fft/fft_fxpt/in_imag \ fft/fft_fxpt/in_imag.1 \ fft/fft_fxpt/in_imag.2 \ fft/fft_fxpt/in_imag.3 \ fft/fft_fxpt/in_imag.4 \ fft/fft_fxpt/in_real \ fft/fft_fxpt/in_real.1 \ fft/fft_fxpt/in_real.2 \ fft/fft_fxpt/in_real.3 \ fft/fft_fxpt/in_real.4 \ fft/fft_fxpt/out_imag.1.golden \ fft/fft_fxpt/out_imag.2.golden \ fft/fft_fxpt/out_imag.3.golden \ fft/fft_fxpt/out_imag.4.golden \ fft/fft_fxpt/out_real.1.golden \ fft/fft_fxpt/out_real.2.golden \ fft/fft_fxpt/out_real.3.golden \ fft/fft_fxpt/out_real.4.golden fft_fft_fxpt_EXTRA = \ fft/fft_fxpt/fft_fxpt.sln \ fft/fft_fxpt/fft_fxpt.vcxproj \ fft/fft_fxpt/CMakeLists.txt \ fft/fft_fxpt/Makefile #fft_fft_fxpt_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_imag.40000644000175000017500000000036714342422106021761 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 29 34 85 206 336 593 823 422 -12 -103 -599 -734 -339 -188 -23 22 systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_real0000644000175000017500000000035714342422106021624 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 123 34 -23 12 45 0 67 134 -45 30 96 189 234 535 105 576 systemc-2.3.4/examples/sysc/fft/fft_fxpt/fft_fxpt.sln0000644000175000017500000000227214342422106022624 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fft_fxpt", "fft_fxpt.vcxproj", "{012C2D43-199A-4899-B057-12FE2E71DFB0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|Win32.ActiveCfg = Debug|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|Win32.Build.0 = Debug|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|x64.ActiveCfg = Debug|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Debug|x64.Build.0 = Debug|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|Win32.ActiveCfg = Release|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|Win32.Build.0 = Release|Win32 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|x64.ActiveCfg = Release|x64 {012C2D43-199A-4899-B057-12FE2E71DFB0}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_real.2.golden0000644000175000017500000000010014342422106023416 0ustar carstencarsten1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_real.20000644000175000017500000000004214342422106021753 0ustar carstencarsten1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_imag.4.golden0000644000175000017500000000050014342422106023416 0ustar carstencarsten32176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 -316 0 1543 0 -821 0 163 0 -592 0 453 0 -655 0 7521 552 877 1128 -41 35 586 255 592 48 -407 -900 179 -579 -148 -403 -1310 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_imag.2.golden0000644000175000017500000000010014342422106023410 0ustar carstencarsten1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_real.4.golden0000644000175000017500000000050614342422106023432 0ustar carstencarsten32176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 -1501 0 -951 0 -526 0 -76 0 121 0 519 0 974 0 1440 2112 4126 -2477 279 523 -183 85 -413 -908 -458 -505 921 -299 -165 2093 -2763 systemc-2.3.4/examples/sysc/fft/fft_fxpt/fft_fxpt.vcxproj0000644000175000017500000003000414342422106023515 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {012C2D43-199A-4899-B057-12FE2E71DFB0} fft_fxpt Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_real.3.golden0000644000175000017500000000012514342422106023426 0ustar carstencarsten0 -1501 0 -951 0 -526 0 -76 0 121 0 519 0 974 0 1440 systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_imag0000644000175000017500000000036714342422106021617 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 29 34 85 206 336 593 823 422 -12 -103 -599 -734 -339 -188 -23 22 systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_real.40000644000175000017500000000035714342422106021766 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 123 34 -23 12 45 0 67 134 -45 30 96 189 234 535 105 576 systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_real.10000644000175000017500000000012014342422106021747 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_imag.3.golden0000644000175000017500000000012614342422106023421 0ustar carstencarsten0 -316 0 1543 0 -821 0 163 0 -592 0 453 0 -655 0 7521 systemc-2.3.4/examples/sysc/fft/fft_fxpt/fft.h0000644000175000017500000000372314342422106021220 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fft.h - This is the interface file for the synchronous process "fft". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct fft: sc_module { sc_in > in_real; sc_in > in_imag; sc_in data_valid; sc_in data_ack; sc_out > out_real; sc_out > out_imag; sc_out data_req; sc_out data_ready; sc_in_clk CLK; SC_CTOR(fft) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_imag.10000644000175000017500000000012014342422106021741 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 systemc-2.3.4/examples/sysc/fft/fft_fxpt/fft.cpp0000644000175000017500000002244614342422106021556 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fft.cpp - This is the implementation file for the synchronous process "fft". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* This is the implementation file for the synchronous process "fft" */ #include "systemc.h" #include "fft.h" //Function for butterfly computation void func_butterfly ( const sc_int<16>& w_real /* snps width 16 */, const sc_int<16>& w_imag /* snps width 16 */, const sc_int<16>& real1_in /* snps width 16 */, const sc_int<16>& imag1_in /* snps width 16 */, const sc_int<16>& real2_in /* snps width 16 */, const sc_int<16>& imag2_in /* snps width 16 */, sc_int<16>& real1_out /* snps width 16 */, sc_int<16>& imag1_out /* snps width 16 */, sc_int<16>& real2_out /* snps width 16 */, sc_int<16>& imag2_out /* snps width 16 */ ) { // Variable declarations sc_int<17> tmp_real1; sc_int<17> tmp_imag1; sc_int<17> tmp_real2; sc_int<17> tmp_imag2; sc_int<34> tmp_real3; sc_int<34> tmp_imag3; // Begin Computation tmp_real1 = real1_in + real2_in; // = + tmp_imag1 = imag1_in + imag2_in; // = - tmp_real2 = real1_in - real2_in; // = - tmp_imag2 = imag1_in - imag2_in; // = * - * tmp_real3 = tmp_real2*w_real - tmp_imag2*w_imag; // = * - * tmp_imag3 = tmp_real2*w_imag + tmp_imag2*w_real; // assign the sign-bit(MSB) real1_out[15] = tmp_real1[16]; imag1_out[15] = tmp_imag1[16]; // assign the rest of the bits real1_out.range(14,0) = tmp_real1.range(14,0); imag1_out.range(14,0) = tmp_imag1.range(14,0); // assign the sign-bit(MSB) real2_out[15] = tmp_real3[33]; imag2_out[15] = tmp_imag3[33]; // assign the rest of the bits real2_out.range(14,0) = tmp_real3.range(24,10); imag2_out.range(14,0) = tmp_imag3.range(24,10); } // end func_butterfly void fft::entry() { // Variable Declarations sc_int<16> real[16]; sc_int<16> imag[16]; sc_int<16> tmp_real; sc_int<16> tmp_imag; short index; sc_int<6> N; sc_int<4> M; sc_int<6> len; sc_int<16> W_real[7]; sc_int<16> W_imag[7]; sc_int<16> w_real; sc_int<16> w_imag; sc_int<16> w_rec_real; sc_int<16> w_rec_imag; sc_int<32> w_temp1; sc_int<32> w_temp2; sc_int<32> w_temp3; sc_int<32> w_temp4; sc_int<33> w_temp5; sc_int<33> w_temp6; sc_int<16> real1_in; sc_int<16> imag1_in; sc_int<16> real2_in; sc_int<16> imag2_in; sc_int<16> real1_out; sc_int<16> imag1_out; sc_int<16> real2_out; sc_int<16> imag2_out; sc_int<4> stage; short i; short j; short index2; short windex; short incr; while(true) { data_req.write(false); data_ready.write(false); index = 0; wait(); //Read in the Sample values cout << endl << "Reading in the samples..." << endl; while( index < 16 ) { data_req.write(true); do { wait(); } while ( !(data_valid == true) ); tmp_real = in_real.read(); tmp_imag = in_imag.read(); real[index] = tmp_real; imag[index] = tmp_imag; index++; data_req.write(false); wait(); } index = 0; // Initialize M = 4; N = 16; len = N >> 1; cout << "Computing..." << endl; // Calculate the W-values recursively // <'s'/'u',m,n>: is used in comments to denote a fixed point representation // 's'- signed, 'u'- unsigned, m - no. of integer bits, n - no. of fractional bits // theta = 8.0*atan(1.0)/N; theta = 22.5 degree // w_real = cos(theta) = 0.92 (000000.1110101110) w_real = 942; // w_imag = -sin(theta) = -0.38(111111.1001111010) w_imag = -389; // w_rec_real = 1(0000001.0000000000) w_rec_real = 1024; // w_rec_real = 0(000000.0000000000) w_rec_imag = 0; unsigned short w_index; w_index = 0; while(w_index < 7) { // = * w_temp1 = w_rec_real*w_real; w_temp2 = w_rec_imag*w_imag; // = * w_temp3 = w_rec_real*w_imag; w_temp4 = w_rec_imag*w_real; // = - w_temp5 = w_temp1 - w_temp2; // = + w_temp6 = w_temp3 + w_temp4; // assign the sign-bit(MSB) W_real[w_index][15] = w_temp5[32]; W_imag[w_index][15] = w_temp6[32]; // assign the rest of the bits W_real[w_index].range(14,0) = w_temp5.range(24,10); W_imag[w_index].range(14,0) = w_temp6.range(24,10); // update w_rec.. values for the next iteration w_rec_real = W_real[w_index]; w_rec_imag = W_imag[w_index]; w_index++; } ////////////////////////////////////////////////////////////////////////// /// Computation - 1D Complex DFT In-Place DIF Computation Algorithm //// ////////////////////////////////////////////////////////////////////////// stage = 0; len = N; incr = 1; while (stage < M) { len = len >> 1; //First Iteration : Simple calculation, with no multiplies i = 0; while(i < (short)N) { index = i; index2 = i + (short)len; tmp_real = real[index] + real[index2]; tmp_imag = imag[index] + imag[index2]; real[index2] = (real[index] - real[index2]); imag[index2] = (imag[index] - imag[index2]); real[index] = tmp_real; imag[index] = tmp_imag; i = (short)(i + (len << 1)); } //Remaining Iterations: Use Stored W j = 1; windex = incr - 1; // This loop executes N/2 times at the first stage, N/2 times at the second.. once at last stage while (j < (short)len) { i = j; while (i < (short)N) { index = i; index2 = i + (short)len; // Read in the data and twiddle factors w_real = W_real[windex]; w_imag = W_imag[windex]; real1_in = real[index]; imag1_in = imag[index]; real2_in = real[index2]; imag2_in = imag[index2]; // Call butterfly computation function func_butterfly(w_real, w_imag, real1_in, imag1_in, real2_in, imag2_in, real1_out, imag1_out, real2_out, imag2_out); // Store back the results real[index] = real1_out; imag[index] = imag1_out; real[index2] = real2_out; imag[index2] = imag2_out; i = (short)(i + (len << 1)); } windex = windex + incr; j++; } stage++; incr = incr << 1; } ////////////////////////////////////////////////////////////////////////// //Writing out the normalized transform values in bit reversed order ////////////////////////////////////////////////////////////////////////// sc_uint<4> bits_i; sc_uint<4> bits_index; sc_int<16> real1; sc_int<16> imag1; bits_i = 0; bits_index = 0; i = 0; cout << "Writing the transform values..." << endl; while( i < 16) { bits_i = i; bits_index[3]= bits_i[0]; bits_index[2]= bits_i[1]; bits_index[1]= bits_i[2]; bits_index[0]= bits_i[3]; index = (short)bits_index; real1 = real[index]; imag1 = imag[index]; out_real.write(real1); out_imag.write(imag1); data_ready.write(true); do { wait(); } while ( !(data_ack == true) ); data_ready.write(false); i++; wait(); } index = 0; cout << "Done..." << endl; } }// end entry() function systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_imag.20000644000175000017500000000004214342422106021745 0ustar carstencarsten1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_fxpt/CMakeLists.txt0000644000175000017500000000536114342422106023030 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/fft/fft_fxpt/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (fft_fxpt main.cpp source.h source.cpp fft.h fft.cpp sink.h sink.cpp) target_link_libraries (fft_fxpt SystemC::systemc) set (IMAGE_FILES in_imag in_imag.1 in_imag.2 in_imag.3 in_imag.4 in_real in_real.1 in_real.2 in_real.3 in_real.4 out_imag.1.golden out_imag.2.golden out_imag.3.golden out_imag.4.golden out_real.1.golden out_real.2.golden out_real.3.golden out_real.4.golden) foreach (IMAGE_FILE ${IMAGE_FILES}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/${IMAGE_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_FILE} COPYONLY) endforeach (IMAGE_FILE ${IMAGE_FILES}) configure_and_add_test (fft_fxpt) systemc-2.3.4/examples/sysc/fft/fft_fxpt/source.h0000644000175000017500000000353514342422106021742 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** source.h - This is the interface file for the synchronous process source. Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct source: sc_module { sc_in data_req; sc_out > out_real; sc_out > out_imag; sc_out data_valid; sc_in_clk CLK; SC_CTOR(source) { SC_CTHREAD(entry, CLK.pos()); } //Process Functionality: in member function below void entry(); }; systemc-2.3.4/examples/sysc/fft/fft_fxpt/main.cpp0000644000175000017500000000507314342422106021720 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp - This file instantiates all processes and ties them together with signals. Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "fft.h" #include "source.h" #include "sink.h" int sc_main(int , char* []) { sc_signal > in_real; sc_signal > in_imag; sc_signal data_valid; sc_signal data_ack; sc_signal > out_real; sc_signal > out_imag; sc_signal data_req; sc_signal data_ready; sc_clock clock("CLOCK", 10, SC_NS, 0.5, 0.0, SC_NS); fft FFT1("FFTPROCESS"); FFT1.in_real(in_real); FFT1.in_imag(in_imag); FFT1.data_valid(data_valid); FFT1.data_ack(data_ack); FFT1.out_real(out_real); FFT1.out_imag(out_imag); FFT1.data_req(data_req); FFT1.data_ready(data_ready); FFT1.CLK(clock); source SOURCE1("SOURCEPROCESS"); SOURCE1.data_req(data_req); SOURCE1.out_real(in_real); SOURCE1.out_imag(in_imag); SOURCE1.data_valid(data_valid); SOURCE1.CLK(clock); sink SINK1("SINKPROCESS"); SINK1.data_ready(data_ready); SINK1.data_ack(data_ack); SINK1.in_real(out_real); SINK1.in_imag(out_imag); SINK1.CLK(clock); sc_start(); return 0; } systemc-2.3.4/examples/sysc/fft/fft_fxpt/sink.h0000644000175000017500000000355114342422106021404 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sink.h - This is the interface file for the synchronous process "sink". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct sink: sc_module { sc_in data_ready; sc_out data_ack; sc_in< sc_int<16> > in_real; sc_in< sc_int<16> > in_imag; sc_in_clk CLK; FILE* fp_real; FILE* fp_imag; SC_CTOR(sink) { SC_CTHREAD(entry, CLK.pos()); } void entry(); ~sink() { fclose( fp_real ); fclose( fp_imag ); } }; systemc-2.3.4/examples/sysc/fft/fft_fxpt/source.cpp0000644000175000017500000000445114342422106022273 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** source.cpp - This is the implementation file for the synchronous process "source". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "source.h" void source::entry() { FILE *fp_real, *fp_imag; int tmp_val; fp_real = fopen("in_real", "r"); fp_imag = fopen("in_imag", "r"); data_valid.write(false); while(true) { do { wait(); } while ( !(data_req == true) ); if (fscanf(fp_real,"%d", &tmp_val) == EOF) { cout << "End of Input Stream: Simulation Stops" << endl; sc_stop(); break; }; out_real.write(tmp_val); if (fscanf(fp_imag,"%d", &tmp_val) == EOF) { cout << "End of Input Stream: Simulation Stops" << endl; sc_stop(); break; }; out_imag.write(tmp_val); data_valid.write(true); do { wait(); } while ( !(data_req == false) ); data_valid.write(false); wait(); } } systemc-2.3.4/examples/sysc/fft/fft_fxpt/golden.log0000644000175000017500000000066314342422106022243 0ustar carstencarsten Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... End of Input Stream: Simulation Stops Info: /OSCI/SystemC: Simulation stopped by user. systemc-2.3.4/examples/sysc/fft/fft_fxpt/in_imag.30000644000175000017500000000010414342422106021745 0ustar carstencarsten456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 systemc-2.3.4/examples/sysc/fft/fft_fxpt/out_real.1.golden0000644000175000017500000000010414342422106023421 0ustar carstencarsten32176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_fxpt/Makefile0000644000175000017500000000033614342422106021725 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = fft_fxpt SRCS = $(wildcard *.cpp) OBJS = $(SRCS:.cpp=.o) EXTRA_CLEAN = out_real out_imag include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/fft/README0000644000175000017500000001371414342422106017331 0ustar carstencarsten======================================================================== README for FFT ======================================================================== This example demonstrates a simple synchronous system for a 16-point FFT computation. This example was developed and tested on Solaris2.5. Following are the components of the system: a. source : Reads in real and imaginary samples from the files "in_real" and "in_imag". Interacts with the process "fft". The input files need to be in ASCII format. b. fft : The main block in the system. Computes 16-point fft. More about this block later. c. sink : Reads the real and imaginary components of the output transform values, and writes those to the files "out_real" and "out_imag" respectively. Output files are produced in ASCII format. +--------------------------------------------------+ | +-----------+ +-----------+ +-----------+ | | | | | | | | | | | source |-----| FFT |---| sink | | | | | | | | | | | +-----------+ +-----------+ +-----------+ | | main | +--------------------------------------------------+ You can find the floating point and fixed point versions in the following directories, respectively: ./fft_flpt/ ./fft_fxpt/ Steps: ------ i. Variable "SYSTEMC" within the file Makefile.defs should points to your installation of SystemC. ii. Choose the appropriate Makefile, i.e., Makefile.gcc for gccsparcOS5 Makefile.hp for hpux10 Makefile.linux for linux Makefile.sun for sparcOS5 iii. Build the executable, using the Makefile. For instance, > make -f Makefile.gcc iv. Prepare complex input sequence in the files "in_real" & "in_imag" and run the simulation. > run.x Verification: ------------- As a sanity check, the block was tested with a DC signal and an Impulse wave. A COSSAP testbench, using cossap block "DFT_QC", was used to verify the results in a general case. Results of the fixed point block are within a certain range of the precise result, as allowed by the finite precision arithmetic. Some sample input files are included in each directory. Corresponding result files are also provided with the extension ".golden". The FFT Block: -------------- --------------- in_real ----->| |-----> out_real | | | | in_imag ----->| |-----> out_imag | | | FFT BLOCK | data_req <-----| (16-point) |-----> data_ready | | | | data_valid ----->| |<----- data_ack | | --------------- Data Read: The block initiates the reading of a sample by sending a "data_req" signal to the source of input data. It waits for "data_valid" signal from the data source to become high; then it lowers the "data_req" signal and reads the real and imaginary data samples from it's input ports "in_real" and "in_imag" respectively. The block reads in 16 samples of input data in this fashion. FFT Computation: This block computes 16-point FFT on a sequence of complex inputs, using radix-2 decimation in frequency algorithm. This block performs finite precision arithmetic. The input data is read as a signed 16-bit fixed point number, with 10 fractional bits. Twiddle factors and output values have the same representation. Internal to the block, computation is performed using fixed point arithmetic. The input samples and output transforms, are externally inferred as 16-bit integers. Data Write: Once the FFT calculation is performed, the block writes the tran- sform values to a sink. It puts the real and imaginary components of transform value on it's output ports "out_real" and "out_imag" respectively, and sends a "data_ready" signal to the sink. It waits for "data_ack" signal from the sink to go high and then it writes the next value. The block writes the 16 transform values to the output ports in this manner and then it goes to the next Read-Compute-Write cycle. Floating Point Version ---------------------- The floating point version is the first step, in modeling this block, where the emphasis is to prove the algorithm and verify the results, while working at the highest level of abstraction. This does not reflect anything about the target architecture. Fixed Point Version ------------------- The fixed point version is the next step, taking closer to the RTL level. This is refined from the floating point version, where all data are refined from infinite precision representation to finite bitwidth representation. All computation is performed using the fixed-point arithmetic. Future Extensions/Limitations: ------------------------------ * Control refinement would be the next step, leading to the RTL version of the block. * This example does not handle overflow and underflow in the fixed point version. * The current block is a 16-point FFT block. It could be extended to a general N-point FFT, with N as a parameter. * In the present model, not much attention is paid to the quality of the target hardware. For instance: instead of computing the w-values within the block, it could be precalculated outside, and stored in a ROM. Several HW optimizations(for area and speed) can be tried out, once the RTL version of the block is ready. ======================================================================== systemc-2.3.4/examples/sysc/fft/fft_flpt/0000755000175000017500000000000014342422106020247 5ustar carstencarstensystemc-2.3.4/examples/sysc/fft/fft_flpt/in_real.30000644000175000017500000000010514342422106021740 0ustar carstencarsten0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_imag.1.golden0000644000175000017500000000036014342422106023403 0ustar carstencarsten3.217600e+04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 systemc-2.3.4/examples/sysc/fft/fft_flpt/sink.cpp0000644000175000017500000000373014342422106021722 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sink.cpp - This is the implementation file for the synchronous process "sink". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "sink.h" void sink::entry() { fp_real = fopen("out_real","w"); fp_imag = fopen("out_imag","w"); data_ack.write(false); while(true) { do { wait(); } while ( !(data_ready == true) ); fprintf(fp_real,"%e \n",in_real.read()); fprintf(fp_imag,"%e \n",in_imag.read()); data_ack.write(true); do { wait(); } while ( !(data_ready == false) ); data_ack.write(false); } } systemc-2.3.4/examples/sysc/fft/fft_flpt/test.am0000644000175000017500000000651014342422106021547 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: fft/fft_flpt ## %C%: fft_fft_flpt examples_TESTS += fft/fft_flpt/test fft_fft_flpt_test_CPPFLAGS = \ $(AM_CPPFLAGS) fft_fft_flpt_test_SOURCES = \ $(fft_fft_flpt_H_FILES) \ $(fft_fft_flpt_CXX_FILES) examples_BUILD += \ $(fft_fft_flpt_BUILD) examples_CLEAN += \ fft/fft_flpt/run.log \ fft/fft_flpt/expected_trimmed.log \ fft/fft_flpt/run_trimmed.log \ fft/fft_flpt/diff.log examples_FILES += \ $(fft_fft_flpt_H_FILES) \ $(fft_fft_flpt_CXX_FILES) \ $(fft_fft_flpt_BUILD) \ $(fft_fft_flpt_EXTRA) examples_DIRS += fft/fft_flpt ## example-specific details examples_CLEAN += \ fft/fft_flpt/out_real \ fft/fft_flpt/out_imag fft_fft_flpt_H_FILES = \ fft/fft_flpt/fft.h \ fft/fft_flpt/sink.h \ fft/fft_flpt/source.h fft_fft_flpt_CXX_FILES = \ fft/fft_flpt/fft.cpp \ fft/fft_flpt/main.cpp \ fft/fft_flpt/sink.cpp \ fft/fft_flpt/source.cpp fft_fft_flpt_BUILD = \ fft/fft_flpt/golden.log \ fft/fft_flpt/in_imag \ fft/fft_flpt/in_imag.1 \ fft/fft_flpt/in_imag.2 \ fft/fft_flpt/in_imag.3 \ fft/fft_flpt/in_imag.4 \ fft/fft_flpt/in_real \ fft/fft_flpt/in_real.1 \ fft/fft_flpt/in_real.2 \ fft/fft_flpt/in_real.3 \ fft/fft_flpt/in_real.4 \ fft/fft_flpt/out_imag.1.golden \ fft/fft_flpt/out_imag.2.golden \ fft/fft_flpt/out_imag.3.golden \ fft/fft_flpt/out_imag.4.golden \ fft/fft_flpt/out_real.1.golden \ fft/fft_flpt/out_real.2.golden \ fft/fft_flpt/out_real.3.golden \ fft/fft_flpt/out_real.4.golden fft_fft_flpt_EXTRA = \ fft/fft_flpt/fft_flpt.sln \ fft/fft_flpt/fft_flpt.vcxproj \ fft/fft_flpt/CMakeLists.txt \ fft/fft_flpt/Makefile #fft_fft_flpt_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/fft/fft_flpt/in_imag.40000644000175000017500000000036714342422106021745 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 29 34 85 206 336 593 823 422 -12 -103 -599 -734 -339 -188 -23 22 systemc-2.3.4/examples/sysc/fft/fft_flpt/in_real0000644000175000017500000000035714342422106021610 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 123 34 -23 12 45 0 67 134 -45 30 96 189 234 535 105 576 systemc-2.3.4/examples/sysc/fft/fft_flpt/fft_flpt.vcxproj0000644000175000017500000003001114342422106023463 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE} fft_flpt Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_real.2.golden0000644000175000017500000000036014342422106023412 0ustar carstencarsten1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 systemc-2.3.4/examples/sysc/fft/fft_flpt/in_real.20000644000175000017500000000004214342422106021737 0ustar carstencarsten1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_imag.4.golden0000644000175000017500000000171314342422106023411 0ustar carstencarsten3.217600e+04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 -3.095583e+02 0.000000e+00 1.560636e+03 0.000000e+00 -8.567042e+02 0.000000e+00 2.504492e+01 0.000000e+00 -6.329711e+02 0.000000e+00 3.824861e+02 0.000000e+00 -6.967664e+02 0.000000e+00 7.823833e+03 5.520000e+02 8.697477e+02 1.164104e+03 -3.778723e+01 3.999994e+01 6.132667e+02 2.618257e+02 6.339840e+02 4.800000e+01 -4.168193e+02 -9.261038e+02 1.929208e+02 -5.839999e+02 -1.461955e+02 -4.198261e+02 -1.381117e+03 systemc-2.3.4/examples/sysc/fft/fft_flpt/fft_flpt.sln0000644000175000017500000000227214342422106022574 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fft_flpt", "fft_flpt.vcxproj", "{40538B2A-48F0-4EAE-AF89-030942A6DAFE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|Win32.ActiveCfg = Debug|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|Win32.Build.0 = Debug|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|x64.ActiveCfg = Debug|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Debug|x64.Build.0 = Debug|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|Win32.ActiveCfg = Release|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|Win32.Build.0 = Release|Win32 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|x64.ActiveCfg = Release|x64 {40538B2A-48F0-4EAE-AF89-030942A6DAFE}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/fft/fft_flpt/out_imag.2.golden0000644000175000017500000000036014342422106023404 0ustar carstencarsten1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_real.4.golden0000644000175000017500000000171514342422106023421 0ustar carstencarsten3.217600e+04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 -1.556257e+03 0.000000e+00 -1.042783e+03 0.000000e+00 -5.724320e+02 0.000000e+00 -1.259072e+02 0.000000e+00 1.259054e+02 0.000000e+00 5.724309e+02 0.000000e+00 1.042783e+03 0.000000e+00 1.556260e+03 2.112000e+03 4.212146e+03 -2.510606e+03 3.096022e+02 5.320001e+02 -1.840003e+02 6.365356e+01 -3.997019e+02 -9.080000e+02 -4.769509e+02 -5.193939e+02 9.546962e+02 -3.080001e+02 -1.791950e+02 2.162346e+03 -2.892596e+03 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_real.3.golden0000644000175000017500000000036414342422106023417 0ustar carstencarsten0.000000e+00 -1.556257e+03 0.000000e+00 -1.042783e+03 0.000000e+00 -5.724320e+02 0.000000e+00 -1.259072e+02 0.000000e+00 1.259054e+02 0.000000e+00 5.724309e+02 0.000000e+00 1.042783e+03 0.000000e+00 1.556260e+03 systemc-2.3.4/examples/sysc/fft/fft_flpt/in_imag0000644000175000017500000000036714342422106021603 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 29 34 85 206 336 593 823 422 -12 -103 -599 -734 -339 -188 -23 22 systemc-2.3.4/examples/sysc/fft/fft_flpt/in_real.40000644000175000017500000000035714342422106021752 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 234 456 768 456 234 120 0 -120 -234 -456 -768 -456 -234 -120 123 34 -23 12 45 0 67 134 -45 30 96 189 234 535 105 576 systemc-2.3.4/examples/sysc/fft/fft_flpt/in_real.10000644000175000017500000000012014342422106021733 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_imag.3.golden0000644000175000017500000000036414342422106023411 0ustar carstencarsten0.000000e+00 -3.095583e+02 0.000000e+00 1.560636e+03 0.000000e+00 -8.567042e+02 0.000000e+00 2.504492e+01 0.000000e+00 -6.329711e+02 0.000000e+00 3.824861e+02 0.000000e+00 -6.967664e+02 0.000000e+00 7.823833e+03 systemc-2.3.4/examples/sysc/fft/fft_flpt/fft.h0000644000175000017500000000363014342422106021201 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fft.h - This is the interface file for the synchronous process "fft". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct fft: sc_module { sc_in in_real; sc_in in_imag; sc_in data_valid; sc_in data_ack; sc_out out_real; sc_out out_imag; sc_out data_req; sc_out data_ready; sc_in_clk CLK; SC_CTOR(fft) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; systemc-2.3.4/examples/sysc/fft/fft_flpt/in_imag.10000644000175000017500000000012014342422106021725 0ustar carstencarsten2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 systemc-2.3.4/examples/sysc/fft/fft_flpt/fft.cpp0000644000175000017500000001327614342422106021543 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fft.cpp - This is the implementation file for the synchronous process "fft". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "fft.h" void fft::entry() { float sample[16][2]; unsigned int index; while(true) { data_req.write(false); data_ready.write(false); index = 0; //Reading in the Samples cout << endl << "Reading in the samples..." << endl; while( index < 16 ) { data_req.write(true); do { wait(); } while (data_valid == true); sample[index][0] = in_real.read(); sample[index][1] = in_imag.read(); index++; data_req.write(false); wait(); } index = 0; ////////////////////////////////////////////////////////////////////////// /// Computation - 1D Complex DFT In-Place DIF Computation Algorithm //// ////////////////////////////////////////////////////////////////////////// //Size of FFT, N = 2**M unsigned int N, M, len ; float theta; float W[7][2], w_real, w_imag, w_rec_real, w_rec_imag, w_temp; //Initialize M = 4; N = 16; len = N/2; theta = 8.0f*atanf(1.0f)/N; cout << "Computing..." << endl; //Calculate the W-values recursively w_real = cos(theta); w_imag = -sin(theta); w_rec_real = 1; w_rec_imag = 0; index = 0; while(index < len-1) { w_temp = w_rec_real*w_real - w_rec_imag*w_imag; w_rec_imag = w_rec_real*w_imag + w_rec_imag*w_real; w_rec_real = w_temp; W[index][0] = w_rec_real; W[index][1] = w_rec_imag; index++; } float tmp_real, tmp_imag, tmp_real2, tmp_imag2; unsigned int stage, i, j,index2, windex, incr; //Begin Computation stage = 0; len = N; incr = 1; while (stage < M) { len = len/2; //First Iteration : With No Multiplies i = 0; while(i < N) { index = i; index2 = index + len; tmp_real = sample[index][0] + sample[index2][0]; tmp_imag = sample[index][1] + sample[index2][1]; sample[index2][0] = sample[index][0] - sample[index2][0]; sample[index2][1] = sample[index][1] - sample[index2][1]; sample[index][0] = tmp_real; sample[index][1] = tmp_imag; i = i + 2*len; } //Remaining Iterations: Use Stored W j = 1; windex = incr - 1; while (j < len) // This loop executes N/2 times at first stage, .. once at last stage. { i = j; while (i < N) { index = i; index2 = index + len; tmp_real = sample[index][0] + sample[index2][0]; tmp_imag = sample[index][1] + sample[index2][1]; tmp_real2 = sample[index][0] - sample[index2][0]; tmp_imag2 = sample[index][1] - sample[index2][1]; sample[index2][0] = tmp_real2*W[windex][0] - tmp_imag2*W[windex][1]; sample[index2][1] = tmp_real2*W[windex][1] + tmp_imag2*W[windex][0]; sample[index][0] = tmp_real; sample[index][1] = tmp_imag; i = i + 2*len; } windex = windex + incr; j++; } stage++; incr = 2*incr; } ////////////////////////////////////////////////////////////////////////// //Writing out the normalized transform values in bit reversed order sc_uint<4> bits_i; sc_uint<4> bits_index; bits_i = 0; i = 0; cout << "Writing the transform values..." << endl; while( i < 16) { bits_i = i; bits_index[3]= bits_i[0]; bits_index[2]= bits_i[1]; bits_index[1]= bits_i[2]; bits_index[0]= bits_i[3]; index = bits_index.to_uint(); out_real.write(sample[index][0]); out_imag.write(sample[index][1]); data_ready.write(true); do { wait(); } while ( !(data_ack == true) ); data_ready.write(false); i++; wait(); } index = 0; cout << "Done..." << endl; } } systemc-2.3.4/examples/sysc/fft/fft_flpt/in_imag.20000644000175000017500000000004214342422106021731 0ustar carstencarsten1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 systemc-2.3.4/examples/sysc/fft/fft_flpt/CMakeLists.txt0000644000175000017500000000540314342422106023011 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/fft/fft_flpt/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (fft_flpt main.cpp source.h source.cpp fft.h fft.cpp sink.h sink.cpp) target_link_libraries (fft_flpt SystemC::systemc) set (IMAGE_FILES in_imag in_imag.1 in_imag.2 in_imag.3 in_imag.4 in_real in_real.1 in_real.2 in_real.3 in_real.4 out_imag.1.golden out_imag.2.golden out_imag.3.golden out_imag.4.golden out_real.1.golden out_real.2.golden out_real.3.golden out_real.4.golden) foreach (IMAGE_FILE ${IMAGE_FILES}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/${IMAGE_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_FILE} COPYONLY) endforeach (IMAGE_FILE ${IMAGE_FILES}) configure_and_add_test (fft_flpt) systemc-2.3.4/examples/sysc/fft/fft_flpt/source.h0000644000175000017500000000341614342422106021724 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** source.h - This is the interface file for the synchronous process source. Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct source: sc_module { sc_in data_req; sc_out out_real; sc_out out_imag; sc_out data_valid; sc_in_clk CLK; SC_CTOR(source) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; systemc-2.3.4/examples/sysc/fft/fft_flpt/main.cpp0000644000175000017500000000504114342422106021677 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp - This file instantiates all processes and ties them together with signals. Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "fft.h" #include "source.h" #include "sink.h" int sc_main(int , char*[]) { sc_signal in_real; sc_signal in_imag; sc_signal data_valid; sc_signal data_ack; sc_signal out_real; sc_signal out_imag; sc_signal data_req; sc_signal data_ready; sc_clock clock("CLOCK", 10, SC_NS, 0.5, 0.0, SC_NS); fft FFT1("FFTPROCESS"); FFT1.in_real(in_real); FFT1.in_imag(in_imag); FFT1.data_valid(data_valid); FFT1.data_ack(data_ack); FFT1.out_real(out_real); FFT1.out_imag(out_imag); FFT1.data_req(data_req); FFT1.data_ready(data_ready); FFT1.CLK(clock); source SOURCE1("SOURCEPROCESS"); SOURCE1.data_req(data_req); SOURCE1.out_real(in_real); SOURCE1.out_imag(in_imag); SOURCE1.data_valid(data_valid); SOURCE1.CLK(clock); sink SINK1("SINKPROCESS"); SINK1.data_ready(data_ready); SINK1.data_ack(data_ack); SINK1.in_real(out_real); SINK1.in_imag(out_imag); SINK1.CLK(clock); sc_start(); return 0; } systemc-2.3.4/examples/sysc/fft/fft_flpt/sink.h0000644000175000017500000000354014342422106021366 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sink.h - This is the interface file for the synchronous process "sink". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct sink: sc_module { sc_in data_ready; sc_out data_ack; sc_in in_real; sc_in in_imag; sc_in_clk CLK; FILE* fp_real; FILE* fp_imag; SC_CTOR(sink) { SC_CTHREAD(entry, CLK.pos()); } void entry(); ~sink() { fclose( fp_real ); fclose( fp_imag ); } }; systemc-2.3.4/examples/sysc/fft/fft_flpt/source.cpp0000644000175000017500000000445614342422106022264 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** source.cpp - This is the implementation file for the synchronous process "source" . Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "source.h" void source::entry() { FILE *fp_real, *fp_imag; float tmp_val; fp_real = fopen("in_real", "r"); fp_imag = fopen("in_imag", "r"); data_valid.write(false); while(true) { do { wait(); } while ( !(data_req == true) ); if (fscanf(fp_real,"%f \n",&tmp_val) == EOF) { cout << "End of Input Stream: Simulation Stops" << endl; sc_stop(); break; }; out_real.write(tmp_val); if (fscanf(fp_imag,"%f \n",&tmp_val) == EOF) { cout << "End of Input Stream: Simulation Stops" << endl; sc_stop(); break; }; out_imag.write(tmp_val); data_valid.write(true); do { wait(); } while ( !(data_req == false) ); data_valid.write(false); wait(); } } systemc-2.3.4/examples/sysc/fft/fft_flpt/golden.log0000644000175000017500000000136314342422106022225 0ustar carstencarsten Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... Computing... Writing the transform values... Done... Reading in the samples... End of Input Stream: Simulation Stops Info: /OSCI/SystemC: Simulation stopped by user. systemc-2.3.4/examples/sysc/fft/fft_flpt/in_imag.30000644000175000017500000000010414342422106021731 0ustar carstencarsten456 234 120 0 -120 -234 -456 -768 -456 -234 -120 0 120 234 456 768 systemc-2.3.4/examples/sysc/fft/fft_flpt/out_real.1.golden0000644000175000017500000000036014342422106023411 0ustar carstencarsten3.217600e+04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 systemc-2.3.4/examples/sysc/fft/fft_flpt/Makefile0000644000175000017500000000033614342422106021711 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = fft_flpt SRCS = $(wildcard *.cpp) OBJS = $(SRCS:.cpp=.o) EXTRA_CLEAN = out_real out_imag include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/pipe/0000755000175000017500000000000014342422106016621 5ustar carstencarstensystemc-2.3.4/examples/sysc/pipe/display.h0000644000175000017500000000373114342422106020443 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** display.h -- This is the interface file for the display module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef DISPLAY_H #define DISPLAY_H struct display : sc_module { sc_in in; // input port 1 sc_in clk; // clock void print_result(); // method to display input port values //Constructor SC_CTOR( display ) { SC_METHOD( print_result ); // declare print_result as SC_METHOD and dont_initialize(); sensitive << clk.pos(); // make it sensitive to positive clock edge } }; #endif systemc-2.3.4/examples/sysc/pipe/display.cpp0000644000175000017500000000331414342422106020773 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** display.cpp -- Implementation of the display module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "display.h" #include //Definition of print_result method void display::print_result() { printf("Result = %f\n", in.read()); } // end of print method systemc-2.3.4/examples/sysc/pipe/test.am0000644000175000017500000000515714342422106020127 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: pipe ## %C%: pipe examples_TESTS += pipe/test pipe_test_CPPFLAGS = \ $(AM_CPPFLAGS) pipe_test_SOURCES = \ $(pipe_H_FILES) \ $(pipe_CXX_FILES) examples_BUILD += \ $(pipe_BUILD) examples_CLEAN += \ pipe/run.log \ pipe/expected_trimmed.log \ pipe/run_trimmed.log \ pipe/diff.log examples_FILES += \ $(pipe_H_FILES) \ $(pipe_CXX_FILES) \ $(pipe_BUILD) \ $(pipe_EXTRA) examples_DIRS += pipe ## example-specific details pipe_H_FILES = \ pipe/display.h \ pipe/numgen.h \ pipe/stage1.h \ pipe/stage2.h \ pipe/stage3.h pipe_CXX_FILES = \ pipe/display.cpp \ pipe/main.cpp \ pipe/numgen.cpp \ pipe/stage1.cpp \ pipe/stage2.cpp \ pipe/stage3.cpp # floating-point outputs vary accross platforms #pipe_BUILD = \ # pipe/golden.log pipe_EXTRA = \ pipe/pipe.sln \ pipe/pipe.vcxproj \ pipe/CMakeLists.txt \ pipe/Makefile \ pipe/README #pipe_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/pipe/README0000644000175000017500000000202214342422106017475 0ustar carstencarstenREADME for Pipe ================================================================= This is a basic example to show how to use SystemC and user can use it as a template to create more complex models. It consists of 3 processes that form individual stages of a pipleline. | +-----------+ +-----------+ +-----------+ | | | | | | | | | | | stage1 |---->| stage2 |-->| stage3 | | | | | | | | | | | +-----------+ +-----------+ +-----------+ | The first stage of the pipeline accepts 2 inputs and computes their sum and difference. The second stage accepts the results of the first stage and computes their product and quotient. Finally stage3 accepts these outputs from second stage and computes the first input raised to the power of the second. In order to compile this model, you have to execute gmake/make, then you should find a run.x executable after the compilation. Execute run.x and it will print out the results to your screen. systemc-2.3.4/examples/sysc/pipe/pipe.sln0000644000175000017500000000226214342422106020276 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pipe", "pipe.vcxproj", "{2993F85A-036B-489A-8EE5-ED27E2B1A4E6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|Win32.ActiveCfg = Debug|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|Win32.Build.0 = Debug|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|x64.ActiveCfg = Debug|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Debug|x64.Build.0 = Debug|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|Win32.ActiveCfg = Release|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|Win32.Build.0 = Release|Win32 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|x64.ActiveCfg = Release|x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/pipe/stage1.cpp0000644000175000017500000000336514342422106020520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage1.cpp -- This is the implementation file for the stage1 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "stage1.h" //Definition of addsub method void stage1::addsub() { double a; double b; a = in1.read(); b = in2.read(); sum.write(a+b); diff.write(a-b); } // end of addsub method systemc-2.3.4/examples/sysc/pipe/pipe.vcxproj0000644000175000017500000003065114342422106021200 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {2993F85A-036B-489A-8EE5-ED27E2B1A4E6} pipe Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset %(AdditionalOptions) Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false %(AdditionalOptions) $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 %(AdditionalOptions) Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 %(AdditionalOptions) $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/pipe/stage2.cpp0000644000175000017500000000342414342422106020515 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage2.cpp -- This is the implementation file for the stage2 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "stage2.h" //definition of multdiv method void stage2::multdiv() { double a; double b; a = sum.read(); b = diff.read(); if( b == 0 ) b = 5.0; prod.write(a*b); quot.write(a/b); } // end of multdiv systemc-2.3.4/examples/sysc/pipe/stage2.h0000644000175000017500000000411314342422106020156 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage2.h -- This is the interface file for the stage2 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef STAGE2_H #define STAGE2_H struct stage2 : sc_module { sc_in sum; //input port 1 sc_in diff; //input port 2 sc_out prod; //output port 1 sc_out quot; //output port 2 sc_in clk; //clock void multdiv(); //method providing functionality //Constructor SC_CTOR( stage2 ) { SC_METHOD( multdiv ); //Declare multdiv as SC_METHOD and dont_initialize(); sensitive << clk.pos(); //make it sensitive to positive clock edge. } }; #endif systemc-2.3.4/examples/sysc/pipe/CMakeLists.txt0000644000175000017500000000415414342422106021365 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/pipe/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (pipe main.cpp display.h display.cpp numgen.h numgen.cpp stage1.h stage1.cpp stage2.h stage2.cpp stage3.h stage3.cpp) target_link_libraries (pipe SystemC::systemc) configure_and_add_test (pipe) systemc-2.3.4/examples/sysc/pipe/stage1.h0000644000175000017500000000404614342422106020162 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage1.h -- This is the interface file for the stage1 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef STAGE1_H #define STAGE1_H struct stage1 : sc_module { sc_in in1; //input 1 sc_in in2; //input 2 sc_out sum; //output 1 sc_out diff; //output 2 sc_in clk; //clock void addsub(); //method implementing functionality //Counstructor SC_CTOR( stage1 ) { SC_METHOD( addsub ); //Declare addsub as SC_METHOD and dont_initialize(); sensitive << clk.pos(); //make it sensitive to positive clock edge } }; #endif systemc-2.3.4/examples/sysc/pipe/stage3.cpp0000644000175000017500000000342614342422106020520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage3.cpp -- This is the implementation file for the stage3 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "stage3.h" //Definition of power method void stage3::power() { double a; double b; double c; a = prod.read(); b = quot.read(); c = (a>0 && b>0)? pow(a, b) : 0.; powr.write(c); } // end of power method systemc-2.3.4/examples/sysc/pipe/stage3.h0000644000175000017500000000404314342422106020161 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stage3.h -- This is the interface file for the stage3 module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef STAGE3_H #define STAGE3_H struct stage3: sc_module { sc_in prod; //input port 1 sc_in quot; //input port 2 sc_out powr; //output port 1 sc_in clk; //clock void power(); //method implementing functionality //Constructor SC_CTOR( stage3 ){ SC_METHOD( power ); //declare power as SC_METHOD and dont_initialize(); sensitive << clk.pos(); //make it sensitive to positive clock edge } }; #endif systemc-2.3.4/examples/sysc/pipe/numgen.h0000644000175000017500000000400714342422106020264 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** numgen.h -- This is the interface file for the numgen module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef NUMGEN_H #define NUMGEN_H struct numgen : sc_module { sc_out out1; //output 1 sc_out out2; //output 2 sc_in clk; //clock // method to write values to the output ports void generate(); //Constructor SC_CTOR( numgen ) { SC_METHOD( generate ); //Declare generate as SC_METHOD and dont_initialize(); sensitive << clk.pos(); //make it sensitive to positive clock edge } }; #endif systemc-2.3.4/examples/sysc/pipe/main.cpp0000644000175000017500000000550214342422106020253 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- This is the top level file instantiating the modules and binding ports to signals. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "stage1.h" #include "stage2.h" #include "stage3.h" #include "display.h" #include "numgen.h" int sc_main(int, char *[]) { //Signals sc_signal in1; sc_signal in2; sc_signal sum; sc_signal diff; sc_signal prod; sc_signal quot; sc_signal powr; //Clock sc_signal clk; numgen N("numgen"); //instance of `numgen' module N(in1, in2, clk ); //Positional port binding stage1 S1("stage1"); //instance of `stage1' module //Named port binding S1.in1(in1); S1.in2(in2); S1.sum(sum); S1.diff(diff); S1.clk(clk); stage2 S2("stage2"); //instance of `stage2' module S2(sum, diff, prod, quot, clk ); //Positional port binding stage3 S3("stage3"); //instance of `stage3' module S3( prod, quot, powr, clk); //Positional port binding display D("display"); //instance of `display' module D(powr, clk); //Positional port binding sc_start(0, SC_NS); //Initialize simulation for(int i = 0; i < 50; i++){ clk.write(1); sc_start( 10, SC_NS ); clk.write(0); sc_start( 10, SC_NS ); } return 0; } systemc-2.3.4/examples/sysc/pipe/numgen.cpp0000644000175000017500000000341114342422106020615 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** numgen.cpp -- The implementation for the numgen module. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "numgen.h" // definition of the `generate' method void numgen::generate() { static double a = 134.56; static double b = 98.24; a -= 1.5; b -= 2.8; out1.write(a); out2.write(b); } // end of `generate' method systemc-2.3.4/examples/sysc/pipe/Makefile0000644000175000017500000000023314342422106020257 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT := pipe SRCS := $(wildcard *.cpp) OBJS := $(SRCS:.cpp=.o) include ../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/0000755000175000017500000000000014342422106016164 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/dpipe/0000755000175000017500000000000014342422106017265 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/dpipe/test.am0000644000175000017500000000500614342422106020564 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/dpipe ## %C%: 2_1_dpipe examples_TESTS += 2.1/dpipe/test 2_1_dpipe_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_dpipe_test_SOURCES = \ $(2_1_dpipe_H_FILES) \ $(2_1_dpipe_CXX_FILES) examples_BUILD += \ $(2_1_dpipe_BUILD) examples_CLEAN += \ 2.1/dpipe/run.log \ 2.1/dpipe/expected_trimmed.log \ 2.1/dpipe/run_trimmed.log \ 2.1/dpipe/diff.log examples_FILES += \ $(2_1_dpipe_H_FILES) \ $(2_1_dpipe_CXX_FILES) \ $(2_1_dpipe_BUILD) \ $(2_1_dpipe_EXTRA) examples_DIRS += 2.1/dpipe ## example-specific details 2_1_dpipe_H_FILES = 2_1_dpipe_CXX_FILES = \ 2.1/dpipe/main.cpp 2_1_dpipe_BUILD = \ 2.1/dpipe/golden.log 2_1_dpipe_EXTRA = \ 2.1/dpipe/dpipe.sln \ 2.1/dpipe/dpipe.vcxproj \ 2.1/dpipe/CMakeLists.txt \ 2.1/dpipe/Makefile #2_1_dpipe_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/dpipe/dpipe.sln0000644000175000017500000000226414342422106021110 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dpipe", "dpipe.vcxproj", "{5777AF4E-C70F-4EDF-924C-3520152CDDC9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|Win32.ActiveCfg = Debug|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|Win32.Build.0 = Debug|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|x64.ActiveCfg = Debug|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Debug|x64.Build.0 = Debug|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|Win32.ActiveCfg = Release|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|Win32.Build.0 = Release|Win32 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|x64.ActiveCfg = Release|x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/dpipe/dpipe.vcxproj0000644000175000017500000002741714342422106022016 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {5777AF4E-C70F-4EDF-924C-3520152CDDC9} dpipe Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/dpipe/CMakeLists.txt0000644000175000017500000000347414342422106022035 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/dpipe/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (dpipe main.cpp) target_link_libraries (dpipe SystemC::systemc) configure_and_add_test (dpipe) systemc-2.3.4/examples/sysc/2.1/dpipe/main.cpp0000644000175000017500000001054414342422106020721 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- This example shows the use of the sc_export class to demonstrate the use of sc_export in the implementation of a delay pipe. Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" // This program implements a delay pipe which passes values through a fifo // in a specified number of clocks. A value may be inserted at each clock // edge and it will appear as the output of the pipe after the specified // number of clocks. The template arguments to this class are: // T the class specifying the value to be piped. // N is the number of stages in the pipe, and should be >= 2. // // For this example change the typedef below to the class that you want a // delay pipe for. typedef sc_biguint<121> atom; // Value to be pipe delayed. //============================================================================== // dpipe - DELAY PIPELINE FOR AN ARBITRARY CLASS: //============================================================================== template SC_MODULE(dpipe) { typedef sc_export > in; // To pipe port type. typedef sc_export > out; // From pipe port type. SC_CTOR(dpipe) { m_in(m_pipe[0]); m_out(m_pipe[N-1]); SC_METHOD(rachet); sensitive << m_clk.pos(); } void rachet() { for ( int i = N-1; i > 0; i-- ) { m_pipe[i].write(m_pipe[i-1].read()); } } sc_in_clk m_clk; // Pipe synchronization. in m_in; // Input to delay pipe. out m_out; // Output from delay pipe. sc_signal m_pipe[N]; // Pipeline stages. }; // Testbench reader of values from the pipe: SC_MODULE(Reader) { public: SC_CTOR(Reader) { SC_METHOD(extract) sensitive << m_clk.pos(); dont_initialize(); } protected: void extract() { cout << sc_time_stamp().to_double() << ": " << m_from_pipe.read() << endl; } public: sc_in_clk m_clk; // Module synchronization. sc_in m_from_pipe; // Output from delay pipe. }; // Testbench writer of values to the pipe: SC_MODULE(Writer) { SC_CTOR(Writer) { SC_METHOD(insert) sensitive << m_clk.pos(); m_counter = 0; } void insert() { m_to_pipe.write(m_counter); m_counter++; } sc_in_clk m_clk; // Module synchronization. atom m_counter; // Write value. sc_inout m_to_pipe; // Input for delay pipe. }; // Main program int sc_main( int, char* [] ) { sc_clock clock; dpipe delay("pipe"); Reader reader("reader"); Writer writer("writer"); delay.m_clk(clock); reader.m_clk(clock); reader.m_from_pipe(delay.m_out); writer.m_clk(clock); writer.m_to_pipe(delay.m_in); sc_start(10, SC_NS); return 0; } systemc-2.3.4/examples/sysc/2.1/dpipe/golden.log0000644000175000017500000000011514342422106021235 0ustar carstencarsten0: 0 1000: 0 2000: 0 3000: 0 4000: 1 5000: 2 6000: 3 7000: 4 8000: 5 9000: 6 systemc-2.3.4/examples/sysc/2.1/dpipe/Makefile0000644000175000017500000000022614342422106020725 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = dpipe OBJS = main.o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/specialized_signals/0000755000175000017500000000000014342422106022200 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_signed.cpp0000644000175000017500000001603114342422106026370 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_signed.cpp -- The sc_signal > implementations. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_signed.cpp,v $ Revision 1.3 2011/08/26 22:28:29 acg Torsten Maehne: eliminate unused argument warnings. Revision 1.2 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.17 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.16 2005/05/03 19:52:26 acg Get proper header locations on includes. Revision 1.15 2005/05/03 19:50:20 acg Name space version. Revision 1.12 2005/04/11 19:05:36 acg Change to sc_clock for Microsoft VCC 6.0. Changes for namespaces Revision 1.11 2005/04/03 22:52:52 acg Namespace changes. Revision 1.10 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.9 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #include "sysc/utils/sc_temporary.h" #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_signal_ports.h" #include "sysc/communication/sc_signal.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_macros.h" #include "sysc/tracing/sc_trace.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/int/sc_int.h" #include "sysc/datatypes/int/sc_uint.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_bigint.h" #include "sysc/datatypes/bit/sc_lv_base.h" using sc_dt::sc_bigint; using sc_dt::sc_bv_base; using sc_dt::sc_lv_base; using sc_dt::sc_concatref; using sc_dt::sc_signed; using sc_dt::sc_signed_subref_r; using sc_dt::sc_unsigned; using sc_dt::uint64; #include "./scx_signal_signed.h" #include namespace sc_core { extern void sc_signal_invalid_writer( const char* name, const char* kind, const char* first_writer, const char* second_writer ); //------------------------------------------------------------------------------ // POOL OF TEMPORARY INSTANCES OF sc_signed_sigref // // This allows use to pass const references for part and bit selections // on sc_signal_signed object instances. //------------------------------------------------------------------------------ sc_vpool sc_signed_sigref::m_pool(8); //------------------------------------------------------------------------------ //"sc_signed_part_if::default methods" // // These versions just produce errors if they are not overloaded but used. //------------------------------------------------------------------------------ sc_signed* sc_signed_part_if::part_read_target() { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_signed sc_signed_part_if::read_part( int /*left*/, int /*right*/ ) const { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return sc_signed(1); } sc_signed_sigref& sc_signed_part_if::select_part( int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); sc_core::sc_abort(); // can't recover from here } void sc_signed_part_if::write_part( int64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_signed_part_if::write_part( uint64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_signed_part_if::write_part( const sc_signed& /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_signed_part_if::write_part( const sc_unsigned& /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } //------------------------------------------------------------------------------ //"sc_signed_sigref::concate_set" // // These methods assign this object instance's value from the supplied // value starting at the supplied bit within that value. // src = value to use to set this object instance's value. // low_i = bit in src that is to be the low order bit of the value to set. // #### OPTIMIZE //------------------------------------------------------------------------------ void sc_signed_sigref::concat_set(sc_dt::int64 src, int low_i) { int64 tmp; if ( low_i < 63 ) tmp = src >> low_i; else tmp = (src < 0) ? -1 : 0; m_if_p->write_part( tmp, m_left, m_right ); } void sc_signed_sigref::concat_set(const sc_signed& src, int low_i) { m_if_p->write_part( src >> low_i, m_left, m_right ); } void sc_signed_sigref::concat_set(const sc_lv_base& src, int low_i) { sc_unsigned tmp(src.length()); tmp = src; m_if_p->write_part( tmp >> low_i, m_left, m_right ); } void sc_signed_sigref::concat_set(const sc_unsigned& src, int low_i) { m_if_p->write_part( src >> low_i, m_left, m_right ); } void sc_signed_sigref::concat_set(sc_dt::uint64 src, int low_i) { uint64 tmp = (low_i < 63) ? (src >> low_i) : 0; m_if_p->write_part( tmp, m_left, m_right ); } } // namespace sc_core systemc-2.3.4/examples/sysc/2.1/specialized_signals/specialized_signals.vcxproj0000644000175000017500000002771614342422106027646 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355} specialized_signals Win32Proj Application Application Application true Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/specialized_signals/test.am0000644000175000017500000000644414342422106023506 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/specialized_signals ## %C%: 2_1_specialized_signals examples_TESTS += 2.1/specialized_signals/test 2_1_specialized_signals_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_specialized_signals_test_SOURCES = \ $(2_1_specialized_signals_H_FILES) \ $(2_1_specialized_signals_CXX_FILES) examples_BUILD += \ $(2_1_specialized_signals_BUILD) examples_CLEAN += \ 2.1/specialized_signals/run.log \ 2.1/specialized_signals/expected_trimmed.log \ 2.1/specialized_signals/run_trimmed.log \ 2.1/specialized_signals/diff.log examples_FILES += \ $(2_1_specialized_signals_H_FILES) \ $(2_1_specialized_signals_CXX_FILES) \ $(2_1_specialized_signals_BUILD) \ $(2_1_specialized_signals_EXTRA) examples_DIRS += 2.1/specialized_signals ## example-specific details 2_1_specialized_signals_H_FILES = \ 2.1/specialized_signals/scx_signal_int.h \ 2.1/specialized_signals/scx_signal_uint.h \ 2.1/specialized_signals/scx_signal_signed.h \ 2.1/specialized_signals/scx_signal_unsigned.h 2_1_specialized_signals_CXX_FILES = \ 2.1/specialized_signals/main.cpp \ 2.1/specialized_signals/scx_signal_int.cpp \ 2.1/specialized_signals/scx_signal_uint.cpp \ 2.1/specialized_signals/scx_signal_signed.cpp \ 2.1/specialized_signals/scx_signal_unsigned.cpp 2_1_specialized_signals_BUILD = \ 2.1/specialized_signals/golden.log 2_1_specialized_signals_EXTRA = \ 2.1/specialized_signals/specialized_signals.sln \ 2.1/specialized_signals/specialized_signals.vcxproj \ 2.1/specialized_signals/CMakeLists.txt \ 2.1/specialized_signals/Makefile #2_1_specialized_signals_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_int.cpp0000644000175000017500000001374314342422106025720 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_int.cpp -- The sc_signal > implementations. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_int.cpp,v $ Revision 1.3 2011/08/26 22:28:29 acg Torsten Maehne: eliminate unused argument warnings. Revision 1.2 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.11 2005/04/11 19:05:36 acg Change to sc_clock for Microsoft VCC 6.0. Changes for namespaces Revision 1.10 2005/04/03 22:52:51 acg Namespace changes. Revision 1.9 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.8 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #include "sysc/utils/sc_temporary.h" #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_signal_ports.h" #include "sysc/communication/sc_signal.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_macros.h" #include "sysc/tracing/sc_trace.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/int/sc_int.h" #include "sysc/datatypes/int/sc_uint.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "./scx_signal_int.h" #include namespace sc_core { extern void sc_signal_invalid_writer( const char* name, const char* kind, const char* first_writer, const char* second_writer ); //------------------------------------------------------------------------------ // POOL OF TEMPORARY INSTANCES OF sc_int_sigref // // This allows use to pass const references for part and bit selections // on sc_signal_int object instances. //------------------------------------------------------------------------------ sc_vpool sc_int_sigref::m_pool(8); //------------------------------------------------------------------------------ //"sc_int_part_if::default methods" // // These versions just produce errors if they are not overloaded but used. //------------------------------------------------------------------------------ sc_dt::sc_int_base* sc_int_part_if::part_read_target() { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_dt::uint64 sc_int_part_if::read_part( int /*left*/, int /*right*/ ) const { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_int_sigref& sc_int_part_if::select_part( int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); sc_core::sc_abort(); // can't recover from here } void sc_int_part_if::write_part( sc_dt::uint64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } //------------------------------------------------------------------------------ //"sc_int_sigref::concate_set" // // These methods assign this object instance's value from the supplied // value starting at the supplied bit within that value. // src = value to use to set this object instance's value. // low_i = bit in src that is to be the low order bit of the value to set. // #### OPTIMIZE //------------------------------------------------------------------------------ void sc_int_sigref::concat_set(sc_dt::int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_int_sigref::concat_set(const sc_dt::sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src < 0) ? (sc_dt::uint64)-1 : 0; } void sc_int_sigref::concat_set(const sc_dt::sc_lv_base& src, int low_i) { if ( low_i < src.length() ) *this = (src >> low_i).to_uint64(); else *this = 0; } void sc_int_sigref::concat_set(const sc_dt::sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_int_sigref::concat_set(sc_dt::uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } } // namespace sc_core systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_unsigned.h0000644000175000017500000015436414342422106026414 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_unsigned.h -- The sc_signal > definitions. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_unsigned.h,v $ Revision 1.4 2011/08/15 17:18:21 acg Andy Goodrich: fix blown inclusion of Torsten's edit. Revision 1.3 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.2 2011/06/28 21:23:02 acg Andy Goodrich: merging of SCV tree. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.4 2006/10/23 19:40:36 acg Andy Goodrich: added an explicit dynamic cast to keep gcc 4.x happy. Revision 1.3 2006/03/21 01:31:49 acg Andy Goodrich: changed over to sc_get_current_process_b() from sc_get_current_process_base() since the function's name changed. Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.28 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.27 2005/07/30 03:44:11 acg Changes from 2.1. Revision 1.26 2005/05/09 17:17:12 acg Changes from 2.1. Revision 1.25 2005/05/08 19:04:06 acg Fix bug in concat_set(int64,off). Other changes from 2.1 examples usage. Revision 1.24 2005/05/03 19:50:20 acg Name space version. Revision 1.22 2005/03/21 22:31:33 acg Changes to sc_core namespace. Revision 1.21 2005/01/10 17:51:58 acg Improvements. Revision 1.20 2004/11/09 00:11:27 acg Added support for sc_generic_base in place of sc_concatref. sc_concatref now is derived from sc_generic_base. Revision 1.19 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #if !defined(SC_SIGNAL_UNSIGNED_H) #define SC_SIGNAL_UNSIGNED_H #if ( !defined(_MSC_VER) || _MSC_VER > 1200 ) # define SC_TEMPLATE template #else # define SC_TEMPLATE template<> template #endif #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) // ignore warning about deliberately hidden "bind()" overloads #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif // FORWARD REFERENCES AND USINGS: using sc_dt::sc_signed; using sc_dt::int64; using sc_dt::uint64; namespace sc_core { class sc_unsigned_sigref; //============================================================================== // CLASS sc_unsigned_part_if // // This class provides generic access to part selections for signals whose // data type is sc_dt::sc_biguint. This class serves as the base class for the // sc_dt::sc_biguint specialization of the sc_signal_in_if class. The methods // in this class may be over-ridden individually, those that are not overridden // will produce an error message when called. The methods are used by the // sc_unsigned_sigref class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== class sc_unsigned_part_if : virtual public sc_interface { protected: // constructor: sc_unsigned_part_if() {} public: // perform a part read. virtual sc_dt::sc_unsigned* part_read_target(); virtual sc_dt::sc_unsigned read_part( int left, int right ) const; // perform a part write. virtual sc_unsigned_sigref& select_part( int left, int right ); virtual void write_part( sc_dt::int64 v, int left, int right ); virtual void write_part( sc_dt::uint64 v, int left, int right ); virtual void write_part( const sc_dt::sc_signed& v, int left, int right ); virtual void write_part( const sc_dt::sc_unsigned& v, int left, int right ); private: sc_unsigned_part_if( const sc_unsigned_part_if& ); sc_unsigned_part_if& operator = ( const sc_unsigned_part_if& ); }; //============================================================================== // CLASS sc_signal_in_if > // // This is the class specializations for the sc_signal_in_if class to // provide additional features for sc_signal instances whose template is // sc_dt::sc_biguint, including part access. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== template< int W > class sc_signal_in_if > : public sc_unsigned_part_if { friend class sc_unsigned_sigref; public: typedef sc_signal_in_if > this_type; // get the value changed event virtual const sc_event& value_changed_event() const = 0; // read the current value virtual const sc_dt::sc_biguint& read() const = 0; // get a reference to the current value (for tracing) virtual const sc_dt::sc_biguint& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const this_type& ); this_type& operator = ( const this_type& ); }; //============================================================================= // CLASS : sc_unsigned_sigref // // Proxy class for sc_signal_uint bit and part selection. //============================================================================= class sc_unsigned_sigref : public sc_dt::sc_unsigned_subref_r { public: sc_unsigned_sigref() : sc_dt::sc_unsigned_subref_r() {} virtual ~sc_unsigned_sigref() {} virtual void concat_set(sc_dt::int64 src, int low_i); virtual void concat_set(const sc_dt::sc_signed& src, int low_i); virtual void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual void concat_set(sc_dt::uint64 src, int low_i); public: inline void initialize( sc_unsigned_part_if* if_p, int left_, int right_ ); public: inline void operator = ( sc_dt::uint64 v ); inline void operator = ( const char* v ); inline void operator = ( unsigned long v ); inline void operator = ( long v ); inline void operator = ( unsigned int v ); inline void operator = ( int v ); inline void operator = ( sc_dt::int64 v ); inline void operator = ( double v ); inline void operator = ( const sc_unsigned_sigref& v ); template inline void operator = ( const sc_dt::sc_generic_base& v ); inline void operator = ( const sc_dt::sc_signed& v ); inline void operator = ( const sc_dt::sc_unsigned& v ); inline void operator = ( const sc_dt::sc_bv_base& v ); inline void operator = ( const sc_dt::sc_lv_base& v ); public: static sc_vpool m_pool; // Pool of objects to use. protected: sc_unsigned_part_if* m_if_p; // Target for selection. private: // disabled sc_unsigned_sigref( const sc_unsigned_sigref& a ); }; //============================================================================== // CLASS sc_signal > // // This class implements a signal whose value acts like an sc_dt::sc_biguint data // value. This class is a specialization of the generic sc_signal class to // implement tailored support for the sc_dt::sc_biguint class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations. //============================================================================== SC_TEMPLATE class sc_signal > : public sc_dt::sc_biguint, public sc_prim_channel, public sc_signal_inout_if > { public: // typedefs typedef sc_signal > this_type; public: // constructors and destructor: inline sc_signal(); explicit inline sc_signal(const char* name_); virtual inline ~sc_signal(); public: // base methods: inline bool base_event() const; inline const sc_dt::sc_biguint& base_read() const; inline const sc_event& base_value_changed_event() const; inline void base_write( sc_dt::int64 value ); inline void base_write( sc_dt::uint64 value ); inline void base_write( const sc_dt::sc_signed& value ); inline void base_write( const sc_dt::sc_unsigned& value ); public: // sc_prim_channel virtual methods: virtual inline const char* kind() const; virtual inline void update(); public: // sc_interface virtual methods: virtual inline const sc_event& default_event() const; virtual inline void register_port( sc_port_base& port_, const char* if_typename_ ); public: // sc_unsigned_channel virtual methods: virtual inline sc_dt::sc_unsigned* part_read_target(); virtual inline sc_dt::sc_unsigned read_part(int left, int right) const; virtual sc_unsigned_sigref& select_part( int left, int right ); virtual inline void write_part( sc_dt::int64 v, int left, int right ); virtual inline void write_part( sc_dt::uint64 v, int left, int right ); virtual inline void write_part( const sc_dt::sc_signed& v, int left, int right ); virtual inline void write_part(const sc_dt::sc_unsigned& v, int left, int right); public: // interface virtual methods: virtual inline bool event() const; virtual inline const sc_dt::sc_biguint& get_data_ref() const; virtual inline sc_signal >& get_signal(); virtual inline const sc_dt::sc_biguint& read() const; virtual inline const sc_event& value_changed_event() const; virtual inline void write( const sc_in >& value ); virtual inline void write( const sc_inout >& value ); virtual inline void write( const sc_dt::sc_biguint& value ); public: // part selections: inline sc_unsigned_sigref& operator () ( int left, int right ); // #### Need to add range() and bit()! inline sc_unsigned_sigref& operator [] ( int bit ); public: // operators: inline void operator = ( const this_type& new_val ); inline void operator = ( const char* new_val ); inline void operator = ( sc_dt::uint64 new_val ); inline void operator = ( sc_dt::int64 new_val ); inline void operator = ( int new_val ); inline void operator = ( long new_val ); inline void operator = ( short new_val ); inline void operator = ( unsigned int new_val ); inline void operator = ( unsigned long new_val ); inline void operator = ( unsigned short new_val ); template inline void operator = ( const sc_dt::sc_generic_base& new_val ); inline void operator = ( const sc_dt::sc_signed& new_val ); inline void operator = ( const sc_dt::sc_unsigned& new_val ); inline void operator = ( const sc_dt::sc_bv_base& new_val ); inline void operator = ( const sc_dt::sc_lv_base& new_val ); // concatenation methods (we inherit length and gets from sc_dt::sc_biguint): virtual inline void concat_set(sc_dt::int64 src, int low_i); virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i); virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual inline void concat_set(sc_dt::uint64 src, int low_i); protected: // debugging methods: // #### void check_port(); void check_writer(); private: // Disabled operations that sc_dt::sc_biguint supports: sc_dt::sc_unsigned& operator ++ (); // prefix const sc_dt::sc_unsigned& operator ++ (int); // postfix sc_dt::sc_unsigned& operator -- (); // prefix const sc_dt::sc_unsigned& operator -- (int); // postfix sc_dt::sc_unsigned& operator += (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator += (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator += (sc_dt::int64 ); sc_dt::sc_unsigned& operator += (sc_dt::uint64 ); sc_dt::sc_unsigned& operator += (long ); sc_dt::sc_unsigned& operator += (unsigned long ); sc_dt::sc_unsigned& operator += (int ); sc_dt::sc_unsigned& operator += (unsigned int ); sc_dt::sc_unsigned& operator -= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator -= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator -= (sc_dt::int64 ); sc_dt::sc_unsigned& operator -= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator -= (long ); sc_dt::sc_unsigned& operator -= (unsigned long ); sc_dt::sc_unsigned& operator -= (int ); sc_dt::sc_unsigned& operator -= (unsigned int ); sc_dt::sc_unsigned& operator *= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator *= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator *= (sc_dt::int64 ); sc_dt::sc_unsigned& operator *= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator *= (long ); sc_dt::sc_unsigned& operator *= (unsigned long ); sc_dt::sc_unsigned& operator *= (int ); sc_dt::sc_unsigned& operator *= (unsigned int ); sc_dt::sc_unsigned& operator /= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator /= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator /= (sc_dt::int64 ); sc_dt::sc_unsigned& operator /= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator /= (long ); sc_dt::sc_unsigned& operator /= (unsigned long ); sc_dt::sc_unsigned& operator /= (int ); sc_dt::sc_unsigned& operator /= (unsigned int ); sc_dt::sc_unsigned& operator %= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator %= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator %= (sc_dt::int64 ); sc_dt::sc_unsigned& operator %= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator %= (long ); sc_dt::sc_unsigned& operator %= (unsigned long ); sc_dt::sc_unsigned& operator %= (int ); sc_dt::sc_unsigned& operator %= (unsigned int ); sc_dt::sc_unsigned& operator &= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator &= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator &= (sc_dt::int64 ); sc_dt::sc_unsigned& operator &= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator &= (long ); sc_dt::sc_unsigned& operator &= (unsigned long ); sc_dt::sc_unsigned& operator &= (int ); sc_dt::sc_unsigned& operator &= (unsigned int ); sc_dt::sc_unsigned& operator |= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator |= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator |= (sc_dt::int64 ); sc_dt::sc_unsigned& operator |= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator |= (long ); sc_dt::sc_unsigned& operator |= (unsigned long ); sc_dt::sc_unsigned& operator |= (int ); sc_dt::sc_unsigned& operator |= (unsigned int ); sc_dt::sc_unsigned& operator ^= (const sc_dt::sc_signed& ); sc_dt::sc_unsigned& operator ^= (const sc_dt::sc_unsigned& ); sc_dt::sc_unsigned& operator ^= (sc_dt::int64 ); sc_dt::sc_unsigned& operator ^= (sc_dt::uint64 ); sc_dt::sc_unsigned& operator ^= (long ); sc_dt::sc_unsigned& operator ^= (unsigned long ); sc_dt::sc_unsigned& operator ^= (int ); sc_dt::sc_unsigned& operator ^= (unsigned int ); protected: mutable sc_event* m_changed_event_p; // Value changed event this object. sc_dt::uint64 m_event_delta; // Delta cycle of last event. sc_dt::sc_unsigned m_new_val; // New value for this object instance. sc_port_base* m_output_p; // Single write port verify field. sc_process_b* m_writer_p; // Single writer verify field. }; SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::base_event() const { return simcontext()->delta_count() == m_event_delta + 1; } SC_TEMPLATE // Return this object's sc_dt::sc_biguint object instance. inline const sc_dt::sc_biguint& sc_signal >::base_read() const { return *this; } SC_TEMPLATE // Return the value changed event, allocating it if necessary. inline const sc_event& sc_signal >::base_value_changed_event() const { if ( !m_changed_event_p ) m_changed_event_p = new sc_event; return *m_changed_event_p; } SC_TEMPLATE // Write a const sc_dt::sc_signed& value to this object instance. inline void sc_signal >::base_write( const sc_dt::sc_signed& value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a const sc_dt::sc_unsigned& value to this object instance. inline void sc_signal >::base_write( const sc_dt::sc_unsigned& value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a sc_dt::int64 value to this object instance. inline void sc_signal >::base_write( sc_dt::int64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a sc_dt::uint64 value to this object instance. inline void sc_signal >::base_write( sc_dt::uint64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } //------------------------------------------------------------------------------ //"sc_signal >::check_writer" // // This method checks to see if there is more than one writer for this // object instance by keeping track of the process performing the write. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::check_writer() { sc_process_b* writer_p = sc_get_current_process_b(); if( m_writer_p == 0 ) { m_writer_p = writer_p; } else if( m_writer_p != writer_p ) { sc_signal_invalid_writer( name(), kind(), m_writer_p->name(), writer_p->name() ); } } //------------------------------------------------------------------------------ //"sc_signal >::concat_set" // // These virtual methods allow value assignments to this object instance // from various sources. The position within the supplied source of the // low order bit for this object instance's value is low_i. // src = source value. // low_i = bit within src to serve as low order bit of this object // instance's value. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::int64 src, int low_i) { if ( low_i < 64 ) { base_write(src >> low_i); } else { base_write( (sc_dt::int64)((src < 0 ) ? -1 : 0 )); } } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_lv_base& src, int low_i) { sc_dt::sc_unsigned tmp(src.length()); tmp = src >> low_i; base_write( tmp ); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_signed& src, int low_i) { base_write( (src >> low_i) ); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_unsigned& src, int low_i) { base_write( (src >> low_i) ); } SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::uint64 src, int low_i) { base_write( (sc_dt::uint64)(( low_i < 64 ) ? src >> low_i : 0)); } SC_TEMPLATE // Return the default event for this object instance. inline const sc_event& sc_signal >::default_event() const { return base_value_changed_event(); } SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::event() const { return base_event(); } SC_TEMPLATE // Return a reference to the value of this object instance. inline const sc_dt::sc_biguint& sc_signal >::get_data_ref() const { return *this; } SC_TEMPLATE // Return a pointer to this object instance. inline sc_signal >& sc_signal >::get_signal() { return *this; } SC_TEMPLATE // Return a kind value of "sc_signal". inline const char* sc_signal >::kind() const { return "sc_signal"; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator () // // This operator returns a part selection of this object instance. // left = left-hand bit of the selection. // right = right-hand bit of the selection. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_unsigned_sigref& sc_signal >::operator () (int left, int right) { sc_unsigned_sigref* result_p; // Value to return. result_p = sc_unsigned_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator []" // // This operator returns a bit selection of this object instance. // i = bit to be selected. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_unsigned_sigref& sc_signal >::operator [] ( int bit ) { return operator () (bit,bit); } SC_TEMPLATE inline void sc_signal >::operator = ( const this_type& new_val ) { base_write( new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const char* new_val ) { sc_dt::sc_biguint tmp = new_val; m_new_val = tmp; request_update(); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_unsigned& new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::uint64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::int64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE template inline void sc_signal >::operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); base_write(temp); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_signed& new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_bv_base& new_val ) { base_write( (sc_dt::sc_biguint)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_lv_base& new_val ) { base_write( (sc_dt::sc_biguint)new_val ); } SC_TEMPLATE inline sc_dt::sc_unsigned* sc_signal >::part_read_target() { return this; } SC_TEMPLATE inline const sc_dt::sc_biguint& sc_signal >::read() const { return *this; } SC_TEMPLATE // Read a portion of a value. inline sc_dt::sc_unsigned sc_signal >::read_part( int left, int right ) const { sc_dt::sc_unsigned tmp(left-right+1); tmp = (*(const sc_dt::sc_biguint*)this)(left,right); return tmp; } SC_TEMPLATE inline void sc_signal >::register_port( sc_port_base& port_, const char* if_typename_ ) { # ifdef DEBUG_SYSTEMC std::string nm( if_typename_ ); if( nm == typeid( sc_signal_inout_if > ).name() ) { if( m_output_p != 0 ) { sc_signal_invalid_writer( name(), kind(), m_output_p->name(), port_.name() ); } m_output_p = &port_; } # else if ( port_.name() && if_typename_ ) {} // Silence unused args warning. # endif } SC_TEMPLATE // Autogenerated name object instance constructor. inline sc_signal >::sc_signal() : sc_prim_channel(sc_gen_unique_name( "signal" )), m_changed_event_p(0), m_new_val(W), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Explicitly named object instance constructor. inline sc_signal >::sc_signal(const char* name_) : sc_prim_channel(name_), m_changed_event_p(0), m_new_val(W), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Object instance destructor. inline sc_signal >::~sc_signal() { if ( m_changed_event_p ) delete m_changed_event_p; } SC_TEMPLATE // Update the current value from new value. inline void sc_signal >::update() { if ( m_changed_event_p ) { if ( m_new_val != *this ) { m_changed_event_p->notify_delayed(); m_event_delta = simcontext()->delta_count(); } } sc_dt::sc_unsigned::operator = (m_new_val); } SC_TEMPLATE // Return the value changed event. inline const sc_event& sc_signal >::value_changed_event() const { return base_value_changed_event(); } SC_TEMPLATE // Write a sc_in > value to this object instance. inline void sc_signal >::write( const sc_in >& value ) { base_write( value ); } SC_TEMPLATE // Write a sc_inout > value to this object instance. inline void sc_signal >::write( const sc_inout >& value ) { base_write( value ); } SC_TEMPLATE // Write a sc_dt::sc_biguint value to this object instance. inline void sc_signal >::write( const sc_dt::sc_biguint& value ) { base_write( value); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part(sc_dt::int64 v, int left, int right) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Select a portion of a value. inline sc_unsigned_sigref& sc_signal >::select_part( int left, int right) { sc_unsigned_sigref* result_p = sc_unsigned_sigref::m_pool.allocate(); result_p->initialize(dynamic_cast(this), left, right); return *result_p; } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part(sc_dt::uint64 v, int left, int right) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( const sc_dt::sc_signed& v, int left, int right ) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( const sc_dt::sc_unsigned& v, int left, int right ) { m_new_val(left, right) = v; request_update(); } //============================================================================== // CLASS sc_in > // // This class implements an input port whose target acts like an sc_dt::sc_biguint data // value. This class is a specialization of the generic sc_in class to // implement tailored support for the sc_dt::sc_biguint class. //============================================================================== SC_TEMPLATE class sc_in > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_biguint data_type; typedef sc_signal_in_if > if_type; typedef sc_port base_type; typedef sc_in > this_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if > inout_if_type; typedef sc_inout > inout_port_type; public: // bind methods and operators: void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void operator () ( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void bind( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_in() : base_type(), m_traces( 0 ) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} // destructor virtual inline ~sc_in() { remove_traces(); } // bit and part selection sc_dt::sc_unsigned_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_unsigned_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_dt::sc_unsigned_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_unsigned_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_biguint& read() const { return (*this)->read(); } operator const sc_dt::sc_biguint& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &in_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_in"; } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } mutable sc_trace_params_vec* m_traces; private: // disabled sc_in( const sc_in >& ); sc_in >& operator = ( const sc_in >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_in >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_inout > // // This class implements an input/output port whose target acts like an // sc_dt::sc_biguint data value. It is derived from the sc_unsigned_in. This class is a // specialization of the generic sc_inout class to implement tailored support // for the sc_dt::sc_biguint class. //============================================================================== SC_TEMPLATE class sc_inout > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_biguint data_type; typedef sc_signal_inout_if > if_type; typedef sc_port base_type; typedef sc_inout > this_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // bind methods and operators: void bind( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void operator () ( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_inout() : base_type(), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} // destructor virtual inline ~sc_inout() { remove_traces(); } // bit and part selection sc_dt::sc_unsigned_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_unsigned_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_unsigned_sigref& operator [] ( int i ) { return (*this)->select_part(i,i); } sc_unsigned_sigref& bit( int i ) { return (*this)->select_part(i,i); } sc_dt::sc_unsigned_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_unsigned_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } sc_unsigned_sigref& operator () ( int left, int right ) { return (*this)->select_part(left,right); } sc_unsigned_sigref& range( int left, int right ) { return (*this)->select_part(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_biguint& read() const { return (*this)->read(); } operator const sc_dt::sc_biguint& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &inout_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_init_val_p != 0 ) { (*this)->write( *m_init_val_p ); delete m_init_val_p; m_init_val_p = 0; } if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_inout"; } // value initialization inline void initialize( const sc_dt::sc_biguint& value_ ) { inout_if_type* iface = dynamic_cast( this->get_interface() ); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val_p == 0 ) { m_init_val_p = new sc_dt::sc_biguint; } *m_init_val_p = value_; } } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } virtual inline void concat_set(sc_dt::int64 src, int low_i) { *this = (src >> ((low_i < 64) ? low_i : 63)); } #if 0 // #### virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i) { *this = src >> low_i; } #endif // 0 #### virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(sc_dt::uint64 src, int low_i) { *this = (low_i < 64 ) ? src >> low_i : (sc_dt::uint64)0; } // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (const sc_dt::sc_unsigned&)new_val ); } inline void operator = ( const char* new_val ) { sc_dt::sc_unsigned aa(W); aa = new_val; (*this)->write( aa ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); (*this)->write(temp); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_biguint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_biguint)new_val); } inline void write( const sc_in >& new_val ) { (*this)->write( new_val.read() ); } inline void write( const sc_inout >& new_val ) { (*this)->write( new_val.read() ); } inline void write( const sc_dt::sc_biguint& new_val ) { (*this)->write( new_val ); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } sc_dt::sc_biguint* m_init_val_p; mutable sc_trace_params_vec* m_traces; private: // disabled sc_inout( const sc_inout >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_inout >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_out > // // This class implements an output port whose target acts like an // sc_dt::sc_biguint data value. This class is a derivation of sc_inout, since // output ports are really no different from input/output ports. //============================================================================== SC_TEMPLATE class sc_out > : public sc_inout > { public: // typedefs typedef sc_dt::sc_biguint data_type; typedef sc_out this_type; typedef sc_inout base_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; // constructors sc_out() : base_type() {} explicit sc_out( const char* name_ ) : base_type( name_ ) {} explicit sc_out( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out( this_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual inline ~sc_out() {} // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (const sc_dt::sc_unsigned&)new_val ); } inline void operator = ( const char* new_val ) { sc_dt::sc_unsigned aa(W); aa = new_val; (*this)->write( aa ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); (*this)->write(temp); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_biguint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_biguint)new_val); } private: // disabled sc_out( const this_type& ); }; //------------------------------------------------------------------------------ //"sc_unsigned_sigref::initialize" // // This method initializes an object instance from the supplied arguments. // if_p -> target of this selection. // left_ = left-most bit in selection. // right_ = right-most bit in selection. //------------------------------------------------------------------------------ inline void sc_unsigned_sigref::initialize( sc_unsigned_part_if* if_p, int left_, int right_ ) { m_if_p = if_p; m_left = left_; m_right = right_; m_obj_p = if_p->part_read_target(); } //------------------------------------------------------------------------------ //"sc_unsigned_sigref::operator =" // // These operators assign a value to the bits associated with this object // instance within this object instance's target signal. //------------------------------------------------------------------------------ inline void sc_unsigned_sigref::operator = ( sc_dt::uint64 v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_unsigned_sigref::operator = ( const char* v ) { sc_dt::sc_unsigned tmp(length()); tmp = v; *this = tmp; } inline void sc_unsigned_sigref:: operator = ( sc_dt::int64 v ) { *this = (sc_dt::uint64)v; } inline void sc_unsigned_sigref:: operator = ( int v ) { *this = (sc_dt::uint64)v; } inline void sc_unsigned_sigref:: operator = ( long v ) { *this = (sc_dt::uint64)v; } inline void sc_unsigned_sigref:: operator = ( unsigned int v ) { *this = (sc_dt::uint64)v; } inline void sc_unsigned_sigref:: operator = ( unsigned long v ) { *this = (sc_dt::uint64)v; } void sc_unsigned_sigref::operator = ( const sc_unsigned_sigref& v ) { *this = (sc_dt::sc_unsigned)v; } inline void sc_unsigned_sigref:: operator = ( const sc_dt::sc_signed& v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_unsigned_sigref:: operator = ( const sc_dt::sc_unsigned& v ) { m_if_p->write_part( v, m_left, m_right ); } template inline void sc_unsigned_sigref:: operator = ( const sc_dt::sc_generic_base& v ) { sc_dt::sc_unsigned temp(m_left-m_right+1); v->to_sc_unsigned(temp); m_if_p->write_part( temp, m_left, m_right ); } #undef SC_TEMPLATE } // namespace sc_core #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) #pragma GCC diagnostic pop #endif #endif // !defined(SC_SIGNAL_UNSIGNED_H) systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_int.h0000644000175000017500000013522414342422106025364 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_uint.h -- The sc_signal > definitions. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_int.h,v $ Revision 1.4 2011/08/15 17:18:21 acg Andy Goodrich: fix blown inclusion of Torsten's edit. Revision 1.3 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.2 2011/06/28 21:23:02 acg Andy Goodrich: merging of SCV tree. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.21 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.20 2005/01/10 17:51:58 acg Improvements. Revision 1.19 2004/11/09 00:11:26 acg Added support for sc_generic_base in place of sc_concatref. sc_concatref now is derived from sc_generic_base. Revision 1.18 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #if !defined(SC_SIGNAL_INT_H) #define SC_SIGNAL_INT_H #if ( !defined(_MSC_VER) || _MSC_VER > 1200 ) # define SC_TEMPLATE template #else # define SC_TEMPLATE template<> template #endif #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) // ignore warning about deliberately hidden "bind()" overloads #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif // FORWARD REFERENCES AND USINGS: namespace sc_core { class sc_int_sigref; //============================================================================== // CLASS sc_int_part_if // // This class provides generic access to part selections for signals whose // data type is sc_dt::sc_int. This class serves as the base class for the // sc_dt::sc_int specialization of the sc_signal_in_if class. The methods // in this class may be over-ridden individually, those that are not overridden // will produce an error message when called. The methods are used by the // sc_int_sigref class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== class sc_int_part_if : virtual public sc_interface { protected: // constructor: sc_int_part_if() {} public: // perform a part read. virtual sc_dt::sc_int_base* part_read_target(); virtual sc_dt::uint64 read_part( int left, int right ) const; // perform a part write. virtual sc_int_sigref& select_part( int left, int right ); virtual void write_part( sc_dt::uint64 v, int left, int right ); private: sc_int_part_if( const sc_int_part_if& ); sc_int_part_if& operator = ( const sc_int_part_if& ); }; //============================================================================== // CLASS sc_signal_in_if > // // This is the class specializations for the sc_signal_in_if class to // provide additional features for sc_signal instances whose template is // sc_dt::sc_int, including part access. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== template< int W > class sc_signal_in_if > : public sc_int_part_if { friend class sc_int_sigref; public: typedef sc_signal_in_if > this_type; // get the value changed event virtual const sc_event& value_changed_event() const = 0; // read the current value virtual const sc_dt::sc_int& read() const = 0; // get a reference to the current value (for tracing) virtual const sc_dt::sc_int& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const this_type& ); this_type& operator = ( const this_type& ); }; //============================================================================= // CLASS : sc_int_sigref // // Proxy class for sc_signal_int bit and part selection. //============================================================================= class sc_int_sigref : public sc_dt::sc_int_subref_r { public: sc_int_sigref() : sc_dt::sc_int_subref_r() {} virtual ~sc_int_sigref() {} virtual void concat_set(sc_dt::int64 src, int low_i); virtual void concat_set(const sc_dt::sc_signed& src, int low_i); virtual void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual void concat_set(sc_dt::uint64 src, int low_i); public: inline void initialize( sc_int_part_if* if_p, int left_, int right_ ); public: inline void operator = ( sc_dt::uint64 v ); inline void operator = ( const char* v ); inline void operator = ( unsigned long v ); inline void operator = ( long v ); inline void operator = ( unsigned int v ); inline void operator = ( int v ); inline void operator = ( sc_dt::int64 v ); inline void operator = ( double v ); inline void operator = ( const sc_int_sigref& v ); template inline void operator = ( const sc_dt::sc_generic_base& v ); inline void operator = ( const sc_dt::sc_signed& v ); inline void operator = ( const sc_dt::sc_unsigned& v ); inline void operator = ( const sc_dt::sc_bv_base& v ); inline void operator = ( const sc_dt::sc_lv_base& v ); public: static sc_vpool m_pool; // Pool of objects to use. protected: sc_int_part_if* m_if_p; // Target for selection. private: // disabled sc_int_sigref( const sc_int_sigref& a ); }; //============================================================================== // CLASS sc_signal > // // This class implements a signal whose value acts like an sc_dt::sc_int data // value. This class is a specialization of the generic sc_signal class to // implement tailored support for the sc_dt::sc_int class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations. //============================================================================== SC_TEMPLATE class sc_signal > : public sc_signal_inout_if >, public sc_prim_channel, public sc_dt::sc_int { public: // typedefs typedef sc_signal > this_type; public: // constructors and destructor: inline sc_signal(); explicit inline sc_signal(const char* name_); virtual inline ~sc_signal(); public: // base methods: inline bool base_event() const; inline const sc_dt::sc_int& base_read() const; inline const sc_event& base_value_changed_event() const; inline void base_write( sc_dt::int64 value ); public: // sc_prim_channel virtual methods: virtual inline const char* kind() const; virtual inline void update(); public: // sc_interface virtual methods: virtual inline const sc_event& default_event() const; virtual inline void register_port( sc_port_base& port_, const char* if_typename_ ); public: // sc_int_part_if virtual methods: virtual inline sc_dt::sc_int_base* part_read_target(); virtual inline sc_dt::uint64 read_part(int left, int right) const; virtual inline sc_int_sigref& select_part(int left, int right); virtual inline void write_part(sc_dt::uint64 v, int left, int right); public: // interface virtual methods: virtual inline bool event() const; virtual inline const sc_dt::sc_int& get_data_ref() const; virtual inline sc_signal >& get_signal() ; virtual inline const sc_dt::sc_int& read() const; virtual inline const sc_event& value_changed_event() const; virtual inline void write( const sc_in >& value ); virtual inline void write( const sc_inout >& value ); virtual inline void write( const sc_dt::sc_int& value ); public: // part selections: inline sc_int_sigref& operator () ( int left, int right ); inline sc_int_sigref& operator [] ( int bit ); public: // operators: inline void operator = ( const this_type& new_val ); inline void operator = ( const char* new_val ); inline void operator = ( sc_dt::uint64 new_val ); inline void operator = ( sc_dt::int64 new_val ); inline void operator = ( int new_val ); inline void operator = ( long new_val ) ; inline void operator = ( short new_val ) ; inline void operator = ( unsigned int new_val ) ; inline void operator = ( unsigned long new_val ); inline void operator = ( unsigned short new_val ); template inline void operator = ( const sc_dt::sc_generic_base& new_val ); inline void operator = ( const sc_dt::sc_signed& new_val ); inline void operator = ( const sc_dt::sc_unsigned& new_val ); inline void operator = ( const sc_dt::sc_bv_base& new_val ); inline void operator = ( const sc_dt::sc_lv_base& new_val ); // concatenation methods (we inherit length and gets from sc_dt::sc_int): virtual inline void concat_set(sc_dt::int64 src, int low_i); virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i); virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual inline void concat_set(sc_dt::uint64 src, int low_i); protected: // debugging methods: // #### void check_port(); void check_writer(); private: // Disabled operations that sc_dt::sc_int supports: sc_signal >& operator ++ (); // prefix const sc_signal >& operator ++ (int); // postfix sc_signal >& operator -- (); // prefix const sc_signal >& operator -- (int); // postfix sc_signal >& operator += (sc_dt::int_type); sc_signal >& operator -= (sc_dt::int_type); sc_signal >& operator *= (sc_dt::int_type); sc_signal >& operator /= (sc_dt::int_type); sc_signal >& operator %= (sc_dt::int_type); sc_signal >& operator &= (sc_dt::int_type); sc_signal >& operator |= (sc_dt::int_type); sc_signal >& operator ^= (sc_dt::int_type); protected: mutable sc_event* m_changed_event_p; // Value changed event this object. sc_dt::uint64 m_event_delta; // Delta cycle of last event. sc_dt::int64 m_new_val; // New value for this object instance. sc_port_base* m_output_p; // Single write port verify field. sc_process_b* m_writer_p; // Single writer verify field. }; SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::base_event() const { return simcontext()->delta_count() == m_event_delta + 1; } SC_TEMPLATE // Return this object's sc_dt::sc_int object instance. inline const sc_dt::sc_int& sc_signal >::base_read() const { return *this; } SC_TEMPLATE // Return the value changed event, allocating it if necessary. inline const sc_event& sc_signal >::base_value_changed_event() const { if ( !m_changed_event_p ) m_changed_event_p = new sc_event; return *m_changed_event_p; } SC_TEMPLATE // Select a portion of a value. inline sc_int_sigref& sc_signal >::select_part(int left, int right) { sc_int_sigref* result_p = sc_int_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } SC_TEMPLATE // Write an sc_dt::uint64 value to this object instance. inline void sc_signal >::base_write( sc_dt::int64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } //------------------------------------------------------------------------------ //"sc_signal >::check_writer" // // This method checks to see if there is more than one writer for this // object instance by keeping track of the process performing the write. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::check_writer() { sc_process_b* writer_p = sc_get_curr_process_handle(); if( m_writer_p == 0 ) { m_writer_p = writer_p; } else if( m_writer_p != writer_p ) { sc_signal_invalid_writer( name(), kind(), m_writer_p->name(), writer_p->name() ); } } //------------------------------------------------------------------------------ //"sc_signal >::concat_set" // // These virtual methods allow value assignments to this object instance // from various sources. The position within the supplied source of the // low order bit for this object instance's value is low_i. // src = source value. // low_i = bit within src to serve as low order bit of this object // instance's value. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::int64 src, int low_i) { if ( low_i < 64 ) { base_write(src >> low_i); } else { base_write( src >> 63 ); } } SC_TEMPLATE inline void sc_signal >::concat_set(const sc_dt::sc_lv_base& src, int low_i) { sc_dt::sc_unsigned tmp(src.length()); tmp = src >> low_i; base_write( tmp.to_int64() ); } SC_TEMPLATE inline void sc_signal >::concat_set(const sc_dt::sc_signed& src, int low_i) { base_write( (src >> low_i).to_int64()); } SC_TEMPLATE inline void sc_signal >::concat_set(const sc_dt::sc_unsigned& src, int low_i) { base_write( (src >> low_i).to_int64()); } SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::uint64 src, int low_i) { base_write( ( low_i < 64 ) ? src >> low_i : 0 ); } SC_TEMPLATE // Return the default event for this object instance. inline const sc_event& sc_signal >::default_event() const { return base_value_changed_event(); } SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::event() const { return base_event(); } SC_TEMPLATE // Return a reference to the value of this object instance. inline const sc_dt::sc_int& sc_signal >::get_data_ref() const { return *this; } SC_TEMPLATE // Return a pointer to this object instance. inline sc_signal >& sc_signal >::get_signal() { return *this; } SC_TEMPLATE // Return a kind value of "sc_signal". inline const char* sc_signal >::kind() const { return "sc_signal"; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator () // // This operator returns a part selection of this object instance. // left = left-hand bit of the selection. // right = right-hand bit of the selection. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_int_sigref& sc_signal >::operator () (int left, int right) { sc_int_sigref* result_p; // Value to return. result_p = sc_int_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator []" // // This operator returns a bit selection of this object instance. // i = bit to be selected. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_int_sigref& sc_signal >::operator [] ( int bit ) { return operator () (bit,bit); } SC_TEMPLATE inline void sc_signal >::operator = ( const this_type& new_val ) { base_write( (sc_dt::int64)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const char* new_val ) { m_new_val = sc_dt::sc_int<64>(new_val); request_update(); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::uint64 new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::int64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE template inline void sc_signal >::operator = ( const sc_dt::sc_generic_base& new_val ) { base_write(new_val->to_int64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_signed& new_val ) { base_write(new_val.to_int64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_unsigned& new_val ) { base_write(new_val.to_int64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_bv_base& new_val ) { base_write( (sc_dt::sc_int)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_lv_base& new_val ) { base_write( (sc_dt::sc_int)new_val ); } SC_TEMPLATE inline sc_dt::sc_int_base* sc_signal >::part_read_target() { return this; } SC_TEMPLATE inline const sc_dt::sc_int& sc_signal >::read() const { return *this; } SC_TEMPLATE // Read a portion of a value. inline sc_dt::uint64 sc_signal >::read_part( int left, int right ) const { // This pointer required for HP aCC. return (this->m_val & ~sc_dt::mask_int[left][right]) >> right; } SC_TEMPLATE inline void sc_signal >::register_port( sc_port_base& port_, const char* if_typename_ ) { # ifdef DEBUG_SYSTEMC std::string nm( if_typename_ ); if( nm == typeid( sc_signal_inout_if > ).name() ) { if( m_output_p != 0 ) { sc_signal_invalid_writer( name(), kind(), m_output_p->name(), port_.name() ); } m_output_p = &port_; } # else if ( port_.name() && if_typename_ ) {} // Silence unused args warning. # endif } SC_TEMPLATE // Autogenerated name object instance constructor. inline sc_signal >::sc_signal() : sc_prim_channel(sc_gen_unique_name( "signal" )), m_changed_event_p(0), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Explicitly named object instance constructor. inline sc_signal >::sc_signal(const char* name_) : sc_prim_channel(name_), m_changed_event_p(0), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Object instance destructor. inline sc_signal >::~sc_signal() { if ( m_changed_event_p ) delete m_changed_event_p; } SC_TEMPLATE // Update the current value from new value. inline void sc_signal >::update() { if ( m_changed_event_p ) { // This pointer required for HP aCC. sc_dt::int64 old_val = this->m_val; sc_dt::sc_int_base::operator = (m_new_val); if ( old_val != this->m_val ) { m_changed_event_p->notify_delayed(); m_event_delta = simcontext()->delta_count(); } } else { sc_dt::sc_int_base::operator = (m_new_val); } } SC_TEMPLATE // Return the value changed event. inline const sc_event& sc_signal >::value_changed_event() const { return base_value_changed_event(); } SC_TEMPLATE // Write a sc_in > value to this object instance. inline void sc_signal >::write( const sc_in >& value ) { base_write( value.operator sc_dt::int64 () ); } SC_TEMPLATE // Write a sc_inout > value to this object instance. inline void sc_signal >::write( const sc_inout >& value ) { base_write( value.operator sc_dt::int64 () ); } SC_TEMPLATE // Write a sc_dt::sc_int value to this object instance. inline void sc_signal >::write( const sc_dt::sc_int& value ) { base_write( value); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( sc_dt::uint64 v, int left, int right ) { sc_dt::int64 new_v; // New value. sc_dt::uint64 keep; // Keep mask value. keep = sc_dt::mask_int[left][right]; new_v = (m_new_val & keep) | ((v << right) & ~keep); if ( m_new_val != new_v ) request_update(); m_new_val = new_v; } //============================================================================== // CLASS sc_in > // // This class implements an input port whose target acts like an sc_dt::sc_int data // value. This class is a specialization of the generic sc_in class to // implement tailored support for the sc_dt::sc_int class. //============================================================================== SC_TEMPLATE class sc_in > : public sc_port >, 1>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_int data_type; typedef sc_signal_in_if > if_type; typedef sc_port base_type; typedef sc_in > this_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if > inout_if_type; typedef sc_inout > inout_port_type; public: // bind methods and operators: void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void operator () ( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void bind( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_in() : base_type(), m_traces( 0 ) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} // destructor virtual inline ~sc_in() { remove_traces(); } // bit and part selection sc_dt::sc_int_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_int_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_dt::sc_int_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_int_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_int& read() const { return (*this)->read(); } operator sc_dt::int64 () const { return (sc_dt::int64)(*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &in_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_in"; } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } mutable sc_trace_params_vec* m_traces; private: // disabled sc_in( const sc_in >& ); sc_in >& operator = ( const sc_in >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << (std::ostream& os, const sc_in >& a) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_inout > // // This class implements an input/output port whose target acts like an // sc_dt::sc_int data value. It is derived from the sc_int_in. This class is a // specialization of the generic sc_inout class to implement tailored support // for the sc_dt::sc_int class. //============================================================================== SC_TEMPLATE class sc_inout > : public sc_port >, 1>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_int data_type; typedef sc_signal_inout_if > if_type; typedef sc_port base_type; typedef sc_inout > this_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // bind methods and operators: void bind( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void operator () ( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_inout() : base_type(), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} // destructor virtual inline ~sc_inout() { remove_traces(); } // bit and part selection sc_dt::sc_int_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_int_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_int_sigref& operator [] ( int i ) { return (*this)->select_part(i,i); } sc_int_sigref& bit( int i ) { return (*this)->select_part(i,i); } sc_dt::sc_int_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_int_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } sc_int_sigref& operator () ( int left, int right ) { return (*this)->select_part(left,right); } sc_int_sigref& range( int left, int right ) { return (*this)->select_part(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_int& read() const { return (*this)->read(); } operator sc_dt::int64 () const { return (sc_dt::int64)(*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &inout_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_init_val_p != 0 ) { (*this)->write( (sc_dt::int64) *m_init_val_p ); delete m_init_val_p; m_init_val_p = 0; } if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_inout"; } // value initialization inline void initialize( const sc_dt::sc_int& value_ ) { inout_if_type* iface = this->get_interface(0); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val_p == 0 ) { m_init_val_p = new sc_dt::int64; } *m_init_val_p = value_; } } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } virtual inline void concat_set(sc_dt::int64 src, int low_i) { *this = src >> (( low_i < 64 ) ? low_i : 63); } #if 0 // #### virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i) { *this = src >> low_i; } #endif // 0 #### virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i) { *this = src >> low_i; } virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i) { *this = src >> low_i; } virtual inline void concat_set(sc_dt::uint64 src, int low_i) { *this = ( low_i < 64 ) ? src >> low_i : (sc_dt::uint64)0; } // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (sc_dt::int64)new_val ); } inline void operator = ( const char* new_val ) { (*this)->write( this_type(new_val) ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { (*this)->write(new_val->to_uint64()); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val.to_uint64()); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val.to_uint64()); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_int)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_int)new_val); } inline void write( const sc_in >& new_val ) { (*this)->write( (sc_dt::int64)new_val ); } inline void write( const sc_inout >& new_val ) { (*this)->write( (sc_dt::int64)new_val); } inline void write( const sc_dt::sc_int& new_val ) { (*this)->write( (sc_dt::int64)new_val); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } sc_dt::int64* m_init_val_p; mutable sc_trace_params_vec* m_traces; private: // disabled sc_inout( const sc_inout >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_inout >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_out > // // This class implements an output port whose target acts like an // sc_dt::sc_int data value. This class is a derivation of sc_inout, since // output ports are really no different from input/output ports. //============================================================================== SC_TEMPLATE class sc_out > : public sc_inout > { public: // typedefs typedef sc_dt::sc_int data_type; typedef sc_out this_type; typedef sc_inout base_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; // constructors sc_out() : base_type() {} explicit sc_out( const char* name_ ) : base_type( name_ ) {} explicit sc_out( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out( this_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual inline ~sc_out() {} // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (sc_dt::int64)new_val ); } inline void operator = ( const char* new_val ) { (*this)->write( this_type(new_val) ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { (*this)->write(new_val->to_uint64()); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_int)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_int)new_val); } private: // disabled sc_out( const this_type& ); }; //------------------------------------------------------------------------------ //"sc_int_sigref::initialize" // // This method initializes an object instance from the supplied arguments. // if_p -> access to target of this selection. // left = left-most bit in selection. // right = right-most bit in selection. //------------------------------------------------------------------------------ inline void sc_int_sigref::initialize(sc_int_part_if* if_p, int left, int right) { m_if_p = if_p; m_left = left; m_right = right; m_obj_p = if_p->part_read_target(); } //------------------------------------------------------------------------------ //"sc_int_sigref::operator =" // // These operators assign a value to the bits associated with this object // instance within this object instance's target signal. //------------------------------------------------------------------------------ inline void sc_int_sigref::operator = ( sc_dt::uint64 v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_int_sigref::operator = ( const char* /*v*/ ) { } inline void sc_int_sigref:: operator = ( sc_dt::int64 v ) { *this = (sc_dt::uint64)v; } inline void sc_int_sigref:: operator = ( int v ) { *this = (sc_dt::uint64)v; } inline void sc_int_sigref:: operator = ( long v ) { *this = (sc_dt::uint64)v; } inline void sc_int_sigref:: operator = ( unsigned int v ) { *this = (sc_dt::uint64)v; } inline void sc_int_sigref:: operator = ( unsigned long v ) { *this = (sc_dt::uint64)v; } void sc_int_sigref::operator = ( const sc_int_sigref& v ) { *this = (sc_dt::uint64)v; } template inline void sc_int_sigref:: operator = ( const sc_dt::sc_generic_base& v ) { *this = v->to_uint64(); } inline void sc_int_sigref:: operator = ( const sc_dt::sc_signed& v ) { *this = v.to_uint64(); } inline void sc_int_sigref:: operator = ( const sc_dt::sc_unsigned& v ) { *this = v.to_uint64(); } #undef SC_TEMPLATE #undef TTEST } // namespace sc_core #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) #pragma GCC diagnostic pop #endif #endif // !defined(SC_SIGNAL_INT_H) systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_uint.h0000644000175000017500000013761214342422106025554 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_uint.h -- The sc_signal > definitions. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_uint.h,v $ Revision 1.4 2011/08/15 17:18:21 acg Andy Goodrich: fix blown inclusion of Torsten's edit. Revision 1.3 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.2 2011/06/28 21:23:02 acg Andy Goodrich: merging of SCV tree. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.4 2006/04/05 23:47:02 acg Andy Goodrich: changed sc_get_current_process_base calls into sc_get_current_process_b calls. Revision 1.3 2006/03/21 01:31:48 acg Andy Goodrich: changed over to sc_get_current_process_b() from sc_get_current_process_base() since the function's name changed. Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.27 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.26 2005/07/30 03:44:11 acg Changes from 2.1. Revision 1.25 2005/06/10 22:40:55 acg Changes from 2.1 for operator << and other iostream stuff. Revision 1.24 2005/05/09 17:17:12 acg Changes from 2.1. Revision 1.23 2005/05/08 19:04:06 acg Fix bug in concat_set(int64,off). Other changes from 2.1 examples usage. Revision 1.22 2005/05/03 19:50:20 acg Name space version. Revision 1.20 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.18 2004/11/09 00:11:27 acg Added support for sc_generic_base in place of sc_concatref. sc_concatref now is derived from sc_generic_base. Revision 1.17 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #if !defined(SC_SIGNAL_UINT_H) #define SC_SIGNAL_UINT_H #if ( !defined(_MSC_VER) || _MSC_VER > 1200 ) # define SC_TEMPLATE template #else # define SC_TEMPLATE template<> template #endif #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) // ignore warning about deliberately hidden "bind()" overloads #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif // FORWARD REFERENCES AND USINGS: namespace sc_core { class sc_uint_sigref; //============================================================================== // CLASS sc_uint_part_if // // This class provides generic access to part selections for signals whose // data type is sc_dt::sc_uint. This class serves as the base class for the // sc_dt::sc_uint specialization of the sc_signal_in_if class. The methods // in this class may be over-ridden individually, those that are not overridden // will produce an error message when called. The methods are used by the // sc_uint_sigref class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== class sc_uint_part_if : virtual public sc_interface { protected: // constructor: sc_uint_part_if() {} public: // perform a part read. virtual sc_dt::sc_uint_base* part_read_target(); virtual sc_dt::uint64 read_part( int left, int right ) const; // perform a part write. virtual sc_uint_sigref& select_part( int left, int right ); virtual void write_part( sc_dt::uint64 v, int left, int right ); private: sc_uint_part_if( const sc_uint_part_if& ); sc_uint_part_if& operator = ( const sc_uint_part_if& ); }; //============================================================================== // CLASS sc_signal_in_if > // // This is the class specializations for the sc_signal_in_if class to // provide additional features for sc_signal instances whose template is // sc_dt::sc_uint, including part access. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== template< int W > class sc_signal_in_if > : public sc_uint_part_if { friend class sc_uint_sigref; public: typedef sc_signal_in_if > this_type; // get the value changed event virtual const sc_event& value_changed_event() const = 0; // read the current value virtual const sc_dt::sc_uint& read() const = 0; // get a reference to the current value (for tracing) virtual const sc_dt::sc_uint& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const this_type& ); this_type& operator = ( const this_type& ); }; //============================================================================= // CLASS : sc_uint_sigref // // Proxy class for sc_signal_uint bit and part selection. //============================================================================= class sc_uint_sigref : public sc_dt::sc_uint_subref_r { public: sc_uint_sigref() : sc_dt::sc_uint_subref_r() {} virtual ~sc_uint_sigref() {} virtual void concat_set(sc_dt::int64 src, int low_i); virtual void concat_set(const sc_dt::sc_signed& src, int low_i); virtual void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual void concat_set(sc_dt::uint64 src, int low_i); public: inline void initialize( sc_uint_part_if* if_p, int left_, int right_ ); public: inline void operator = ( sc_dt::uint64 v ); inline void operator = ( const char* v ); inline void operator = ( unsigned long v ); inline void operator = ( long v ); inline void operator = ( unsigned int v ); inline void operator = ( int v ); inline void operator = ( sc_dt::int64 v ); inline void operator = ( double v ); inline void operator = ( const sc_uint_sigref& v ); template inline void operator = ( const sc_dt::sc_generic_base& v ); inline void operator = ( const sc_dt::sc_signed& v ); inline void operator = ( const sc_dt::sc_unsigned& v ); inline void operator = ( const sc_dt::sc_bv_base& v ); inline void operator = ( const sc_dt::sc_lv_base& v ); public: static sc_vpool m_pool; // Pool of objects to use. protected: sc_uint_part_if* m_if_p; // Target for selection. private: // disabled sc_uint_sigref( const sc_uint_sigref& a ); }; //============================================================================== // CLASS sc_signal > // // This class implements a signal whose value acts like an sc_dt::sc_uint data // value. This class is a specialization of the generic sc_signal class to // implement tailored support for the sc_dt::sc_uint class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations. //============================================================================== SC_TEMPLATE class sc_signal > : public sc_signal_inout_if >, public sc_prim_channel, public sc_dt::sc_uint { public: // typedefs typedef sc_signal > this_type; public: // constructors and destructor: inline sc_signal(); explicit inline sc_signal(const char* name_); virtual inline ~sc_signal(); public: // base methods: inline bool base_event() const; inline const sc_dt::sc_uint& base_read() const; inline const sc_event& base_value_changed_event() const; inline void base_write( sc_dt::uint64 value ); public: // sc_prim_channel virtual methods: virtual inline const char* kind() const; virtual inline void update(); public: // sc_interface virtual methods: virtual inline const sc_event& default_event() const; virtual inline void register_port( sc_port_base& port_, const char* if_typename_ ); public: // sc_uint_channel virtual methods: virtual sc_dt::sc_uint_base* part_read_target(); virtual inline sc_dt::uint64 read_part(int left, int right) const; virtual inline sc_uint_sigref& select_part(int left, int right); virtual inline void write_part(sc_dt::uint64 v, int left, int right); public: // interface virtual methods: virtual inline bool event() const; virtual inline const sc_dt::sc_uint& get_data_ref() const; // virtual inline sc_signal >& get_signal() ; virtual inline const sc_dt::sc_uint& read() const; virtual inline const sc_event& value_changed_event() const; virtual inline void write( const sc_in >& value ); virtual inline void write( const sc_inout >& value ); virtual inline void write( const sc_dt::sc_uint& value ); public: // part selections: inline sc_uint_sigref& operator () ( int left, int right ); inline sc_uint_sigref& operator [] ( int bit ); public: // operators: inline void operator = ( const this_type& new_val ); inline void operator = ( const char* new_val ); inline void operator = ( sc_dt::uint64 new_val ); inline void operator = ( sc_dt::int64 new_val ); inline void operator = ( int new_val ); inline void operator = ( long new_val ) ; inline void operator = ( short new_val ) ; inline void operator = ( unsigned int new_val ) ; inline void operator = ( unsigned long new_val ); inline void operator = ( unsigned short new_val ); template inline void operator = ( const sc_dt::sc_generic_base& new_val ); inline void operator = ( const sc_dt::sc_signed& new_val ); inline void operator = ( const sc_dt::sc_unsigned& new_val ); inline void operator = ( const sc_dt::sc_bv_base& new_val ); inline void operator = ( const sc_dt::sc_lv_base& new_val ); public: // concatenation methods (we inherit length and gets from sc_dt::sc_uint): virtual inline void concat_set(sc_dt::int64 src, int low_i); virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i); virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual inline void concat_set(sc_dt::uint64 src, int low_i); protected: // debugging methods: // #### void check_port(); void check_writer(); private: // Disabled operations that sc_dt::sc_uint supports: sc_signal >& operator ++ (); // prefix const sc_signal >& operator ++ (int); // postfix sc_signal >& operator -- (); // prefix const sc_signal >& operator -- (int); // postfix sc_signal >& operator += (sc_dt::uint_type); sc_signal >& operator -= (sc_dt::uint_type); sc_signal >& operator *= (sc_dt::uint_type); sc_signal >& operator /= (sc_dt::uint_type); sc_signal >& operator %= (sc_dt::uint_type); sc_signal >& operator &= (sc_dt::uint_type); sc_signal >& operator |= (sc_dt::uint_type); sc_signal >& operator ^= (sc_dt::uint_type); protected: mutable sc_event* m_changed_event_p; // Value changed event this object. sc_dt::uint64 m_event_delta; // Delta cycle of last event. sc_dt::uint64 m_new_val; // New value for this object instance. sc_port_base* m_output_p; // Single write port verify field. sc_process_b* m_writer_p; // Single writer verify field. }; SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::base_event() const { return simcontext()->delta_count() == m_event_delta + 1; } SC_TEMPLATE // Return this object's sc_dt::sc_uint object instance. inline const sc_dt::sc_uint& sc_signal >::base_read() const { return *this; } SC_TEMPLATE // Return the value changed event, allocating it if necessary. inline const sc_event& sc_signal >::base_value_changed_event() const { if ( !m_changed_event_p ) m_changed_event_p = new sc_event; return *m_changed_event_p; } SC_TEMPLATE // Write an sc_dt::uint64 value to this object instance. inline void sc_signal >::base_write( sc_dt::uint64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } //------------------------------------------------------------------------------ //"sc_signal >::check_writer" // // This method checks to see if there is more than one writer for this // object instance by keeping track of the process performing the write. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::check_writer() { sc_process_b* writer_p = sc_get_current_process_b(); if( m_writer_p == 0 ) { m_writer_p = writer_p; } else if( m_writer_p != writer_p ) { sc_signal_invalid_writer( name(), kind(), m_writer_p->name(), writer_p->name() ); } } //------------------------------------------------------------------------------ //"sc_signal >::concat_set" // // These virtual methods allow value assignments to this object instance // from various sources. The position within the supplied source of the // low order bit for this object instance's value is low_i. // src = source value. // low_i = bit within src to serve as low order bit of this object // instance's value. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::concat_set( sc_dt::int64 src, int low_i) { if ( low_i < 64 ) { base_write(src >> low_i); } else { base_write( (src < 0 ) ? src >> 63 : 0 ); } } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_lv_base& src, int low_i) { sc_dt::sc_unsigned tmp(src.length()); tmp = src >> low_i; base_write( tmp.to_uint64() ); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_signed& src, int low_i) { base_write( (src >> low_i).to_uint64()); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_unsigned& src, int low_i) { base_write( (src >> low_i).to_uint64()); } SC_TEMPLATE inline void sc_signal >::concat_set( sc_dt::uint64 src, int low_i) { base_write( ( low_i < 64 ) ? src >> low_i : 0 ); } SC_TEMPLATE // Return the default event for this object instance. inline const sc_event& sc_signal >::default_event() const { return base_value_changed_event(); } SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::event() const { return base_event(); } SC_TEMPLATE // Return a reference to the value of this object instance. inline const sc_dt::sc_uint& sc_signal >::get_data_ref() const { return *this; } #if 0 SC_TEMPLATE // Return a pointer to this object instance. inline sc_signal >& sc_signal >::get_signal() { return *this; } #endif // 0 SC_TEMPLATE // Return a kind value of "sc_signal". inline const char* sc_signal >::kind() const { return "sc_signal"; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator () // // This operator returns a part selection of this object instance. // left = left-hand bit of the selection. // right = right-hand bit of the selection. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_uint_sigref& sc_signal >::operator () (int left, int right) { sc_uint_sigref* result_p; // Value to return. result_p = sc_uint_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } //------------------------------------------------------------------------------ //"sc_signal_uint::operator []" // // This operator returns a bit selection of this object instance. // i = bit to be selected. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_uint_sigref& sc_signal >::operator [] ( int bit ) { return operator () (bit,bit); } SC_TEMPLATE inline void sc_signal >::operator = ( const this_type& new_val ) { base_write( (sc_dt::uint64)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::uint64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( const char* new_val ) { m_new_val = sc_dt::sc_uint<64>(new_val); request_update(); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::int64 new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( int new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( long new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( short new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned int new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned long new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned short new_val ) { base_write((sc_dt::uint64)new_val); } SC_TEMPLATE template inline void sc_signal >::operator = ( const sc_dt::sc_generic_base& new_val ) { base_write(new_val->to_uint64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_signed& new_val ) { base_write(new_val.to_uint64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_unsigned& new_val ) { base_write(new_val.to_uint64()); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_bv_base& new_val ) { base_write( (sc_dt::sc_uint)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_lv_base& new_val ) { base_write( (sc_dt::sc_uint)new_val ); } SC_TEMPLATE inline sc_dt::sc_uint_base* sc_signal >::part_read_target() { return this; } SC_TEMPLATE inline const sc_dt::sc_uint& sc_signal >::read() const { return *this; } SC_TEMPLATE // Read a portion of a value. inline sc_dt::uint64 sc_signal >::read_part( int left, int right ) const { // This pointer required for HP aCC. return (this->m_val & ~sc_dt::mask_int[left][right]) >> right; } SC_TEMPLATE inline void sc_signal >::register_port( sc_port_base& port_, const char* if_typename_ ) { # ifdef DEBUG_SYSTEMC std::string nm( if_typename_ ); if( nm == typeid( sc_signal_inout_if > ).name() ) { if( m_output_p != 0 ) { sc_signal_invalid_writer( name(), kind(), m_output_p->name(), port_.name() ); } m_output_p = &port_; } # else if ( port_.name() && if_typename_ ) {} // Silence unused args warning. # endif } SC_TEMPLATE // Autogenerated name object instance constructor. inline sc_signal >::sc_signal() : sc_prim_channel(sc_gen_unique_name( "signal" )), m_changed_event_p(0), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Explicitly named object instance constructor. inline sc_signal >::sc_signal(const char* name_) : sc_prim_channel(name_), m_changed_event_p(0), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Object instance destructor. inline sc_signal >::~sc_signal() { if ( m_changed_event_p ) delete m_changed_event_p; } SC_TEMPLATE // Update the current value from new value. inline void sc_signal >::update() { if ( m_changed_event_p ) { // This pointer required for HP aCC. sc_dt::uint64 old_val = this->m_val; sc_dt::sc_uint_base::operator = (m_new_val); if ( old_val != this->m_val ) { m_changed_event_p->notify_delayed(); m_event_delta = simcontext()->delta_count(); } } else { sc_dt::sc_uint_base::operator = (m_new_val); } } SC_TEMPLATE // Return the value changed event. inline const sc_event& sc_signal >::value_changed_event() const { return base_value_changed_event(); } SC_TEMPLATE // Write a sc_in > value to this object instance. inline void sc_signal >::write( const sc_in >& value ) { base_write( value.operator sc_dt::uint64 () ); } SC_TEMPLATE // Write a sc_inout > value to this object instance. inline void sc_signal >::write( const sc_inout >& value ) { base_write( value.operator sc_dt::uint64 () ); } SC_TEMPLATE // Write a sc_dt::sc_uint value to this object instance. inline void sc_signal >::write( const sc_dt::sc_uint& value ) { base_write( value); } SC_TEMPLATE // Select a portion of a value. inline sc_uint_sigref& sc_signal >::select_part(int left, int right) { sc_uint_sigref* result_p = sc_uint_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( sc_dt::uint64 v, int left, int right ) { sc_dt::uint64 new_v; // New value. sc_dt::uint64 keep; // Keep mask value. keep = sc_dt::mask_int[left][right]; new_v = (m_new_val & keep) | ((v << right) & ~keep); m_new_val = new_v; request_update(); } //============================================================================== // CLASS sc_in > // // This class implements an input port whose target acts like an sc_dt::sc_uint data // value. This class is a specialization of the generic sc_in class to // implement tailored support for the sc_dt::sc_uint class. //============================================================================== SC_TEMPLATE class sc_in > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_uint data_type; typedef sc_signal_in_if > if_type; typedef sc_port base_type; typedef sc_in > this_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if > inout_if_type; typedef sc_inout > inout_port_type; public: // bind methods and operators: void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void operator () ( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void bind( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_in() : base_type(), m_traces( 0 ) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} // destructor virtual inline ~sc_in() { remove_traces(); } // bit and part selection sc_dt::sc_uint_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_uint_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_dt::sc_uint_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_uint_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_uint& read() const { return (*this)->read(); } operator sc_dt::uint64 () const { return (sc_dt::uint64)(*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &in_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_in"; } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } mutable sc_trace_params_vec* m_traces; private: // disabled sc_in( const sc_in >& ); sc_in >& operator = ( const sc_in >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_in >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_inout > // // This class implements an input/output port whose target acts like an // sc_dt::sc_uint data value. It is derived from the sc_uint_in. This class is a // specialization of the generic sc_inout class to implement tailored support // for the sc_dt::sc_uint class. //============================================================================== SC_TEMPLATE class sc_inout > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_uint data_type; typedef sc_signal_inout_if > if_type; typedef sc_port base_type; typedef sc_inout > this_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // bind methods and operators: void bind( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void operator () ( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_inout() : base_type(), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} // destructor virtual inline ~sc_inout() { remove_traces(); } // bit and part selection sc_dt::sc_uint_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_uint_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_uint_sigref& operator [] ( int i ) { return (*this)->select_part(i,i); } sc_uint_sigref& bit( int i ) { return (*this)->select_part(i,i); } sc_dt::sc_uint_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_uint_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } sc_uint_sigref& operator () ( int left, int right ) { return (*this)->select_part(left,right); } sc_uint_sigref& range( int left, int right ) { return (*this)->select_part(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_uint& read() const { return (*this)->read(); } operator sc_dt::uint64 () const { return (sc_dt::uint64)(*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &inout_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_init_val_p != 0 ) { (*this)->write( (sc_dt::uint64) *m_init_val_p ); delete m_init_val_p; m_init_val_p = 0; } if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_inout"; } // value initialization inline void initialize( const sc_dt::sc_uint& value_ ) { inout_if_type* iface = this->get_interface(0); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val_p == 0 ) { m_init_val_p = new sc_dt::uint64; } *m_init_val_p = value_; } } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } virtual inline void concat_set(sc_dt::int64 src, int low_i) { *this = (src >> ((low_i < 64) ? low_i : 63)); } #if 0 virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i) { if (low_i < 64) *this = src >> low_i; else *this = 0; } #endif // 0 #### virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(sc_dt::uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : (sc_dt::uint64)0; } // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (sc_dt::uint64)new_val ); } inline void operator = ( const char* new_val ) { (*this)->write( this_type(new_val) ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { (*this)->write(new_val->to_uint64()); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val.to_uint64()); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val.to_uint64()); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_uint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_uint)new_val); } inline void write( const sc_in >& new_val ) { (*this)->write( (sc_dt::uint64)new_val ); } inline void write( const sc_inout >& new_val ) { (*this)->write( (sc_dt::uint64)new_val); } inline void write( const sc_dt::sc_uint& new_val ) { (*this)->write( (sc_dt::uint64)new_val); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } sc_dt::uint64* m_init_val_p; mutable sc_trace_params_vec* m_traces; private: // disabled sc_inout( const sc_inout >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_inout >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_out > // // This class implements an output port whose target acts like an // sc_dt::sc_uint data value. This class is a derivation of sc_inout, since // output ports are really no different from input/output ports. //============================================================================== SC_TEMPLATE class sc_out > : public sc_inout > { public: // typedefs typedef sc_dt::sc_uint data_type; typedef sc_out this_type; typedef sc_inout base_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; // constructors sc_out() : base_type() {} explicit sc_out( const char* name_ ) : base_type( name_ ) {} explicit sc_out( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out( this_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual inline ~sc_out() {} // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (sc_dt::uint64)new_val ); } inline void operator = ( const char* new_val ) { (*this)->write( this_type(new_val) ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { (*this)->write(new_val->to_uint64()); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_uint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_uint)new_val); } private: // disabled sc_out( const this_type& ); }; //------------------------------------------------------------------------------ //"sc_uint_sigref::initialize" // // This method initializes an object instance from the supplied arguments. // if_p -> interface for signal to perform writes for this object. // left = left-most bit in selection. // right = right-most bit in selection. //------------------------------------------------------------------------------ inline void sc_uint_sigref::initialize(sc_uint_part_if* if_p, int left, int right) { m_left = left; m_right = right; m_if_p = if_p; m_obj_p = if_p->part_read_target(); } //------------------------------------------------------------------------------ //"sc_uint_sigref::operator =" // // These operators assign a value to the bits associated with this object // instance within this object instance's target signal. //------------------------------------------------------------------------------ inline void sc_uint_sigref::operator = ( sc_dt::uint64 v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_uint_sigref::operator = ( const char* /*v*/ ) { } inline void sc_uint_sigref:: operator = ( sc_dt::int64 v ) { *this = (sc_dt::uint64)v; } inline void sc_uint_sigref:: operator = ( int v ) { *this = (sc_dt::uint64)v; } inline void sc_uint_sigref:: operator = ( long v ) { *this = (sc_dt::uint64)v; } inline void sc_uint_sigref:: operator = ( unsigned int v ) { *this = (sc_dt::uint64)v; } inline void sc_uint_sigref:: operator = ( unsigned long v ) { *this = (sc_dt::uint64)v; } void sc_uint_sigref::operator = ( const sc_uint_sigref& v ) { *this = (sc_dt::uint64)v; } template inline void sc_uint_sigref:: operator = ( const sc_dt::sc_generic_base& v ) { *this = v->to_uint64(); } inline void sc_uint_sigref:: operator = ( const sc_dt::sc_signed& v ) { *this = v.to_uint64(); } inline void sc_uint_sigref:: operator = ( const sc_dt::sc_unsigned& v ) { *this = v.to_uint64(); } #undef SC_TEMPLATE } // namespace sc_core #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) #pragma GCC diagnostic pop #endif #endif // !defined(SC_SIGNAL_UINT_H) systemc-2.3.4/examples/sysc/2.1/specialized_signals/CMakeLists.txt0000644000175000017500000000447114342422106024746 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/specialized_signals/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (specialized_signals main.cpp scx_signal_int.h scx_signal_int.cpp scx_signal_uint.h scx_signal_uint.cpp scx_signal_signed.h scx_signal_signed.cpp scx_signal_unsigned.h scx_signal_unsigned.cpp) target_link_libraries (specialized_signals SystemC::systemc) configure_and_add_test (specialized_signals) systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_unsigned.cpp0000644000175000017500000001602714342422106026740 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_unsigned.cpp -- The sc_signal > implementations. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_unsigned.cpp,v $ Revision 1.3 2011/08/26 22:28:29 acg Torsten Maehne: eliminate unused argument warnings. Revision 1.2 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.17 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.16 2005/05/03 19:52:26 acg Get proper header locations on includes. Revision 1.15 2005/05/03 19:50:20 acg Name space version. Revision 1.12 2005/04/11 19:05:36 acg Change to sc_clock for Microsoft VCC 6.0. Changes for namespaces Revision 1.11 2005/04/03 22:52:52 acg Namespace changes. Revision 1.10 2005/03/21 22:31:33 acg Changes to sc_core namespace. Revision 1.9 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #include "sysc/utils/sc_temporary.h" #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_signal_ports.h" #include "sysc/communication/sc_signal.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_macros.h" #include "sysc/tracing/sc_trace.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/int/sc_int.h" #include "sysc/datatypes/int/sc_uint.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_biguint.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "./scx_signal_unsigned.h" #include namespace sc_core { extern void sc_signal_invalid_writer( const char* name, const char* kind, const char* first_writer, const char* second_writer ); //------------------------------------------------------------------------------ // POOL OF TEMPORARY INSTANCES OF sc_unsigned_sigref // // This allows use to pass const references for part and bit selections // on sc_signal_signed object instances. //------------------------------------------------------------------------------ sc_vpool sc_unsigned_sigref::m_pool(8); //------------------------------------------------------------------------------ //"sc_unsigned_part_if::default methods" // // These versions just produce errors if they are not overloaded but used. //------------------------------------------------------------------------------ sc_dt::sc_unsigned* sc_unsigned_part_if::part_read_target() { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_dt::sc_unsigned sc_unsigned_part_if::read_part( int /*left*/, int /*right*/ ) const { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); sc_core::sc_abort(); // can't recover from here } sc_unsigned_sigref& sc_unsigned_part_if::select_part(int /*left*/, int /*right*/) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); sc_core::sc_abort(); // can't recover from here } void sc_unsigned_part_if::write_part( sc_dt::int64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_unsigned_part_if::write_part( sc_dt::uint64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_unsigned_part_if::write_part( const sc_dt::sc_signed& /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } void sc_unsigned_part_if::write_part( const sc_dt::sc_unsigned& /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } //------------------------------------------------------------------------------ //"sc_unsigned_sigref::concate_set" // // These methods assign this object instance's value from the supplied // value starting at the supplied bit within that value. // src = value to use to set this object instance's value. // low_i = bit in src that is to be the low order bit of the value to set. // #### OPTIMIZE //------------------------------------------------------------------------------ void sc_unsigned_sigref::concat_set(sc_dt::int64 src, int low_i) { sc_dt::int64 tmp; if ( low_i < 63 ) tmp = src >> low_i; else tmp = (src < 0) ? -1 : 0; m_if_p->write_part( tmp, m_left, m_right ); } void sc_unsigned_sigref::concat_set(const sc_dt::sc_signed& src, int low_i) { m_if_p->write_part( src >> low_i, m_left, m_right ); } void sc_unsigned_sigref::concat_set(const sc_dt::sc_lv_base& src, int low_i) { sc_dt::sc_unsigned tmp(src.length()); tmp = src; m_if_p->write_part( tmp >> low_i, m_left, m_right ); } void sc_unsigned_sigref::concat_set(const sc_dt::sc_unsigned& src, int low_i) { m_if_p->write_part( src >> low_i, m_left, m_right ); } void sc_unsigned_sigref::concat_set(sc_dt::uint64 src, int low_i) { sc_dt::uint64 tmp = (low_i < 63) ? (src >> low_i) : 0; m_if_p->write_part( tmp, m_left, m_right ); } } // namespace sc_core systemc-2.3.4/examples/sysc/2.1/specialized_signals/specialized_signals.sln0000644000175000017500000000232014342422106026727 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "specialized_signals", "specialized_signals.vcxproj", "{CD770F7E-11AA-469F-B0F5-2A8395DF0355}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|Win32.ActiveCfg = Debug|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|Win32.Build.0 = Debug|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|x64.ActiveCfg = Debug|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Debug|x64.Build.0 = Debug|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|Win32.ActiveCfg = Release|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|Win32.Build.0 = Release|Win32 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|x64.ActiveCfg = Release|x64 {CD770F7E-11AA-469F-B0F5-2A8395DF0355}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_signed.h0000644000175000017500000015405414342422106026045 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_signed.h -- The sc_signal > definitions. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_signed.h,v $ Revision 1.4 2011/08/15 17:18:21 acg Andy Goodrich: fix blown inclusion of Torsten's edit. Revision 1.3 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.2 2011/06/28 21:23:02 acg Andy Goodrich: merging of SCV tree. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.4 2006/10/23 19:40:35 acg Andy Goodrich: added an explicit dynamic cast to keep gcc 4.x happy. Revision 1.3 2006/03/21 01:31:48 acg Andy Goodrich: changed over to sc_get_current_process_b() from sc_get_current_process_base() since the function's name changed. Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.29 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.28 2005/07/30 03:44:11 acg Changes from 2.1. Revision 1.27 2005/05/09 17:17:12 acg Changes from 2.1. Revision 1.26 2005/05/08 19:04:06 acg Fix bug in concat_set(int64,off). Other changes from 2.1 examples usage. Revision 1.25 2005/05/03 20:05:16 acg Prefixed with sc_dt some sc_signed instances that were missed. Revision 1.24 2005/05/03 19:50:20 acg Name space version. Revision 1.22 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.21 2005/01/10 17:51:58 acg Improvements. Revision 1.20 2004/11/09 00:11:27 acg Added support for sc_generic_base in place of sc_concatref. sc_concatref now is derived from sc_generic_base. Revision 1.19 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #if !defined(SC_SIGNAL_SIGNED_H) #define SC_SIGNAL_SIGNED_H #if ( !defined(_MSC_VER) || _MSC_VER > 1200 ) # define SC_TEMPLATE template #else # define SC_TEMPLATE template<> template #endif #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) // ignore warning about deliberately hidden "bind()" overloads #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif // FORWARD REFERENCES AND USINGS: using sc_dt::int64; namespace sc_core { class sc_signed_sigref; //============================================================================== // CLASS sc_signed_part_if // // This class provides generic access to part selections for signals whose // data type is sc_dt::sc_bigint. This class serves as the base class for the // sc_dt::sc_bigint specialization of the sc_signal_in_if class. The methods // in this class may be over-ridden individually, those that are not overridden // will produce an error message when called. The methods are used by the // sc_bigint_sigref class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== class sc_signed_part_if : virtual public sc_interface { protected: // constructor: sc_signed_part_if() {} public: // perform a part read. virtual sc_dt::sc_signed* part_read_target(); virtual sc_dt::sc_signed read_part( int left, int right ) const; // perform a part write. virtual sc_signed_sigref& select_part( int left, int right ); virtual void write_part( sc_dt::int64 v, int left, int right ); virtual void write_part( sc_dt::uint64 v, int left, int right ); virtual void write_part( const sc_dt::sc_signed& v, int left, int right ); virtual void write_part( const sc_dt::sc_unsigned& v, int left, int right ); private: sc_signed_part_if( const sc_signed_part_if& ); sc_signed_part_if& operator = ( const sc_signed_part_if& ); }; //============================================================================== // CLASS sc_signal_in_if > // // This is the class specializations for the sc_signal_in_if class to // provide additional features for sc_signal instances whose template is // sc_dt::sc_bigint, including part access. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations in sc_signal >. //============================================================================== template< int W > class sc_signal_in_if > : public sc_signed_part_if { friend class sc_signed_sigref; public: typedef sc_signal_in_if > this_type; // get the value changed event virtual const sc_event& value_changed_event() const = 0; // read the current value virtual const sc_dt::sc_bigint& read() const = 0; // get a reference to the current value (for tracing) virtual const sc_dt::sc_bigint& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const this_type& ); this_type& operator = ( const this_type& ); }; //============================================================================= // CLASS : sc_signed_sigref // // Proxy class for sc_signal_uint bit and part selection. //============================================================================= class sc_signed_sigref : public sc_dt::sc_signed_subref_r { public: sc_signed_sigref() : sc_dt::sc_signed_subref_r() {} virtual ~sc_signed_sigref() {} virtual void concat_set(sc_dt::int64 src, int low_i); virtual void concat_set(const sc_dt::sc_signed& src, int low_i); virtual void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual void concat_set(sc_dt::uint64 src, int low_i); public: inline void initialize( sc_signed_part_if* if_p, int left_, int right_ ); public: inline void operator = ( sc_dt::uint64 v ); inline void operator = ( const char* v ); inline void operator = ( unsigned long v ); inline void operator = ( long v ); inline void operator = ( unsigned int v ); inline void operator = ( int v ); inline void operator = ( sc_dt::int64 v ); inline void operator = ( double v ); inline void operator = ( const sc_signed_sigref& v ); template inline void operator = ( const sc_dt::sc_generic_base& v ); inline void operator = ( const sc_dt::sc_signed& v ); inline void operator = ( const sc_dt::sc_unsigned& v ); inline void operator = ( const sc_dt::sc_bv_base& v ); inline void operator = ( const sc_dt::sc_lv_base& v ); public: static sc_vpool m_pool; // Pool of objects to use. protected: sc_signed_part_if* m_if_p; // Target for selection. private: // disabled sc_signed_sigref( const sc_signed_sigref& a ); }; //============================================================================== // CLASS sc_signal > // // This class implements a signal whose value acts like an sc_dt::sc_bigint data // value. This class is a specialization of the generic sc_signal class to // implement tailored support for the sc_dt::sc_bigint class. // // Notes: // (1) Descriptions of the methods and operators in this class appear with // their implementations. //============================================================================== SC_TEMPLATE class sc_signal > : public sc_dt::sc_bigint, public sc_prim_channel, public sc_signal_inout_if > { public: // typedefs typedef sc_signal > this_type; public: // constructors and destructor: inline sc_signal(); explicit inline sc_signal(const char* name_); virtual inline ~sc_signal(); public: // base methods: inline bool base_event() const; inline const sc_dt::sc_bigint& base_read() const; inline const sc_event& base_value_changed_event() const; inline void base_write( sc_dt::int64 value ); inline void base_write( sc_dt::uint64 value ); inline void base_write( const sc_dt::sc_signed& value ); inline void base_write( const sc_dt::sc_unsigned& value ); public: // sc_prim_channel virtual methods: virtual inline const char* kind() const; virtual inline void update(); public: // sc_interface virtual methods: virtual inline const sc_event& default_event() const; virtual inline void register_port( sc_port_base& port_, const char* if_typename_ ); public: // sc_signed_part_if virtual methods: virtual inline sc_dt::sc_signed* part_read_target(); virtual inline sc_dt::sc_signed read_part(int left, int right) const; virtual sc_signed_sigref& select_part( int left, int right ); virtual inline void write_part( sc_dt::int64 v, int left, int right ); virtual inline void write_part( sc_dt::uint64 v, int left, int right ); virtual inline void write_part( const sc_dt::sc_signed& v, int left, int right ); virtual inline void write_part(const sc_dt::sc_unsigned& v, int left, int right); public: // interface virtual methods: virtual inline bool event() const; virtual inline const sc_dt::sc_bigint& get_data_ref() const; virtual inline sc_signal >& get_signal(); virtual inline const sc_dt::sc_bigint& read() const; virtual inline const sc_event& value_changed_event() const; virtual inline void write( const sc_in >& value ); virtual inline void write( const sc_inout >& value ); virtual inline void write( const sc_dt::sc_bigint& value ); public: // part selections: inline sc_signed_sigref& operator () ( int left, int right ); // #### Need to add bit() and range() inline sc_signed_sigref& operator [] ( int bit ); public: // operators: inline void operator = ( const this_type& new_val ); inline void operator = ( const char* new_val ); inline void operator = ( sc_dt::uint64 new_val ); inline void operator = ( sc_dt::int64 new_val ); inline void operator = ( int new_val ); inline void operator = ( long new_val ); inline void operator = ( short new_val ); inline void operator = ( unsigned int new_val ); inline void operator = ( unsigned long new_val ); inline void operator = ( unsigned short new_val ); template inline void operator = ( const sc_dt::sc_generic_base& new_val ); inline void operator = ( const sc_dt::sc_signed& new_val ); inline void operator = ( const sc_dt::sc_unsigned& new_val ); inline void operator = ( const sc_dt::sc_bv_base& new_val ); inline void operator = ( const sc_dt::sc_lv_base& new_val ); // concatenation methods (we inherit length and gets from sc_dt::sc_bigint): virtual inline void concat_set(sc_dt::int64 src, int low_i); virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i); virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i); virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i); virtual inline void concat_set(sc_dt::uint64 src, int low_i); protected: // debugging methods: // #### void check_port(); void check_writer(); private: // Disabled operations that sc_dt::sc_bigint supports: sc_dt::sc_signed& operator ++ (); // prefix const sc_dt::sc_signed& operator ++ (int); // postfix sc_dt::sc_signed& operator -- (); // prefix const sc_dt::sc_signed& operator -- (int); // postfix sc_dt::sc_signed& operator += (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator += (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator += (sc_dt::int64 ); sc_dt::sc_signed& operator += (sc_dt::uint64 ); sc_dt::sc_signed& operator += (long ); sc_dt::sc_signed& operator += (unsigned long ); sc_dt::sc_signed& operator += (int ); sc_dt::sc_signed& operator += (unsigned int ); sc_dt::sc_signed& operator -= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator -= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator -= (sc_dt::int64 ); sc_dt::sc_signed& operator -= (sc_dt::uint64 ); sc_dt::sc_signed& operator -= (long ); sc_dt::sc_signed& operator -= (unsigned long ); sc_dt::sc_signed& operator -= (int ); sc_dt::sc_signed& operator -= (unsigned int ); sc_dt::sc_signed& operator *= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator *= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator *= (sc_dt::int64 ); sc_dt::sc_signed& operator *= (sc_dt::uint64 ); sc_dt::sc_signed& operator *= (long ); sc_dt::sc_signed& operator *= (unsigned long ); sc_dt::sc_signed& operator *= (int ); sc_dt::sc_signed& operator *= (unsigned int ); sc_dt::sc_signed& operator /= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator /= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator /= (sc_dt::int64 ); sc_dt::sc_signed& operator /= (sc_dt::uint64 ); sc_dt::sc_signed& operator /= (long ); sc_dt::sc_signed& operator /= (unsigned long ); sc_dt::sc_signed& operator /= (int ); sc_dt::sc_signed& operator /= (unsigned int ); sc_dt::sc_signed& operator %= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator %= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator %= (sc_dt::int64 ); sc_dt::sc_signed& operator %= (sc_dt::uint64 ); sc_dt::sc_signed& operator %= (long ); sc_dt::sc_signed& operator %= (unsigned long ); sc_dt::sc_signed& operator %= (int ); sc_dt::sc_signed& operator %= (unsigned int ); sc_dt::sc_signed& operator &= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator &= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator &= (sc_dt::int64 ); sc_dt::sc_signed& operator &= (sc_dt::uint64 ); sc_dt::sc_signed& operator &= (long ); sc_dt::sc_signed& operator &= (unsigned long ); sc_dt::sc_signed& operator &= (int ); sc_dt::sc_signed& operator &= (unsigned int ); sc_dt::sc_signed& operator |= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator |= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator |= (sc_dt::int64 ); sc_dt::sc_signed& operator |= (sc_dt::uint64 ); sc_dt::sc_signed& operator |= (long ); sc_dt::sc_signed& operator |= (unsigned long ); sc_dt::sc_signed& operator |= (int ); sc_dt::sc_signed& operator |= (unsigned int ); sc_dt::sc_signed& operator ^= (const sc_dt::sc_signed& ); sc_dt::sc_signed& operator ^= (const sc_dt::sc_unsigned& ); sc_dt::sc_signed& operator ^= (sc_dt::int64 ); sc_dt::sc_signed& operator ^= (sc_dt::uint64 ); sc_dt::sc_signed& operator ^= (long ); sc_dt::sc_signed& operator ^= (unsigned long ); sc_dt::sc_signed& operator ^= (int ); sc_dt::sc_signed& operator ^= (unsigned int ); protected: mutable sc_event* m_changed_event_p; // Value changed event this object. sc_dt::uint64 m_event_delta; // Delta cycle of last event. sc_dt::sc_signed m_new_val; // New value for this object instance. sc_port_base* m_output_p; // Single write port verify field. sc_process_b* m_writer_p; // Single writer verify field. }; SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::base_event() const { return simcontext()->delta_count() == m_event_delta + 1; } SC_TEMPLATE // Return this object's sc_dt::sc_bigint object instance. inline const sc_dt::sc_bigint& sc_signal >::base_read() const { return *this; } SC_TEMPLATE // Return the value changed event, allocating it if necessary. inline const sc_event& sc_signal >::base_value_changed_event() const { if ( !m_changed_event_p ) m_changed_event_p = new sc_event; return *m_changed_event_p; } SC_TEMPLATE // Write a const sc_dt::sc_signed& value to this object instance. inline void sc_signal >::base_write( const sc_dt::sc_signed& value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a const sc_dt::sc_unsigned& value to this object instance. inline void sc_signal >::base_write( const sc_dt::sc_unsigned& value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a sc_dt::int64 value to this object instance. inline void sc_signal >::base_write( sc_dt::int64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } SC_TEMPLATE // Write a sc_dt::uint64 value to this object instance. inline void sc_signal >::base_write( sc_dt::uint64 value ) { # if defined(DEBUG_SYSTEMC) check_writer(); # endif m_new_val = value; request_update(); } //------------------------------------------------------------------------------ //"sc_signal >::check_writer" // // This method checks to see if there is more than one writer for this // object instance by keeping track of the process performing the write. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::check_writer() { sc_process_b* writer_p = sc_get_current_process_b(); if( m_writer_p == 0 ) { m_writer_p = writer_p; } else if( m_writer_p != writer_p ) { sc_signal_invalid_writer( name(), kind(), m_writer_p->name(), writer_p->name() ); } } //------------------------------------------------------------------------------ //"sc_signal >::concat_set" // // These virtual methods allow value assignments to this object instance // from various sources. The position within the supplied source of the // low order bit for this object instance's value is low_i. // src = source value. // low_i = bit within src to serve as low order bit of this object // instance's value. //------------------------------------------------------------------------------ SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::int64 src, int low_i) { if ( low_i < 64 ) { base_write(src >> low_i); } else { base_write( (sc_dt::int64)((src < 0 ) ? -1 : 0 )); } } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_lv_base& src, int low_i) { sc_dt::sc_unsigned tmp(src.length()); tmp = src >> low_i; base_write( tmp ); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_signed& src, int low_i) { base_write( (src >> low_i) ); } SC_TEMPLATE inline void sc_signal >::concat_set( const sc_dt::sc_unsigned& src, int low_i) { base_write( (src >> low_i) ); } SC_TEMPLATE inline void sc_signal >::concat_set(sc_dt::uint64 src, int low_i) { base_write( (sc_dt::uint64)(( low_i < 64 ) ? src >> low_i : 0)); } SC_TEMPLATE // Return the default event for this object instance. inline const sc_event& sc_signal >::default_event() const { return base_value_changed_event(); } SC_TEMPLATE // Return true if a changed event happened in the last delta cycle. inline bool sc_signal >::event() const { return base_event(); } SC_TEMPLATE // Return a reference to the value of this object instance. inline const sc_dt::sc_bigint& sc_signal >::get_data_ref() const { return *this; } SC_TEMPLATE // Return a pointer to this object instance. inline sc_signal >& sc_signal >::get_signal() { return *this; } SC_TEMPLATE // Return a kind value of "sc_signal". inline const char* sc_signal >::kind() const { return "sc_signal"; } //------------------------------------------------------------------------------ //"sc_signal >::operator () // // This operator returns a part selection of this object instance. // left = left-hand bit of the selection. // right = right-hand bit of the selection. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_signed_sigref& sc_signal >::operator () (int left, int right) { sc_signed_sigref* result_p; // Value to return. result_p = sc_signed_sigref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } //------------------------------------------------------------------------------ //"sc_signal >::operator []" // // This operator returns a bit selection of this object instance. // i = bit to be selected. //------------------------------------------------------------------------------ SC_TEMPLATE inline sc_signed_sigref& sc_signal >::operator [] ( int bit ) { return operator () (bit,bit); } SC_TEMPLATE inline void sc_signal >::operator = ( const this_type& new_val ) { base_write( new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const char* new_val ) { sc_dt::sc_bigint tmp = new_val; m_new_val = tmp; request_update(); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::uint64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( sc_dt::int64 new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned int new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned long new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( unsigned short new_val ) { base_write((sc_dt::int64)new_val); } SC_TEMPLATE template inline void sc_signal >::operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); base_write(temp); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_unsigned& new_val ) { base_write(new_val); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_bv_base& new_val ) { base_write( (sc_dt::sc_bigint)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_lv_base& new_val ) { base_write( (sc_dt::sc_bigint)new_val ); } SC_TEMPLATE inline void sc_signal >::operator = ( const sc_dt::sc_signed& new_val ) { base_write(new_val); } SC_TEMPLATE // Return a pointer to the read target for part selections. inline sc_dt::sc_signed* sc_signal >::part_read_target() { return this; } SC_TEMPLATE // Return this object's base value as a const reference. inline const sc_dt::sc_bigint& sc_signal >::read() const { return *this; } SC_TEMPLATE // Read a portion of a value. inline sc_dt::sc_signed sc_signal >::read_part( int left, int right ) const { return (sc_dt::sc_signed)sc_dt::sc_signed::operator () (left, right); } SC_TEMPLATE // Register a port for write checking. inline void sc_signal >::register_port( sc_port_base& port_, const char* if_typename_ ) { # ifdef DEBUG_SYSTEMC std::string nm( if_typename_ ); if( nm == typeid( sc_signal_inout_if > ).name() ) { if( m_output_p != 0 ) { sc_signal_invalid_writer( name(), kind(), m_output_p->name(), port_.name() ); } m_output_p = &port_; } # else if ( port_.name() && if_typename_ ) {} // Silence unused args warning. # endif } SC_TEMPLATE // Autogenerated name object instance constructor. inline sc_signal >::sc_signal() : sc_prim_channel(sc_gen_unique_name( "signal" )), m_changed_event_p(0), m_new_val(W), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Explicitly named object instance constructor. inline sc_signal >::sc_signal(const char* name_) : sc_prim_channel(name_), m_changed_event_p(0), m_new_val(W), m_output_p(0), m_writer_p(0) { } SC_TEMPLATE // Object instance destructor. inline sc_signal >::~sc_signal() { if ( m_changed_event_p ) delete m_changed_event_p; } SC_TEMPLATE // Update the current value from new value. inline void sc_signal >::update() { if ( m_changed_event_p ) { if ( m_new_val != *this ) { m_changed_event_p->notify_delayed(); m_event_delta = simcontext()->delta_count(); } } sc_dt::sc_signed::operator = (m_new_val); } SC_TEMPLATE // Return the value changed event. inline const sc_event& sc_signal >::value_changed_event() const { return base_value_changed_event(); } SC_TEMPLATE // Write a sc_in > value to this object instance. inline void sc_signal >::write( const sc_in >& value ) { base_write( value ); } SC_TEMPLATE // Write a sc_inout > value to this object instance. inline void sc_signal >::write( const sc_inout >& value ) { base_write( value ); } SC_TEMPLATE // Write a sc_dt::sc_bigint value to this object instance. inline void sc_signal >::write( const sc_dt::sc_bigint& value ) { base_write( value); } SC_TEMPLATE // Select a portion of a value. inline sc_signed_sigref& sc_signal >::select_part( int left, int right) { sc_signed_sigref* result_p = sc_signed_sigref::m_pool.allocate(); result_p->initialize(dynamic_cast(this), left, right); return *result_p; } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part(sc_dt::int64 v, int left, int right) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part(sc_dt::uint64 v, int left, int right) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( const sc_dt::sc_signed& v, int left, int right ) { m_new_val(left, right) = v; request_update(); } SC_TEMPLATE // Write a portion of a value. If this is the first write in // a delta cycle we copy the existing value before setting the bits. inline void sc_signal >::write_part( const sc_dt::sc_unsigned& v, int left, int right ) { m_new_val(left, right) = v; request_update(); } //============================================================================== // CLASS sc_in > // // This class implements an input port whose target acts like an sc_dt::sc_bigint data // value. This class is a specialization of the generic sc_in class to // implement tailored support for the sc_dt::sc_bigint class. //============================================================================== SC_TEMPLATE class sc_in > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_bigint data_type; typedef sc_signal_in_if > if_type; typedef sc_port base_type; typedef sc_in > this_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if > inout_if_type; typedef sc_inout > inout_port_type; public: // bind methods and operators: void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void operator () ( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) );} void bind( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( in_port_type& parent_ ) { sc_port_base::bind(parent_);} void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_);} protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_in() : base_type(), m_traces( 0 ) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ) {} // destructor virtual inline ~sc_in() { remove_traces(); } // bit and part selection sc_dt::sc_signed_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_signed_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_dt::sc_signed_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_signed_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_bigint& read() const { return (*this)->read(); } operator const sc_dt::sc_bigint& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &in_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_in"; } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } mutable sc_trace_params_vec* m_traces; private: // disabled sc_in( const sc_in >& ); sc_in >& operator = ( const sc_in >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_in >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_inout > // // This class implements an input/output port whose target acts like an // sc_dt::sc_bigint data value. It is derived from the sc_signed_in. This class is a // specialization of the generic sc_inout class to implement tailored support // for the sc_dt::sc_bigint class. //============================================================================== SC_TEMPLATE class sc_inout > : public sc_port >, 1, SC_ONE_OR_MORE_BOUND>, public sc_dt::sc_value_base { public: // typedefs typedef sc_dt::sc_bigint data_type; typedef sc_signal_inout_if > if_type; typedef sc_port base_type; typedef sc_inout > this_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // bind methods and operators: void bind( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void operator () ( const inout_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_) ); } void bind( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } void operator () ( inout_port_type& parent_ ) { sc_port_base::bind(parent_); } protected: // called by pbind (for internal use only) virtual inline int vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } virtual inline int vbind( sc_port_base& parent_ ) { inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // constructors public: sc_inout() : base_type(), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val_p(0), m_traces( 0 ) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val_p(0), m_traces( 0 ) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 ) {} // destructor virtual inline ~sc_inout() { remove_traces(); } // bit and part selection sc_dt::sc_signed_bitref_r operator [] ( int i ) const { return (*this)->read()[i]; } sc_dt::sc_signed_bitref_r bit( int i ) const { return (*this)->read()[i]; } sc_signed_sigref& operator [] ( int i ) { return (*this)->select_part(i,i); } sc_signed_sigref& bit( int i ) { return (*this)->select_part(i,i); } sc_dt::sc_signed_subref_r operator () ( int left, int right ) const { return (*this)->read()(left,right); } sc_dt::sc_signed_subref_r range( int left, int right ) const { return (*this)->read()(left,right); } sc_signed_sigref& operator () ( int left, int right ) { return (*this)->select_part(left,right); } sc_signed_sigref& range( int left, int right ) { return (*this)->select_part(left,right); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const sc_dt::sc_bigint& read() const { return (*this)->read(); } operator const sc_dt::sc_bigint& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return *new sc_event_finder_t( *this, &inout_if_type::value_changed_event ); } // reduction methods: inline bool and_reduce() const { return (*this)->read().and_reduce(); } inline bool nand_reduce() const { return (*this)->read().nand_reduce(); } inline bool nor_reduce() const { return (*this)->read().nor_reduce(); } inline bool or_reduce() const { return (*this)->read().or_reduce(); } inline bool xnor_reduce() const { return (*this)->read().xnor_reduce(); } inline bool xor_reduce() const { return (*this)->read().xor_reduce(); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual inline void end_of_elaboration() { if( m_init_val_p != 0 ) { (*this)->write( *m_init_val_p ); delete m_init_val_p; m_init_val_p = 0; } if( m_traces != 0 ) { for( unsigned int i = 0; i < m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; sc_trace( p->tf, read(), p->name ); } remove_traces(); } } virtual inline const char* kind() const { return "sc_inout"; } // value initialization inline void initialize( const sc_dt::sc_bigint& value_ ) { inout_if_type* iface = dynamic_cast( this->get_interface() ); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val_p == 0 ) { m_init_val_p = new sc_dt::sc_bigint; } *m_init_val_p = value_; } } // called by sc_trace void add_trace( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } // concatenation methods virtual inline int concat_length(bool* xz_present_p) const { return (*this)->read().concat_length( xz_present_p ); } virtual inline sc_dt::uint64 concat_get_uint64() const { return (*this)->read().concat_get_uint64(); } virtual inline bool concat_get_ctrl( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_ctrl(dst_p, low_i); } virtual inline bool concat_get_data( sc_dt::sc_digit* dst_p, int low_i ) const { return (*this)->read().concat_get_data(dst_p, low_i); } virtual inline void concat_set(sc_dt::int64 src, int low_i) { *this = (src >> ((low_i < 64) ? low_i : 63)); } #if 0 // #### virtual inline void concat_set(const sc_dt::sc_lv_base& src, int low_i) { *this = src >> low_i; } #endif // 0 #### virtual inline void concat_set(const sc_dt::sc_signed& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(const sc_dt::sc_unsigned& src, int low_i) { *this = (src >> low_i); } virtual inline void concat_set(sc_dt::uint64 src, int low_i) { *this = ((low_i < 64) ? (src >> low_i) : (sc_dt::uint64)0); } public: // assignment operators: inline void operator = ( const this_type& new_val ) { (*this)->write( new_val.read() ); } inline void operator = ( const char* new_val ) { sc_dt::sc_signed aa(W); aa = new_val; (*this)->write( aa ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write(new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::int64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); (*this)->write(temp); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_bigint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_bigint)new_val); } inline void write( const sc_in >& new_val ) { (*this)->write( new_val.read() ); } inline void write( const sc_inout >& new_val ) { (*this)->write( new_val.read() ); } inline void write( const sc_dt::sc_bigint& new_val ) { (*this)->write( new_val); } protected: void remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } sc_dt::sc_bigint* m_init_val_p; mutable sc_trace_params_vec* m_traces; private: // disabled sc_inout( const sc_inout >& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; SC_TEMPLATE inline std::ostream& operator << ( std::ostream& os, const sc_inout >& a ) { a.read().print( os ); return os; } //============================================================================== // CLASS sc_out > // // This class implements an output port whose target acts like an // sc_dt::sc_bigint data value. This class is a derivation of sc_inout, since // output ports are really no different from input/output ports. //============================================================================== SC_TEMPLATE class sc_out > : public sc_inout > { public: // typedefs typedef sc_dt::sc_bigint data_type; typedef sc_out this_type; typedef sc_inout base_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; // constructors sc_out() : base_type() {} explicit sc_out( const char* name_ ) : base_type( name_ ) {} explicit sc_out( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out( this_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual inline ~sc_out() {} // assignment operators: public: inline void operator = ( const this_type& new_val ) { (*this)->write( (const sc_dt::sc_signed&)new_val ); } inline void operator = ( const char* new_val ) { sc_dt::sc_signed aa(W); aa = new_val; (*this)->write( aa ); } inline void operator = ( sc_dt::uint64 new_val ) { (*this)->write(new_val); } inline void operator = ( sc_dt::int64 new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( short new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned int new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned long new_val ) { (*this)->write((sc_dt::uint64)new_val); } inline void operator = ( unsigned short new_val ) { (*this)->write((sc_dt::uint64)new_val); } template inline void operator = ( const sc_dt::sc_generic_base& new_val ) { sc_dt::sc_unsigned temp(W); new_val->to_sc_unsigned(temp); (*this)->write(temp); } inline void operator = ( const sc_dt::sc_signed& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_unsigned& new_val ) { (*this)->write(new_val); } inline void operator = ( const sc_dt::sc_bv_base& new_val ) { (*this)->write((sc_dt::sc_bigint)new_val); } inline void operator = ( const sc_dt::sc_lv_base& new_val ) { (*this)->write((sc_dt::sc_bigint)new_val); } private: // disabled sc_out( const this_type& ); }; //------------------------------------------------------------------------------ //"sc_signed_sigref::initialize" // // This method initializes an object instance from the supplied arguments. // if_p -> target of this selection. // left_ = left-most bit in selection. // right_ = right-most bit in selection. //------------------------------------------------------------------------------ inline void sc_signed_sigref::initialize( sc_signed_part_if* if_p, int left_, int right_ ) { m_if_p = if_p; m_left = left_; m_right = right_; m_obj_p = if_p->part_read_target(); } //------------------------------------------------------------------------------ //"sc_signed_sigref::operator =" // // These operators assign a value to the bits associated with this object // instance within this object instance's target signal. //------------------------------------------------------------------------------ inline void sc_signed_sigref::operator = ( sc_dt::uint64 v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_signed_sigref::operator = ( const char* v ) { sc_dt::sc_signed tmp(length()); tmp = v; *this = tmp; } inline void sc_signed_sigref:: operator = ( sc_dt::int64 v ) { *this = (sc_dt::uint64)v; } inline void sc_signed_sigref:: operator = ( int v ) { *this = (sc_dt::uint64)v; } inline void sc_signed_sigref:: operator = ( long v ) { *this = (sc_dt::uint64)v; } inline void sc_signed_sigref:: operator = ( unsigned int v ) { *this = (sc_dt::uint64)v; } inline void sc_signed_sigref:: operator = ( unsigned long v ) { *this = (sc_dt::uint64)v; } template inline void sc_signed_sigref:: operator = ( const sc_dt::sc_generic_base& v ) { sc_dt::sc_unsigned temp(m_left-m_right+1); v->to_sc_unsigned(temp); m_if_p->write_part( temp, m_left, m_right ); } inline void sc_signed_sigref:: operator = ( const sc_dt::sc_signed& v ) { m_if_p->write_part( v, m_left, m_right ); } inline void sc_signed_sigref:: operator = ( const sc_dt::sc_unsigned& v ) { m_if_p->write_part( v, m_left, m_right ); } void sc_signed_sigref::operator = ( const sc_signed_sigref& v ) { *this = (sc_dt::sc_unsigned)v; } #undef SC_TEMPLATE } // namespace sc_core #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) #pragma GCC diagnostic pop #endif #endif // !defined(SC_SIGNAL_SIGNED_H) systemc-2.3.4/examples/sysc/2.1/specialized_signals/main.cpp0000644000175000017500000002025214342422106023631 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- Example program for specialized signal support. Original Author: Andy Goodrich, Forte Design Systems, 11 April 2005 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "scx_signal_int.h" #include "scx_signal_signed.h" #include "scx_signal_uint.h" #include "scx_signal_unsigned.h" #define DISPLAY(exp,base) cout << #exp << " = " << base << exp << endl; #define TEST(exp1,exp2,base) \ if ( exp1 != exp2 ) \ { \ cout << #exp1 << "(" << base << exp1 << ") != " \ << #exp2 << "(" << base << exp2 << ")" << endl; \ } SC_MODULE(DUT) { SC_CTOR(DUT) { SC_THREAD(exec) sensitive << m_clk.pos(); // CONNECT PORTS TO THEIR BACKING SIGNALS: m_in_bigint4(m_back_in_bigint4); m_inout_bigint4(m_back_inout_bigint4); m_in_biguint4(m_back_in_biguint4); m_inout_biguint4(m_back_inout_biguint4); m_in_int4(m_back_in_int4); m_inout_int4(m_back_inout_int4); m_in_uint4(m_back_in_uint4); m_inout_uint4(m_back_inout_uint4); } void exec() { // TEST RIGHT HAND CONCATENATION: m_back_in_bigint4 = 1; m_back_inout_bigint4 = 2; m_back_in_biguint4 = 3; m_back_inout_biguint4 = 4; m_back_in_int4 = 5; m_back_inout_int4 = 6; m_back_in_uint4 = 7; m_back_inout_uint4 = 8; wait(); DISPLAY(( m_in_bigint4, m_inout_bigint4, m_in_biguint4, m_inout_biguint4, m_in_int4, m_inout_int4, m_in_uint4, m_inout_uint4 ),hex); m_signal_bigint8 = ( m_in_bigint4,m_inout_uint4); m_signal_biguint8 = ( m_inout_bigint4,m_in_uint4); m_signal_int8 = ( m_in_biguint4,m_inout_int4); m_signal_uint8 = ( m_inout_biguint4,m_in_int4); wait(); DISPLAY(m_signal_bigint8,hex); DISPLAY(m_signal_biguint8,hex); DISPLAY(m_signal_int8,hex); DISPLAY(m_signal_uint8,hex); // TEST LEFT HAND CONCATENATION: (m_inout_uint4,m_signal_biguint8) = 0x123; wait(); (m_signal_bigint8,m_inout_bigint4) = (m_inout_uint4,m_signal_biguint8); (m_signal_biguint8,m_inout_biguint4) = 0x456; (m_inout_int4,m_signal_int8) = 0x978; (m_inout_uint4,m_signal_uint8) = 0xcab; wait(); DISPLAY(m_signal_bigint8,hex); DISPLAY(m_inout_bigint4,hex); DISPLAY(m_signal_biguint8,hex); DISPLAY(m_inout_biguint4,hex); DISPLAY(m_signal_int8,hex); DISPLAY(m_inout_int4,hex); DISPLAY(m_signal_uint8,hex); DISPLAY(m_inout_uint4,hex); // TEST MATH OPERATIONS: // // Note there is not need to call .read() methods! m_nb_signal_bigint8 = -1; m_nb_signal_biguint8 = 255; m_nb_signal_int8 = -2; m_nb_signal_uint8 = 128; m_signal_bigint8 = -1; m_signal_biguint8 = 255; m_signal_int8 = -2; m_signal_uint8 = 128; wait(); TEST(m_signal_bigint8*m_signal_biguint8, m_nb_signal_bigint8*m_nb_signal_biguint8,dec); TEST(m_signal_bigint8*m_signal_uint8, m_nb_signal_bigint8*m_nb_signal_uint8,dec); TEST(m_signal_int8*m_signal_biguint8, m_nb_signal_int8*m_nb_signal_biguint8,dec); TEST(m_signal_int8*m_signal_uint8, m_nb_signal_int8*m_nb_signal_uint8,dec); TEST(m_signal_bigint8+m_signal_biguint8, m_nb_signal_bigint8+m_nb_signal_biguint8,dec); TEST(m_signal_bigint8+m_signal_uint8, m_nb_signal_bigint8+m_nb_signal_uint8,dec); TEST(m_signal_int8+m_signal_biguint8, m_nb_signal_int8+m_nb_signal_biguint8,dec); TEST(m_signal_int8+m_signal_uint8, m_nb_signal_int8+m_nb_signal_uint8,dec); TEST(m_signal_bigint8-m_signal_biguint8, m_nb_signal_bigint8-m_nb_signal_biguint8,dec); TEST(m_signal_bigint8-m_signal_uint8, m_nb_signal_bigint8-m_nb_signal_uint8,dec); TEST(m_signal_int8-m_signal_biguint8, m_nb_signal_int8-m_nb_signal_biguint8,dec); TEST(m_signal_int8-m_signal_uint8, m_nb_signal_int8-m_nb_signal_uint8,dec); TEST(m_signal_int8+m_signal_uint8*m_signal_bigint8-m_signal_biguint8, m_nb_signal_int8+m_nb_signal_uint8*m_nb_signal_bigint8-m_nb_signal_biguint8,dec); m_nb_in_bigint4 = -1; m_nb_in_biguint4 = 15; m_nb_in_int4 = -2; m_nb_in_uint4 = 8; m_back_in_bigint4 = -1; m_back_in_biguint4 = 15; m_back_in_int4 = -2; m_back_in_uint4 = 8; wait(); TEST(m_in_bigint4*m_in_biguint4, m_nb_in_bigint4*m_nb_in_biguint4,dec); TEST(m_in_bigint4*m_in_uint4, m_nb_in_bigint4*m_nb_in_uint4,dec); TEST(m_in_int4*m_in_biguint4, m_nb_in_int4*m_nb_in_biguint4,dec); TEST(m_in_int4*m_in_uint4, m_nb_in_int4*m_nb_in_uint4,dec); TEST(m_in_bigint4+m_in_biguint4, m_nb_in_bigint4+m_nb_in_biguint4,dec); TEST(m_in_bigint4+m_in_uint4, m_nb_in_bigint4+m_nb_in_uint4,dec); TEST(m_in_int4+m_in_biguint4, m_nb_in_int4+m_nb_in_biguint4,dec); TEST(m_in_int4+m_in_uint4, m_nb_in_int4+m_nb_in_uint4,dec); TEST(m_in_bigint4-m_in_biguint4, m_nb_in_bigint4-m_nb_in_biguint4,dec); TEST(m_in_bigint4-m_in_uint4, m_nb_in_bigint4-m_nb_in_uint4,dec); TEST(m_in_int4-m_in_biguint4, m_nb_in_int4-m_nb_in_biguint4,dec); TEST(m_in_int4-m_in_uint4, m_nb_in_int4-m_nb_in_uint4,dec); TEST(m_in_int4+m_in_uint4*m_in_bigint4-m_in_biguint4, m_nb_in_int4+m_nb_in_uint4*m_nb_in_bigint4-m_nb_in_biguint4,dec); sc_stop(); } sc_in m_clk; sc_signal > m_back_in_bigint4; sc_signal > m_back_inout_bigint4; sc_signal > m_back_in_biguint4; sc_signal > m_back_inout_biguint4; sc_signal > m_back_in_int4; sc_signal > m_back_inout_int4; sc_signal > m_back_in_uint4; sc_signal > m_back_inout_uint4; sc_in > m_in_bigint4; sc_inout > m_inout_bigint4; sc_signal > m_signal_bigint8; sc_in > m_in_biguint4; sc_inout > m_inout_biguint4; sc_signal > m_signal_biguint8; sc_in > m_in_int4; sc_inout > m_inout_int4; sc_signal > m_signal_int8; sc_in > m_in_uint4; sc_inout > m_inout_uint4; sc_signal > m_signal_uint8; sc_bigint<4> m_nb_in_bigint4; sc_bigint<4> m_nb_inout_bigint4; sc_bigint<8> m_nb_signal_bigint8; sc_biguint<4> m_nb_in_biguint4; sc_biguint<4> m_nb_inout_biguint4; sc_biguint<8> m_nb_signal_biguint8; sc_int<4> m_nb_in_int4; sc_int<4> m_nb_inout_int4; sc_int<8> m_nb_signal_int8; sc_uint<4> m_nb_in_uint4; sc_uint<4> m_nb_inout_uint4; sc_uint<8> m_nb_signal_uint8; }; int sc_main( int , char* [] ) { sc_clock clock; DUT dut("dut"); dut.m_clk(clock); sc_start(); return 0; } systemc-2.3.4/examples/sysc/2.1/specialized_signals/golden.log0000644000175000017500000000065714342422106024163 0ustar carstencarsten( m_in_bigint4, m_inout_bigint4, m_in_biguint4, m_inout_biguint4, m_in_int4, m_inout_int4, m_in_uint4, m_inout_uint4 ) = 012345678 m_signal_bigint8 = 18 m_signal_biguint8 = 027 m_signal_int8 = 36 m_signal_uint8 = 045 m_signal_bigint8 = 12 m_inout_bigint4 = 3 m_signal_biguint8 = 045 m_inout_biguint4 = 06 m_signal_int8 = 78 m_inout_int4 = 9 m_signal_uint8 = 0ab m_inout_uint4 = 0c Info: /OSCI/SystemC: Simulation stopped by user. systemc-2.3.4/examples/sysc/2.1/specialized_signals/scx_signal_uint.cpp0000644000175000017500000001412214342422106026075 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_uint.cpp -- The sc_signal > implementations. Original Author: Andy Goodrich, Forte Design Systems, 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* $Log: scx_signal_uint.cpp,v $ Revision 1.3 2011/08/26 22:28:29 acg Torsten Maehne: eliminate unused argument warnings. Revision 1.2 2011/08/15 16:43:24 acg Torsten Maehne: changes to remove unused argument warnings. Revision 1.1.1.1 2006/12/15 20:20:03 acg SystemC 2.3 Revision 1.2 2005/12/26 20:11:14 acg Fixed up copyright. Revision 1.1.1.1 2005/12/19 23:16:42 acg First check in of SystemC 2.1 into its own archive. Revision 1.16 2005/09/15 23:01:52 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.15 2005/05/03 19:52:26 acg Get proper header locations on includes. Revision 1.14 2005/05/03 19:50:20 acg Name space version. Revision 1.11 2005/04/11 19:05:36 acg Change to sc_clock for Microsoft VCC 6.0. Changes for namespaces Revision 1.10 2005/04/03 22:52:52 acg Namespace changes. Revision 1.9 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.8 2004/09/27 21:01:59 acg Andy Goodrich - Forte Design Systems, Inc. - This is specialized signal support that allows better use of signals and ports whose target value is a SystemC native type. */ #include "sysc/utils/sc_temporary.h" #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_signal_ports.h" #include "sysc/communication/sc_signal.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_macros.h" #include "sysc/tracing/sc_trace.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/int/sc_int.h" #include "sysc/datatypes/int/sc_uint.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "./scx_signal_uint.h" #include namespace sc_core { //------------------------------------------------------------------------------ // POOL OF TEMPORARY INSTANCES OF sc_uint_sigref // // This allows use to pass const references for part and bit selections // on sc_signal > object instances. //------------------------------------------------------------------------------ sc_vpool sc_uint_sigref::m_pool(8); //------------------------------------------------------------------------------ //"sc_uint_part_if::default methods" // // These versions just produce errors if they are not overloaded but used. //------------------------------------------------------------------------------ sc_dt::sc_uint_base* sc_uint_part_if::part_read_target() { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_dt::uint64 sc_uint_part_if::read_part( int /*left*/, int /*right*/ ) const { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); return 0; } sc_uint_sigref& sc_uint_part_if::select_part( int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); sc_core::sc_abort(); // can't recover from here } void sc_uint_part_if::write_part( sc_dt::uint64 /*v*/, int /*left*/, int /*right*/ ) { SC_REPORT_ERROR( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, "int" ); } //------------------------------------------------------------------------------ //"sc_uint_sigref::concate_set" // // These methods assign this object instance's value from the supplied // value starting at the supplied bit within that value. // src = value to use to set this object instance's value. // low_i = bit in src that is to be the low order bit of the value to set. // #### OPTIMIZE //------------------------------------------------------------------------------ void sc_uint_sigref::concat_set(sc_dt::int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_uint_sigref::concat_set(const sc_dt::sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src < 0) ? (sc_dt::uint64)-1 : 0; } void sc_uint_sigref::concat_set(const sc_dt::sc_lv_base& src, int low_i) { if ( low_i < src.length() ) *this = (src >> low_i).to_uint64(); else *this = 0; } void sc_uint_sigref::concat_set(const sc_dt::sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_uint_sigref::concat_set(sc_dt::uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } } // namespace sc_core systemc-2.3.4/examples/sysc/2.1/specialized_signals/Makefile0000644000175000017500000000031114342422106023633 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = specialized_signals SRCS = $(wildcard *.cpp) OBJS = $(SRCS:.cpp=.o) include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/0000755000175000017500000000000014342422106022110 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/scx_mutex_w_policy.cpp0000644000175000017500000001010614342422106026536 0ustar carstencarsten//**************************************************************************** //**************************************************************************** // // Copyright (c) 2002 Thorsten Groetker, Stan Liao, Grant Martin, Stuart Swan // // Permission is hereby granted to use, modify, and distribute this source // code in any way as long as this entire copyright notice is retained // in unmodified form within the source code. // // This software is distributed on an "AS IS" basis, without warranty // of any kind, either express or implied. // // This source code is from the book "System Design with SystemC". // For detailed discussion on this example, see the relevant section // within the "System Design with SystemC" book. // // To obtain the book and find additional source code downloads, etc., visit // www.accellera.org // Look in the "Products & Solutions" -> "SystemC Books". Then look at the // entry for "System Design with SystemC". // //**************************************************************************** //**************************************************************************** // $Log: scx_mutex_w_policy.cpp,v $ // Revision 1.3 2011/08/26 22:26:05 acg // Torsten Maehne: eliminated unused argument warnings. // // Revision 1.2 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.1.1.1 2006/12/15 20:20:03 acg // SystemC 2.3 // // Revision 1.3 2006/03/21 01:31:34 acg // Andy Goodrich: changed over to sc_get_current_process_b() from // sc_get_current_process_base() since the function's name changed. // // Revision 1.2 2006/02/04 00:09:35 acg // Andy Goodrich: changed over to sc_get_current_process_b() from // sc_get_curr_process_handle() to eliminate deprecation warning. // // Specialization of sc_mutex to allow FIFO or true RANDOM // arbitration policies when more than one process is // contending for the mutex // // This mutex is also significantly more efficient than sc_mutex // if there is a lot of actual contention for ownership of the mutex, // since only the process that actually acquires the mutex is resumed. // // See section 7.4, page 120 of "System Design with SystemC" for // additional discussion #include class scx_mutex_w_policy : public sc_mutex { public: enum policy_type { FIFO, RANDOM }; explicit scx_mutex_w_policy(policy_type policy) : policy_(policy) {} virtual int lock() { if (in_use()) { sc_event my_event; event_list.push_back(&my_event); wait(my_event); } m_owner = sc_get_current_process_b(); return 0; } virtual int unlock() { if (m_owner != sc_get_current_process_b()) return -1; m_owner = 0; sc_event* e = next_event(); if (e) e->notify(); return 0; } private: sc_event* next_event() { if (event_list.empty()) return 0; if (policy_ == FIFO) { return event_list.pop_front(); } else { // RANDOM sc_plist_iter ev_itr(&event_list); int index = rand() % event_list.size(); for (int i = 0; i < index; i++) ev_itr++; sc_event* e = ev_itr.get(); ev_itr.remove(); return e; } } sc_plist event_list; policy_type policy_; }; class top : public sc_module { public: SC_HAS_PROCESS(top); top(sc_module_name name) : sc_module(name), mutex_(scx_mutex_w_policy::FIFO) { SC_THREAD(t1); SC_THREAD(t2); SC_THREAD(t3); } void t1() { wait(1, SC_NS); mutex_.lock(); cout << "t1 got mutex at " << sc_time_stamp() << endl; wait(10, SC_NS); mutex_.unlock(); } void t2() { wait(2, SC_NS); mutex_.lock(); cout << "t2 got mutex at " << sc_time_stamp() << endl; wait(10, SC_NS); mutex_.unlock(); } void t3() { wait(3, SC_NS); mutex_.lock(); cout << "t3 got mutex at " << sc_time_stamp() << endl; wait(10, SC_NS); mutex_.unlock(); } private: scx_mutex_w_policy mutex_; }; int sc_main (int, char*[]) { top top1("Top1"); sc_start(1000, SC_NS); cout << endl << endl; return 0; } systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/test.am0000644000175000017500000000563214342422106023414 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/scx_mutex_w_policy ## %C%: 2_1_scx_mutex_w_policy examples_TESTS += 2.1/scx_mutex_w_policy/test 2_1_scx_mutex_w_policy_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_scx_mutex_w_policy_test_SOURCES = \ $(2_1_scx_mutex_w_policy_H_FILES) \ $(2_1_scx_mutex_w_policy_CXX_FILES) examples_BUILD += \ $(2_1_scx_mutex_w_policy_BUILD) examples_CLEAN += \ 2.1/scx_mutex_w_policy/run.log \ 2.1/scx_mutex_w_policy/expected_trimmed.log \ 2.1/scx_mutex_w_policy/run_trimmed.log \ 2.1/scx_mutex_w_policy/diff.log examples_FILES += \ $(2_1_scx_mutex_w_policy_H_FILES) \ $(2_1_scx_mutex_w_policy_CXX_FILES) \ $(2_1_scx_mutex_w_policy_BUILD) \ $(2_1_scx_mutex_w_policy_EXTRA) examples_DIRS += 2.1/scx_mutex_w_policy ## example-specific details 2_1_scx_mutex_w_policy_H_FILES = 2_1_scx_mutex_w_policy_CXX_FILES = \ 2.1/scx_mutex_w_policy/scx_mutex_w_policy.cpp 2_1_scx_mutex_w_policy_BUILD = \ 2.1/scx_mutex_w_policy/golden.log 2_1_scx_mutex_w_policy_EXTRA = \ 2.1/scx_mutex_w_policy/scx_mutex_w_policy.sln \ 2.1/scx_mutex_w_policy/scx_mutex_w_policy.vcxproj \ 2.1/scx_mutex_w_policy/CMakeLists.txt \ 2.1/scx_mutex_w_policy/Makefile #2_1_scx_mutex_w_policy_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/scx_mutex_w_policy.sln0000644000175000017500000000231614342422106026554 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scx_mutex_w_policy", "scx_mutex_w_policy.vcxproj", "{3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|Win32.ActiveCfg = Debug|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|Win32.Build.0 = Debug|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|x64.ActiveCfg = Debug|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Debug|x64.Build.0 = Debug|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|Win32.ActiveCfg = Release|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|Win32.Build.0 = Release|Win32 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|x64.ActiveCfg = Release|x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/CMakeLists.txt0000644000175000017500000000357614342422106024663 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/scx_mutex_w_policy/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (scx_mutex_w_policy scx_mutex_w_policy.cpp) target_link_libraries (scx_mutex_w_policy SystemC::systemc) configure_and_add_test (scx_mutex_w_policy) systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/golden.log0000644000175000017500000000010314342422106024055 0ustar carstencarstent1 got mutex at 1 ns t2 got mutex at 11 ns t3 got mutex at 21 ns systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/scx_mutex_w_policy.vcxproj0000644000175000017500000002745214342422106027463 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {3185F80B-4CE8-4649-A7F0-A37FA5DA6F3C} scx_mutex_w_policy Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/scx_mutex_w_policy/Makefile0000644000175000017500000000025114342422106023546 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = scx_mutex_w_policy OBJS = $(PROJECT).o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/scx_barrier/0000755000175000017500000000000014342422106020467 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/scx_barrier/test.am0000644000175000017500000000533214342422106021770 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/scx_barrier ## %C%: 2_1_scx_barrier examples_TESTS += 2.1/scx_barrier/test 2_1_scx_barrier_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_scx_barrier_test_SOURCES = \ $(2_1_scx_barrier_H_FILES) \ $(2_1_scx_barrier_CXX_FILES) examples_BUILD += \ $(2_1_scx_barrier_BUILD) examples_CLEAN += \ 2.1/scx_barrier/run.log \ 2.1/scx_barrier/expected_trimmed.log \ 2.1/scx_barrier/run_trimmed.log \ 2.1/scx_barrier/diff.log examples_FILES += \ $(2_1_scx_barrier_H_FILES) \ $(2_1_scx_barrier_CXX_FILES) \ $(2_1_scx_barrier_BUILD) \ $(2_1_scx_barrier_EXTRA) examples_DIRS += 2.1/scx_barrier ## example-specific details 2_1_scx_barrier_H_FILES = \ 2.1/scx_barrier/scx_barrier.h 2_1_scx_barrier_CXX_FILES = \ 2.1/scx_barrier/main.cpp 2_1_scx_barrier_BUILD = \ 2.1/scx_barrier/golden.log 2_1_scx_barrier_EXTRA = \ 2.1/scx_barrier/scx_barrier.sln \ 2.1/scx_barrier/scx_barrier.vcxproj \ 2.1/scx_barrier/CMakeLists.txt \ 2.1/scx_barrier/Makefile #2_1_scx_barrier_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/scx_barrier/scx_barrier.sln0000644000175000017500000000230014342422106023503 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scx_barrier", "scx_barrier.vcxproj", "{59B66B48-2280-4933-B940-9526B4FA4E7B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|Win32.ActiveCfg = Debug|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|Win32.Build.0 = Debug|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|x64.ActiveCfg = Debug|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Debug|x64.Build.0 = Debug|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|Win32.ActiveCfg = Release|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|Win32.Build.0 = Release|Win32 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|x64.ActiveCfg = Release|x64 {59B66B48-2280-4933-B940-9526B4FA4E7B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/scx_barrier/scx_barrier.vcxproj0000644000175000017500000002753414342422106024422 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {59B66B48-2280-4933-B940-9526B4FA4E7B} scx_barrier Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/scx_barrier/scx_barrier.h0000644000175000017500000000502414342422106023144 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_barrier.h -- Barrier Process Synchronization Definition Original Author: Andy Goodrich, Forte Design Systems, 5 May 2003 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef SCX_BARRIER_H #define SCX_BARRIER_H namespace sc_core { // ----------------------------------------------------------------------------- // CLASS scx_barrier // // This class provides a way of synchronising a set of processes. Each process // calls the wait() method and one all processes have called that method they // will all be released for execution. // ----------------------------------------------------------------------------- class scx_barrier { public: void initialize( int thread_n ) { m_thread_n = thread_n; } void wait() { m_thread_n--; if ( m_thread_n ) { ::sc_core::wait(m_barrier_event); } else { m_barrier_event.notify(SC_ZERO_TIME); ::sc_core::wait(m_barrier_event); } } protected: sc_event m_barrier_event; // Event to wait on. int m_thread_n; // # of threads left to wait. }; } // namespace sc_core #endif // SCX_BARRIER_H systemc-2.3.4/examples/sysc/2.1/scx_barrier/CMakeLists.txt0000644000175000017500000000354214342422106023233 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/scx_barrier/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (scx_barrier main.cpp scx_barrier.h) target_link_libraries (scx_barrier SystemC::systemc) configure_and_add_test (scx_barrier) systemc-2.3.4/examples/sysc/2.1/scx_barrier/main.cpp0000644000175000017500000000474714342422106022133 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scx_barrier.cpp -- This example demonstrates the proposed scx_barrier class that provides execution synchronization between threads. Each thread in the "thread pool" of an scx_barrier object instance waits on the scx_barrier object instance. When all the threads in the thread pool are waiting, they will all be dispatched. Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "scx_barrier.h" using sc_core::scx_barrier; SC_MODULE(X) { SC_CTOR(X) { SC_THREAD(a); SC_THREAD(b); SC_THREAD(c); m_barrier.initialize(3); } void a() { wait(5.0, SC_NS); m_barrier.wait(); printf("%f - a\n", sc_time_stamp().to_double()); } void b() { wait(11.0, SC_NS); m_barrier.wait(); printf("%f - b\n", sc_time_stamp().to_double()); } void c() { m_barrier.wait(); printf("%f - c\n", sc_time_stamp().to_double()); } scx_barrier m_barrier; }; int sc_main( int , char* [] ) { sc_clock clock; X x("x"); sc_start(1000, SC_NS); cout << "Program completed" << endl; return 0; } systemc-2.3.4/examples/sysc/2.1/scx_barrier/golden.log0000644000175000017500000000010514342422106022436 0ustar carstencarsten11000.000000 - c 11000.000000 - b 11000.000000 - a Program completed systemc-2.3.4/examples/sysc/2.1/scx_barrier/Makefile0000644000175000017500000000023414342422106022126 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = scx_barrier OBJS = main.o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/reset_signal_is/0000755000175000017500000000000014342422106021336 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/reset_signal_is/test.am0000644000175000017500000000550014342422106022634 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D% = 2.1/reset_signal_is ## %C% = 2.1_reset_signal_is examples_TESTS += 2.1/reset_signal_is/test 2_1_reset_signal_is_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_reset_signal_is_test_SOURCES = \ $(2_1_reset_signal_is_H_FILES) \ $(2_1_reset_signal_is_CXX_FILES) examples_BUILD += \ $(2_1_reset_signal_is_BUILD) examples_CLEAN += \ 2.1/reset_signal_is/run.log \ 2.1/reset_signal_is/expected_trimmed.log \ 2.1/reset_signal_is/run_trimmed.log \ 2.1/reset_signal_is/diff.log examples_FILES += \ $(2_1_reset_signal_is_H_FILES) \ $(2_1_reset_signal_is_CXX_FILES) \ $(2_1_reset_signal_is_BUILD) \ $(2_1_reset_signal_is_EXTRA) examples_DIRS += 2.1/reset_signal_is ## example-specific details 2_1_reset_signal_is_H_FILES = 2_1_reset_signal_is_CXX_FILES = \ 2.1/reset_signal_is/reset_signal_is.cpp 2_1_reset_signal_is_BUILD = \ 2.1/reset_signal_is/golden.log 2_1_reset_signal_is_EXTRA = \ 2.1/reset_signal_is/reset_signal_is.sln \ 2.1/reset_signal_is/reset_signal_is.vcxproj \ 2.1/reset_signal_is/CMakeLists.txt \ 2.1/reset_signal_is/Makefile #2_1_reset_signal_is_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/reset_signal_is/CMakeLists.txt0000644000175000017500000000355714342422106024110 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/reset_signal_is/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (reset_signal_is reset_signal_is.cpp) target_link_libraries (reset_signal_is SystemC::systemc) configure_and_add_test (reset_signal_is) systemc-2.3.4/examples/sysc/2.1/reset_signal_is/reset_signal_is.cpp0000644000175000017500000000665714342422106025232 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** reset_signal_is.cpp -- This example shows the use of the method sc_module::reset_signal_is() to provide reset semantics for a clocked thread (SC_CTHREAD). Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" SC_MODULE(CONSUMER) { SC_CTOR(CONSUMER) { SC_CTHREAD(consumer,m_clk.pos()); reset_signal_is(m_reset,false); } void consumer() { cout << sc_time_stamp() << ": reset" << endl; while (1) { m_ready = true; do { wait(); } while ( !m_valid); cout << sc_time_stamp() << ": " << m_value.read() << endl; } } sc_in_clk m_clk; sc_inout m_ready; sc_in m_reset; sc_in m_valid; sc_in m_value; }; SC_MODULE(PRODUCER) { SC_CTOR(PRODUCER) { SC_CTHREAD(producer,m_clk.pos()); reset_signal_is(m_reset,false); } void producer() { m_value = 0; while (1) { m_valid = true; do { wait(); } while (!m_ready); m_value = m_value + 1; } } sc_in_clk m_clk; sc_in m_ready; sc_in m_reset; sc_inout m_valid; sc_inout m_value; }; SC_MODULE(TESTBENCH) { SC_CTOR(TESTBENCH) : m_consumer("consumer"), m_producer("producer") { SC_CTHREAD(testbench,m_clk.pos()); m_consumer.m_clk(m_clk); m_consumer.m_ready(m_ready); m_consumer.m_reset(m_reset); m_consumer.m_valid(m_valid); m_consumer.m_value(m_value); m_producer.m_clk(m_clk); m_producer.m_ready(m_ready); m_producer.m_reset(m_reset); m_producer.m_valid(m_valid); m_producer.m_value(m_value); } void testbench() { for ( int state = 0; state < 100; state++ ) { m_reset = ( state%20 == 12 ) ? false : true; wait(); } sc_stop(); } sc_in_clk m_clk; CONSUMER m_consumer; PRODUCER m_producer; sc_signal m_ready; sc_signal m_reset; sc_signal m_valid; sc_signal m_value; }; int sc_main(int, char*[]) { sc_clock clock; TESTBENCH testbench("testbench"); testbench.m_clk(clock); sc_start(5000, SC_NS); cout << "Done" << endl; return 0; } systemc-2.3.4/examples/sysc/2.1/reset_signal_is/golden.log0000644000175000017500000000177014342422106023316 0ustar carstencarsten0 s: reset 1 ns: 0 2 ns: 1 3 ns: 2 4 ns: 3 5 ns: 4 6 ns: 5 7 ns: 6 8 ns: 7 9 ns: 8 10 ns: 9 11 ns: 10 12 ns: 11 13 ns: reset 14 ns: 0 15 ns: 1 16 ns: 2 17 ns: 3 18 ns: 4 19 ns: 5 20 ns: 6 21 ns: 7 22 ns: 8 23 ns: 9 24 ns: 10 25 ns: 11 26 ns: 12 27 ns: 13 28 ns: 14 29 ns: 15 30 ns: 16 31 ns: 17 32 ns: 18 33 ns: reset 34 ns: 0 35 ns: 1 36 ns: 2 37 ns: 3 38 ns: 4 39 ns: 5 40 ns: 6 41 ns: 7 42 ns: 8 43 ns: 9 44 ns: 10 45 ns: 11 46 ns: 12 47 ns: 13 48 ns: 14 49 ns: 15 50 ns: 16 51 ns: 17 52 ns: 18 53 ns: reset 54 ns: 0 55 ns: 1 56 ns: 2 57 ns: 3 58 ns: 4 59 ns: 5 60 ns: 6 61 ns: 7 62 ns: 8 63 ns: 9 64 ns: 10 65 ns: 11 66 ns: 12 67 ns: 13 68 ns: 14 69 ns: 15 70 ns: 16 71 ns: 17 72 ns: 18 73 ns: reset 74 ns: 0 75 ns: 1 76 ns: 2 77 ns: 3 78 ns: 4 79 ns: 5 80 ns: 6 81 ns: 7 82 ns: 8 83 ns: 9 84 ns: 10 85 ns: 11 86 ns: 12 87 ns: 13 88 ns: 14 89 ns: 15 90 ns: 16 91 ns: 17 92 ns: 18 93 ns: reset 94 ns: 0 95 ns: 1 96 ns: 2 97 ns: 3 98 ns: 4 99 ns: 5 100 ns: 6 Info: /OSCI/SystemC: Simulation stopped by user. Done systemc-2.3.4/examples/sysc/2.1/reset_signal_is/reset_signal_is.vcxproj0000644000175000017500000002744414342422106026140 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889} reset_signal_is Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/reset_signal_is/reset_signal_is.sln0000644000175000017500000000231014342422106025222 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reset_signal_is", "reset_signal_is.vcxproj", "{2B8E2069-D45C-4CE2-8D65-DBFB2B205889}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|Win32.ActiveCfg = Debug|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|Win32.Build.0 = Debug|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|x64.ActiveCfg = Debug|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Debug|x64.Build.0 = Debug|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|Win32.ActiveCfg = Release|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|Win32.Build.0 = Release|Win32 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|x64.ActiveCfg = Release|x64 {2B8E2069-D45C-4CE2-8D65-DBFB2B205889}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/reset_signal_is/Makefile0000644000175000017500000000024614342422106023000 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = reset_signal_is OBJS = $(PROJECT).o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/forkjoin/0000755000175000017500000000000014342422106020005 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/forkjoin/forkjoin.sln0000644000175000017500000000227214342422106022347 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "forkjoin", "forkjoin.vcxproj", "{44313F6B-8A94-43AE-BD81-4D7F6F8522F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|Win32.ActiveCfg = Debug|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|Win32.Build.0 = Debug|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|x64.ActiveCfg = Debug|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Debug|x64.Build.0 = Debug|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|Win32.ActiveCfg = Release|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|Win32.Build.0 = Release|Win32 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|x64.ActiveCfg = Release|x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/forkjoin/test.am0000644000175000017500000000520214342422106021302 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/forkjoin ## %C%: 2.1_forkjoin ## examples_TESTS += 2.1/forkjoin/test 2_1_forkjoin_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_forkjoin_test_SOURCES = \ $(2_1_forkjoin_H_FILES) \ $(2_1_forkjoin_CXX_FILES) examples_BUILD += \ $(2_1_forkjoin_BUILD) examples_CLEAN += \ 2.1/forkjoin/run.log \ 2.1/forkjoin/expected_trimmed.log \ 2.1/forkjoin/run_trimmed.log \ 2.1/forkjoin/diff.log examples_FILES += \ $(2_1_forkjoin_H_FILES) \ $(2_1_forkjoin_CXX_FILES) \ $(2_1_forkjoin_BUILD) \ $(2_1_forkjoin_EXTRA) examples_DIRS += 2.1/forkjoin ## example-specific details 2_1_forkjoin_H_FILES = 2_1_forkjoin_CXX_FILES = \ 2.1/forkjoin/forkjoin.cpp 2_1_forkjoin_BUILD = \ 2.1/forkjoin/golden.log 2_1_forkjoin_EXTRA = \ 2.1/forkjoin/forkjoin.sln \ 2.1/forkjoin/forkjoin.vcxproj \ 2.1/forkjoin/CMakeLists.txt \ 2.1/forkjoin/Makefile \ 2.1/forkjoin/README.txt #2_1_forkjoin_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/forkjoin/README.txt0000644000175000017500000002113714342422106021507 0ustar carstencarstenIn addition to processes created in sc_module constructors via the SC_METHOD and SC_THREAD macros, processes can also be created after simulation starts with the sc_spawn() API. The implementation uses (and ships) a part of the publicly available boost library (www.boost.org). In particular the boost::bind templates are used. User code must define the macro SC_INCLUDE_DYNAMIC_PROCESSES before including "systemc.h" in order for the right header files to get included. Language Constructs --- The user-visible constructs for dynamic process creation and synchronization are: sc_spawn(...) sc_spawn_options(...) SC_FORK SC_JOIN sc_process_handle::wait() sc_bind(...) sc_ref(...) sc_cref(...) Basic Usage of sc_spawn --- Given the following function and method declarations: returnT my_function( ARGS ); returnT my_class::my_method ( ARGS ); To spawn these, use: returnT r; my_class* c; c = this; // or point to some other object... sc_process_handle h1 = sc_spawn( &r, sc_bind(&my_class::my_method, c, ARGS )); sc_process_handle h2 = sc_spawn( &r, sc_bind(&my_function, ARGS )); Function Arguments --- A spawned function can have up to 9 arguments, a spawned class method up to 8 arguments (this restriction comes with the usage of boost bind library). Strict type checking of arguments is done. Arguments can by passed by value (default), per reference (use sc_ref) or per const reference (use sc_cref). Example: int my_function( double FA1, double &FA2, const double &FA2 ); int r; double A; sc_spawn( &r, sc_bind(&my_function, A, sc_ref(A), sc_cref(A)) ); If the spawned function returns no value, or if you do not wish to use the returned value, the first argument (r above) may be omitted: sc_spawn( sc_bind(&my_function, A, sc_ref(A), sc_cref(A)) ); If the first argument is included, the pointed to space must be kept valid until spawned function completes, at which point the returned value will be stored in the space. sc_spawn_options --- After the sc_bind() argument to sc_spawn() is specified, two more optional arguments can be specified to sc_spawn(). The second of these two optional arguments is a pointer to sc_spawn_options. sc_spawn_options can be used to control the spawning of a thread process or a method process, and to specify static sensitivity information and dont_initialize information for dynamic spawned processes, similar to static processes. For spawned threads, the stack size information can also be specified through sc_spawn_options. The sc_spawn_options class supports the following API: void set_stack_size(int stack_size); // specify stack size for threads, ignored for methods void spawn_method(); // spawn a method process, the default is a thread process void dont_initialize(); // don't schedule the spawned process for an initial execution, // by default it is scheduled for an initial execution void set_sensitivity(sc_event* e); // make spawned process statically sensitive to the event void set_sensitivity(sc_port_base* p); // make spawned process statically sensitive to the default event // of the interface bound to the port void set_sensitivity(sc_interface* i); // make spawned process statically sensitive to the default event // of the interface void set_sensitivity(sc_event_finder* f); // make spawned process statically sensitive to the event // returned by the find_event() member of the event finder Each of the set_sensitivity() methods can be called multiple times to indicate static sensitivity on multiple objects (e.g., specify sensitivity on events e1 and e2, and port p1). Naming a spawned process: --- The first of the 2 optional arguments that sc_spawn() accepts after the sc_bind() argument is "const char* proc_name". The "proc_name" argument can be provided to name the spawned process. A spawned process gets a hierarchical name similar to other sc_objects. If the user explicitly provides a name "proc_name" to sc_spawn(), the full name of the spawned process is "parent_name.proc_name", where "parent_name" is the full name of the parent sc_object that spawned the process. Note that, since a sc_spawn_options* argument must be provided in order to spawn a method process, a spawned method process must also be explicitly named by the user, otherwise the design won't compile. If the user spawns a thread process, and does not specify an explicit name, then the tool generates a name of the form "thread_p_N" where "N" is a number that indicates this is the "Nth" child thread of the direct parent, where names are not reused when children of the direct parent die. Note that if a currently executing process spawns another process, then the currently executing process is the direct parent of the spawned process. Synchronization ------- A Fork/Join construct is provided: SC_FORK sc_spawn(...) , sc_spawn(...) , ... SC_JOIN Please note that individual sc_spawn(...) sections are separated by commas and that there is no curly braces ("{","}") used, nor a semicolon at the end of SC_JOIN. The code will only wait until all spawned processes have returned. It is also possible to wait for an individual spawned process to finish with the sc_process_handle::wait() function: sc_process_handle h = sc_spawn(...); ... h.wait(); Note that SC_FORK/SC_JOIN as well as sc_process_handle::wait() indirectly calls wait(some_event) and therefore can only be used within a thread context. If you call SC_FORK/SC_JOIN within a method context or outside any process, then SystemC will produce a runtime error. It is also an error to call sc_process_handle::wait() on a handle associated with a spawned method process, because a method process never finishes. Similarly, SC_FORK-SC_JOIN cannot be used to spawn any method process. sc_spawn() merely creates a process and schedules it for an initial execution (unless dont_initialize is specified through sc_spawn_options) . It does NOT execute the process. The spawned process executes when control goes back to the scheduler. It is important to note that sc_spawn is a strict superset of the functionality available via the SC_THREAD and SC_METHOD macros. The SC_THREAD and SC_METHOD macros are retained for compatibility with earlier versions of SystemC. However in SystemC 2.1 and in future versions of SystemC, it is not possible to invoke the SC_THREAD and SC_METHOD macros after simulation starts. In addition, it IS possible to call sc_spawn both before, and after simulation starts. Example --- #define SC_INCLUDE_DYNAMIC_PROCESSES #include int function_method(double d) { cout << endl << sc_time_stamp() << ", " << sc_get_curr_process_handle()->name() << ": function_method sees " << d << endl; return int(d); } class module1 : public sc_module { private: sc_event& ev; public: SC_HAS_PROCESS(module1); module1(sc_module_name name, sc_event& event) : sc_module(name), ev(event) { int r; SC_THREAD(main); cout << endl << sc_time_stamp() << ": CTOR, Before spawning function_method" << endl; sc_spawn_options o1; o1.spawn_method(); o1.dont_initialize(); o1.set_sensitivity(&ev); sc_process_handle h4 = sc_spawn(&r, sc_bind(&function_method, 1.2345), "event_sensitive_method", &o1); } void main() { sc_event e1, e2, e3, e4; cout << endl << sc_time_stamp() << ", " << sc_get_curr_process_handle()->name() << ": main thread, Before spawning round robin threads." << endl << endl; e1.notify(100, SC_NS); // Spawn several threads that co-operatively execute in round robin order SC_FORK sc_spawn( sc_bind(&module1::round_robin, this, "1", sc_ref(e1), sc_ref(e2), 3), "1") , sc_spawn( sc_bind(&module1::round_robin, this, "2", sc_ref(e2), sc_ref(e3), 3), "2") , sc_spawn( sc_bind(&module1::round_robin, this, "3", sc_ref(e3), sc_ref(e4), 3), "3") , sc_spawn( sc_bind(&module1::round_robin, this, "4", sc_ref(e4), sc_ref(e1), 3), "4") , SC_JOIN cout << endl << sc_time_stamp() << ", " << sc_get_curr_process_handle()->name() << ": Done main thread." << endl; } void round_robin(const char *str, sc_event& receive, sc_event& send, int cnt) { while (--cnt >= 0) { wait(receive); cout << sc_time_stamp() << ": " << sc_get_curr_process_handle()->name() << ": Round robin thread " << str << endl; wait(10, SC_NS); send.notify(); } } }; int sc_main (int argc , char *argv[]) { sc_event event1; event1.notify(55, SC_NS); module1 mod1("mod1", event1); sc_start(500, SC_NS); return 0; } systemc-2.3.4/examples/sysc/2.1/forkjoin/forkjoin.cpp0000644000175000017500000001013114342422106022326 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** forkjoin.cpp -- Demo "new" fork/join and dynamic thread creation within SystemC 2.1. Original Author: Stuart Swan, Cadence Design Systems, Inc., 2002-10-22 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte Design Systems, 19 Aug 2003 Description of Modification: Modified to use 2.1 dynamic process support. *****************************************************************************/ #define SC_INCLUDE_DYNAMIC_PROCESSES #include int test_function(double d) { cout << endl << "Test_function sees " << d << endl; return int(d); } void void_function(double d) { cout << endl << "void_function sees " << d << endl; } int ref_function(const double& d) { cout << endl << "ref_function sees " << d << endl; return int(d); } class top : public sc_module { public: SC_HAS_PROCESS(top); top(sc_module_name name) : sc_module(name) { SC_THREAD(main); } void main() { int r; sc_event e1, e2, e3, e4; cout << endl; e1.notify(100, SC_NS); // Spawn several threads that co-operatively execute in round robin order SC_FORK sc_spawn(&r, sc_bind(&top::round_robin, this, "1", sc_ref(e1), sc_ref(e2), 3), "1") , sc_spawn(&r, sc_bind(&top::round_robin, this, "2", sc_ref(e2), sc_ref(e3), 3), "2") , sc_spawn(&r, sc_bind(&top::round_robin, this, "3", sc_ref(e3), sc_ref(e4), 3), "3") , sc_spawn(&r, sc_bind(&top::round_robin, this, "4", sc_ref(e4), sc_ref(e1), 3), "4") , SC_JOIN cout << "Returned int is " << r << endl; cout << endl << endl; // Test that threads in thread pool are successfully reused ... for (int i = 0 ; i < 10; i++) sc_spawn(&r, sc_bind(&top::wait_and_end, this, i)); wait(20, SC_NS); // Show how to use sc_spawn_options sc_spawn_options o; o.set_stack_size(0); // Demo of a function rather than method call, & use return value ... wait( sc_spawn(&r, sc_bind(&test_function, 3.14159)).terminated_event()); cout << "Returned int is " << r << endl; sc_process_handle handle1 = sc_spawn(sc_bind(&void_function, 1.2345)); wait(handle1.terminated_event()); double d = 9.8765; wait( sc_spawn(&r, sc_bind(&ref_function, sc_cref(d))).terminated_event() ); cout << "Returned int is " << r << endl; cout << endl << "Done." << endl; } int round_robin(const char *str, sc_event& receive, sc_event& send, int cnt) { while (--cnt >= 0) { wait(receive); cout << "Round robin thread " << str << " at time " << sc_time_stamp() << endl; wait(10, SC_NS); send.notify(); } return 0; } int wait_and_end(int i) { wait( i + 1, SC_NS); cout << "Thread " << i << " ending." << endl; return 0; } }; int sc_main (int, char*[]) { top top1("Top1"); sc_start(); return 0; } systemc-2.3.4/examples/sysc/2.1/forkjoin/CMakeLists.txt0000644000175000017500000000351414342422106022550 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/forkjoin/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (forkjoin forkjoin.cpp) target_link_libraries (forkjoin SystemC::systemc) configure_and_add_test (forkjoin) systemc-2.3.4/examples/sysc/2.1/forkjoin/golden.log0000644000175000017500000000135314342422106021762 0ustar carstencarsten Round robin thread 1 at time 100 ns Round robin thread 2 at time 110 ns Round robin thread 3 at time 120 ns Round robin thread 4 at time 130 ns Round robin thread 1 at time 140 ns Round robin thread 2 at time 150 ns Round robin thread 3 at time 160 ns Round robin thread 4 at time 170 ns Round robin thread 1 at time 180 ns Round robin thread 2 at time 190 ns Round robin thread 3 at time 200 ns Round robin thread 4 at time 210 ns Returned int is 0 Thread 0 ending. Thread 1 ending. Thread 2 ending. Thread 3 ending. Thread 4 ending. Thread 5 ending. Thread 6 ending. Thread 7 ending. Thread 8 ending. Thread 9 ending. Test_function sees 3.14159 Returned int is 3 void_function sees 1.2345 ref_function sees 9.8765 Returned int is 9 Done. systemc-2.3.4/examples/sysc/2.1/forkjoin/forkjoin.vcxproj0000644000175000017500000002742614342422106023256 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {44313F6B-8A94-43AE-BD81-4D7F6F8522F2} forkjoin Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/forkjoin/Makefile0000644000175000017500000000023714342422106021447 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = forkjoin OBJS = $(PROJECT).o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/sc_report/0000755000175000017500000000000014342422106020164 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/sc_report/sc_report.vcxproj0000644000175000017500000002742314342422106023611 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {823D7385-FB5C-4823-AE8D-2B2032250085} sc_report Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/sc_report/test.am0000644000175000017500000000523514342422106021467 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/sc_report ## %C%: 2_1_sc_report ## examples_TESTS += 2.1/sc_report/test 2_1_sc_report_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_sc_report_test_SOURCES = \ $(2_1_sc_report_H_FILES) \ $(2_1_sc_report_CXX_FILES) examples_BUILD += \ $(2_1_sc_report_BUILD) examples_CLEAN += \ 2.1/sc_report/run.log \ 2.1/sc_report/expected_trimmed.log \ 2.1/sc_report/run_trimmed.log \ 2.1/sc_report/diff.log examples_FILES += \ $(2_1_sc_report_H_FILES) \ $(2_1_sc_report_CXX_FILES) \ $(2_1_sc_report_BUILD) \ $(2_1_sc_report_EXTRA) examples_DIRS += 2.1/sc_report ## example-specific details 2_1_sc_report_H_FILES = 2_1_sc_report_CXX_FILES = \ 2.1/sc_report/main.cpp 2_1_sc_report_BUILD = \ 2.1/sc_report/golden.log 2_1_sc_report_EXTRA = \ 2.1/sc_report/sc_report.sln \ 2.1/sc_report/sc_report.vcxproj \ 2.1/sc_report/CMakeLists.txt \ 2.1/sc_report/Makefile \ 2.1/sc_report/README.txt #2_1_sc_report_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/sc_report/sc_report.sln0000644000175000017500000000227414342422106022707 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_report", "sc_report.vcxproj", "{823D7385-FB5C-4823-AE8D-2B2032250085}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|Win32.ActiveCfg = Debug|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|Win32.Build.0 = Debug|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|x64.ActiveCfg = Debug|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Debug|x64.Build.0 = Debug|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|Win32.ActiveCfg = Release|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|Win32.Build.0 = Release|Win32 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|x64.ActiveCfg = Release|x64 {823D7385-FB5C-4823-AE8D-2B2032250085}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/sc_report/README.txt0000644000175000017500000004502714342422106021672 0ustar carstencarsten EXCEPTION REPORTING Based on SystemC Verification Standard Specification, Feb, 2003. The exception reporting facility provides a common and configurable API to report an exceptional situation. The facility is presented by two classes: sc_report_handler and sc_report. The former provides configuration and report generation calls. The latter just contains the report related information. The application defines an exceptional situation by using one of SC_REPORT_ macros to generate a report. The report is identified by its severity (represented by sc_severity enum type) and the message type. The message type is a string of characters, uniquely identifing a specific type of the exception. This sc_severity describes the severity of a report: enum sc_severity { SC_INFO, SC_WARNING, SC_ERROR, SC_FATAL }; SC_INFO The report is informative only. SC_WARNING The report indicates a potentially incorrect condition. SC_ERROR The report indicates a definite problem during execution. The default configuration forces a throw of a C++ exception sc_exception with the corresponding report information attached. SC_FATAL The report indicates a problem which cannot be recovered from. In default configuration, the simulation is terminated immediately using an abort() call after reporting a SC_FATAL report. The application can define actions to be taken for a generated report. Whereas a usual reaction on a exceptional situation includes just printing a message, more complex scenarios could involve a logging of the report into a file, throwing a C++ exception or drop in the debugger. The enum type sc_actions describes such a set of operations. There are several predefined values for this type: enum { SC_UNSPECIFIED = 0x00, SC_DO_NOTHING = 0x01, SC_THROW = 0x02, SC_LOG = 0x04, SC_DISPLAY = 0x08, SC_CACHE_REPORT = 0x10, SC_INTERRUPT = 0x20, SC_STOP = 0x40, SC_ABORT = 0x80 }; SC_UNSPECIFIED Take the action specified by a configuration rule of a lower precedence. SC_DO_NOTHING Don't take any actions for the report, the action will be ignored, if other actions are given. SC_THROW Throw a C++ exception (sc_exception) that represents the report. The method sc_exception::get_report() can be used to access the report instance later. SC_LOG Print the report into the report log, typically a file on disk. The actual behaviour is defined by the report handler function described below. SC_DISPLAY Display the report to the screen, typically by writing it in to the standard output channel using std::cout. SC_INTERRUPT Interrupt simulation if simulation is not being run in batch mode. Actual behaviour is implementation defined, the default configuration calls sc_interrupt_here(...) debugging hook and has no furhter side effects. SC_CACHE_REPORT Save a copy of the report. The report could be read later using sc_report_handler::get_cached_report(). The reports saved by different processes do not overwrite each other. SC_STOP Call sc_stop(). See sc_stop() manual for further detail. SC_ABORT The action requests the report handler to call abort(). The report handler, a function known to the class sc_report_handler, takes the responsibility of execution the requested actions. Application is able to redefine the report handler to take additional steps on execution of a specific action or extend the default set of possible actions. As the report handler is responsible for all predefined actions it can also be used to redefine the behaviour of predefined actions. Each exception report can be configured to take one or more sc_actions. Multiple actions can be specified using bit-wise OR. When SC_DO_NOTHING is combined with any thing other than SC_UNSPECIFIED, the bit is ignored by the facility. In addition to the actions specified within the sc_actions enum, via sc_actions, the exception API also can take two additional actions. The first action is always taken: the sc_stop_here() function is called for every report, thus providing users a convenient location to set breakpoints to detect error reports, warning reports, etc. The second action that can be taken is to force SC_STOP in the set of the actions to be executed. The action is configured via the stop_after() method described below, which allows users to set specific limits on the number of reports of various types that will usually cause simulation to call sc_stop(). The configuration and report generation API is contained within the sc_report_handler class. The sc_report_handler Class The class provides only static API. The user cannot construct an instance of the class. void report( sc_severity severity, const char* msg_type, const char* msg, const char* file, int line ); Generate a report instance, which will cause the facility to take the appropriate actions based on the current configuration. The call will configure a not known before exception of msg_type to take default set of actions for given severity. The first occurence of the particular msg_type starts its stop_after() counter. sc_actions set_actions( sc_severity severity, sc_actions actions = SC_UNSPECIFIED ); Configure the set of actions to take for reports of the given severity (lowest precedence match). The previous actions set for this severity is returned as the result. SC_UNSPECIFIED is returned if there was no previous actions set for this severity. TODO: what if to be taken actions are SC_UNSPECIFIED and there is now highe precedence match? do nothing? sc_actions set_actions( const char* msg_type, sc_actions actions = SC_UNSPECIFIED ); Configure the set of actions to take for reports of the given message type (middle precedence match). The previous actions set for this message type is returned as the result. SC_UNSPECIFIED is returned if there was no previous actions set for this message type. sc_actions set_actions( const char* msg_type, sc_severity severity, sc_actions actions = SC_UNSPECIFIED ); Configure the set of actions to take for reports having both the given message type and severity (high precedence match). The previous actions set for this message type and severity is returned as the result. SC_UNSPECIFIED is returned if there was no previous actions set for this message type and severity. The functions stop_after(...) modify only the limit, they do not affect the counter of the number of reports. Setting the limit below the number of already occured reports will cause sc_stop() for the next matching report. int stop_after( sc_severity severity, int limit = -1 ); Call sc_stop() after encountering limit number of reports of the given severity (lowest precedence match). If limit is set to one, the first occurrence of a matching report will cause the abort. If limit is 0, abort will never be taken due to a matching report. If limit is negative, abort will never be taken for non-fatal error, and abort will be taken for the first occurrence of a fatal error. The previous limit for this severity is returned as the result. The stop_after() call will return UINT_MAX (int -1) in the case where no previous corresponding stop_after() call was made. int stop_after( const char* msg_type, int limit = -1 ); Call sc_stop() after encountering limit number of reports of the given message type (middle precedence match). The previous limit for this message type is returned as the result. If limit is 0, abort will never be taken due to a matching report. If limit is negative, the limit specified by a lower precedence rule is used. The stop_after() call will return UINT_MAX in the case where no previous corresponding stop_after() call was made. int stop_after( sc_msg_type msg_type, sc_severity severity, int limit = -1 ); Call sc_stop() after encountering limit number of reports having both the given message type and severity. (Highest precedence match.) If limit is 0, abort will never be taken due to a matching report. If limit is negative, the limit specified by a lower precedence rule is used. The previous limit for this message type and severity is returned as the result. The call will return UINT_MAX in the case where no previous corresponding stop_after() call was made. sc_actions suppress( sc_actions actions ); Suppress specified actions for subsequent reports regardless of configuration and clears previous calls to suppress(). The return value is the actions that were suppressed prior to this call. The suppressed actions are still active if they are mentioned by force(sc_actions) call. sc_actions suppress(); Restore default behavior by clearing previous calls to suppress(). The return value is the actions that were suppressed prior to this call. The default behaviour does not suppress any actions. sc_actions force( sc_actions actions ); Force specified actions to be taken for subsequent reports in addition to the actions specified in the current configuration and clears previous calls to force(). The return value is the actions that were forced prior to this call. The actions given by this call override similar setting in suppress(). sc_actions force(); Restore default behavior by clearing previous calls to force(). The return value is the actions that were forced prior to this call. There is no forced actions in the default configurations. sc_actions get_new_action_id(); Return an unused sc_actions value. Returns a different value each time it is called (returns SC_UNSPECIFIED if no more unique values are available). Used when establishing user-defined actions, interpreted by a non-default report handler. It is implementation defined whether the call could be used in the global constructors. const char* get_log_file_name(); Return the log file name currently in effect. Return NULL if no logging is active at the moment. It is implementation defined whether the returned string actually represents a file. void set_log_file_name( const char* name ); Set the log file name. The current handler implementation is responsible for interpretation of the given argument. The name may be unused until first SC_LOG action has occured. The default implementation provides a plain text file logging. The file will be opened after as the first SC_LOG action. The default implementation provides a global function for closing the log file: sc_report_close_default_log(). The logging is deactivated after calling the function and subsequent calls to get_log_file_name() will return NULL. The report handler is reponsible for proper terminating of the logging facility at the end. const sc_report* get_cached_report(); Return pointer to the recent report for which was an SC_CACHE_REPORT action defined. In the default configuration reports of severities SC_ERROR and SC_FATAL are cached. void clear_cached_report(); Clear cached report for the current process (if any). void initialize(); Initializes default configuration. The call shall reset the limit counters. The call may not remove or reconfigure messages. The call may not affect logging. The call does not affect cached reports. void release(); Releases the resource possibly allocated by the exception reporting implementation. The facility may not be used after this call. Whether the facility could be used after subsequent initialize() call is defined by the implementation. The default implementation removes all user defined and/or configured messages and close the log file. Configured predefined messages will be not reset. void set_handler( sc_report_handler_proc handler ); typedef void (*sc_report_handler_proc)(const sc_report&, const sc_actions&); Specify the report handler function. The handler functions get an instance of the generated report and can use the methods of sc_report to access the needed information. The set of requested actions is passed through the second argument. void default_handler( const sc_report& report, const sc_actions& actions ); The function is the default handler of the facility provided by the given SystemC implementation. The force() and suppress() methods provide a brute-force way to override the current configuration. For example, force(SC_LOG) could be called during debugging to cause all reports to be logged regardless of the current configuration. As another example, suppress(suppress() | SC_THROW); could be called by code that is not C++ throw-safe when it starts execution, and then suppress(prev) would be called when it completes execution. The class sc_report the report representation. An instance of the class could be accessed either through its cached copy or in the catch block of C++ "try {} catch (const sc_exception & ex) {}" construction. To access the report the method sc_exception::get_report() is available. Use sc_report_handler::get_cached_report() to access the cached copy of the report. Instances of the sc_report can be copied by copy constructor and assignment operator means. It is not allowed to create an empty report. The sc_report Class sc_severity get_severity() const; Return the severity of a report object. const char* get_msg_type() const; Get message type of a report object. The returned string is guaranteed to persist until sc_report_handler::release() is called. const char* get_msg() const; Get message contents of a report object. The lifetime of the returned pointer is that of the report instance. const char* get_file_name() const; Get file name that generated report object. Please see the definition of the SC_REPORT_ macros for the exact contents of the returned value. int get_line_number() const; Get line number that generated report object. See also: get_file_name(). sc_time get_time() const; Get the simulation time when then report object was generated. const sc_process_b* get_process() const; Get the process that generated the report object. The process name could be retrieved by calling the name() of the returned pointer. When a report is logged to a file, the current simulation time and current process name will automatically be included within the report. The implementation defines following actions in the default configuration: Severity Actions INFO SC_LOG | SC_DISPLAY WARNING SC_LOG | SC_DISPLAY ERROR SC_LOG | SC_CACHE_REPORT | SC_THROW FATAL SC_LOG | SC_DISPLAY | SC_CACHE_REPORT | SC_ABORT The error level reports are displayed by the default handler of sc_exception type exceptions. The following macros are globally visible as part of the standard and should be used to generate reports: #define SC_REPORT_INFO(msg_type, msg) \ sc_report_handler::report( SC_INFO, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_WARNING(msg_type, msg) \ sc_report_handler::report( SC_WARNING, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_ERROR(msg_type, msg) \ sc_report_handler::report( SC_ERROR, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_FATAL(msg_type, msg) \ sc_report_handler::report( SC_FATAL, msg_type, msg, __FILE__, __LINE__ ) The following examples illustrates how the exception API might be custom configured and how reports are generated. Note that message types are best captured within one or more header files, where they are declared using #define macros. This technique insures that strings representing message types are only declared once and that any typos that might occur when message types are specified in the SC_REPORT_* macros are caught by the compiler. #define PCI_RPT_PROTOCOL_EXCEPTION "PCI Protocol Exception" const char PCI_RPT_PROTOCOL_READ_RETRY[] = "PCI Read Retry"; int sc_main(int, char**) { // stop after having seen 10 error-level reports sc_report_handler::stop_after(SC_ERROR, 10); // make the PCI_RPT_PROTOCOL_EXCEPTION error non-critical // Note that 10 this errors will still cause a stop, as // configured by previous statement. sc_report_handler::set_actions(PCI_RPT_PROTOCOL_EXCEPTION, SC_ERROR, SC_DISPLAY); // disable the report PCI_RPT_PROTOCOL_READ_RETRY sc_report_handler::set_actions(PCI_RPT_PROTOCOL_READ_RETRY, SC_DO_NOTHING); sc_start(1, SC_MS); // allow the report PCI_RPT_PROTOCOL_READ_RETRY to be displayed sc_report_handler::set_actions(PCI_RPT_PROTOCOL_READ_RETRY, SC_DISPLAY); sc_start(1, SC_MS); // PCI_RPT_PROTOCOL_READ_RETRY reports will now be configured to // SC_UNSPECIFIED. Therefore, a lower precedence rule applies and the // actions in SC_DEFAULT_..._ACTIONS will take effect for the report. sc_report_handler::set_actions(PCI_RPT_PROTOCOL_READ_RETRY); sc_start(1, SC_MS); } void foo() { sc_time max_time(500, SC_NS); if (...) SC_REPORT_ERROR(PCI_RPT_PROTOCOL_EXCEPTION, "PCI burst read exceeded max time limit of " + max_time.to_string()); if (...) SC_REPORT_INFO(PCI_RPT_PROTOCOL_READ_RETRY, "PCI read retry at time " + sc_time_stamp().to_string()); } The following example illustrates how reports using SC_CACHE_REPORT actions can be accessed: ... sc_report_handler::set_actions(PCI_RPT_PROTOCOL_READ_RETRY, SC_INFO, SC_CACHE_REPORT|SC_LOG); ... void module::do_something() { if (...) SC_REPORT_INFO(PCI_RPT_PROTOCOL_READ_RETRY, "..."); } void module::foo() { sc_report_handler::clear_cached_report(); do_something(); sc_report* rp = sc_report_handler::get_cached_report(); if ( rp ) { cout << rp->get_msg() << endl; } } The following example illustrates how reports using SC_THROW actions can be accessed: ... sc_report_handler::set_actions(PCI_RPT_PROTOCOL_EXCEPTION, SC_ERROR, SC_THROW); ... void module::do_something() { if (...) SC_REPORT_ERROR(PCI_RPT_PROTOCOL_EXCEPTION, "..."); } void module::bar() { try { do_something(); } catch (const sc_exception & e) { cerr << e.get_report().get_msg() << endl; } } systemc-2.3.4/examples/sysc/2.1/sc_report/CMakeLists.txt0000644000175000017500000000351414342422106022727 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/sc_report/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (sc_report main.cpp) target_link_libraries (sc_report SystemC::systemc) configure_and_add_test (sc_report) systemc-2.3.4/examples/sysc/2.1/sc_report/main.cpp0000644000175000017500000001743614342422106021627 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_report -- test error reporting, sepcifically which actions are selected An important part of the sc_report functionality is to translate an reported tupel (id,severity) into a set of actions. This test is dedicated to this functionality. It uses user-defined actions and user-defined handler. Original Author: Ulli Holtmann, Synopsys, Inc., Jan 2003 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include /* Allocate user-defined action: Allocate as many user-defined actions as possible. Note: We need to have at least usr1..usr6 action which are used in subsequent tests. */ const unsigned num_usr_actions = 6; sc_actions usr_actions[num_usr_actions]; sc_actions& usr1 = usr_actions[0]; sc_actions& usr2 = usr_actions[1]; sc_actions& usr3 = usr_actions[2]; sc_actions& usr4 = usr_actions[3]; sc_actions& usr5 = usr_actions[4]; sc_actions& usr6 = usr_actions[5]; const char* id1 = "ID1"; const char* id2 = "ID2"; const char* id3 = "ID3"; const char* id4 = "ID4"; void allocate_user_actions( ) { sc_actions usr; for (unsigned int n=0; n<1000; n++) { usr = sc_report_handler::get_new_action_id(); if ( usr == SC_UNSPECIFIED ) { cout << "We got " << n << " user-defined actions\n"; break; } // make sure we don't get the same usr action again and that it // is really new sc_assert (usr!=SC_UNSPECIFIED && usr!=SC_DO_NOTHING && usr!=SC_THROW && usr!=SC_LOG && usr!=SC_DISPLAY && usr!=SC_CACHE_REPORT && usr!=SC_STOP && usr!=SC_ABORT ); if ( n < num_usr_actions ) { // save for later use usr_actions[n] = usr; for (unsigned int i=0; i "; for (int n=0; n<32; n++) { sc_actions action = actions & 1<") << endl; } /* Test selection schema id x severity : ID Severity 1 2 3 info usr2 usr1 usr5* warning usr3 usr1 usr3 error usr4 usr1 usr1* fatal usr5 usr1 usr5 usr1..usr5 are user-defined actions ID 1 selects by severity rule which has lowest priority, ID 2 selects by ID rule, ID 3 selects by individual severity x ID rules (highest priority) */ void set_rules() { // set rule 1: by severity sc_report_handler::set_actions( SC_INFO, usr2 ); sc_report_handler::set_actions( SC_WARNING, usr3 ); sc_report_handler::set_actions( SC_ERROR, usr4 ); sc_report_handler::set_actions( SC_FATAL, usr5 ); // set rule 2: by id sc_report_handler::set_actions( id2, usr1 ); // set rule 3: by (id,severity) sc_report_handler::set_actions ( id3, SC_INFO, usr5 ); sc_report_handler::set_actions ( id3, SC_ERROR, usr1 ); } void query_rules( const char* id ) { sc_report_handler::report( SC_INFO, id, "extra_msg_for_info", "no_specific_file", 0); sc_report_handler::report( SC_WARNING, id, "extra_msg_for_warning","no_specific_file", 1); sc_report_handler::report( SC_ERROR, id, "extra_msg_for_error", "no_specific_file", 2); sc_report_handler::report( SC_FATAL, id, "extra_msg_for_fatal", "no_specific_file", 3); cout << endl; } void query_rules() { query_rules( id1 ); query_rules( id2 ); query_rules( id3 ); } int sc_main(int,char**) { sc_actions check = SC_UNSPECIFIED; allocate_user_actions(); sc_report_handler::set_handler( &dump_all_handler ); // disable automatic stop sc_report_handler::stop_after( SC_ERROR, 0 ); sc_report_handler::stop_after( SC_FATAL, 0 ); // Don't emit error|fatal for ID4 because this would // terminate the simulation. cout << "Default settings for ID4\n"; query_rules( id4 ); // check default setting of rules cout << "Specific settings for ID1..ID3\n"; set_rules(); query_rules(); // temporarily suppress usr4: // - check which actions are emitted // - check that suppress() restores old state // - check return value of suppress(.) cout << "temporarily suppress usr4\n"; sc_start( 1,SC_NS ); sc_report_handler::suppress( usr3 ); check = sc_report_handler::suppress( usr4 ); sc_assert( check == usr3 ); query_rules( id1 ); check = sc_report_handler::suppress(); sc_assert( check == usr4 ); query_rules( id1 ); // temporarily force usr1: same checking as with suppress cout << "temporarily force usr1\n"; sc_start( 1,SC_NS ); sc_report_handler::force( usr2 ); check = sc_report_handler::force( usr1 ); sc_assert( check == usr2 ); query_rules( id1 ); check = sc_report_handler::force(); sc_assert( check == usr1 ); query_rules( id1 ); // temporarily force usr1: same checking as with suppress cout << "temporarily suppress {usr3,usr4} and force {usr1,usr3}\n"; sc_start( 1,SC_NS ); sc_report_handler::force ( usr1|usr3 ); sc_report_handler::suppress( usr3|usr4 ); query_rules( id1 ); sc_report_handler::force(); sc_report_handler::suppress(); query_rules( id1 ); return 0; } systemc-2.3.4/examples/sysc/2.1/sc_report/golden.log0000644000175000017500000001075414342422106022146 0ustar carstencarstenWe got 24 user-defined actions Default settings for ID4 report: ID4 INFO --> log display msg=extra_msg_for_info file=no_specific_file line 0 time=0 s process= report: ID4 WARNING --> log display msg=extra_msg_for_warning file=no_specific_file line 1 time=0 s process= report: ID4 ERROR --> throw log cache-report msg=extra_msg_for_error file=no_specific_file line 2 time=0 s process= report: ID4 FATAL --> log display cache-report abort msg=extra_msg_for_fatal file=no_specific_file line 3 time=0 s process= Specific settings for ID1..ID3 report: ID1 INFO --> usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=0 s process= report: ID1 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=0 s process= report: ID1 ERROR --> usr4 msg=extra_msg_for_error file=no_specific_file line 2 time=0 s process= report: ID1 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=0 s process= report: ID2 INFO --> usr1 msg=extra_msg_for_info file=no_specific_file line 0 time=0 s process= report: ID2 WARNING --> usr1 msg=extra_msg_for_warning file=no_specific_file line 1 time=0 s process= report: ID2 ERROR --> usr1 msg=extra_msg_for_error file=no_specific_file line 2 time=0 s process= report: ID2 FATAL --> usr1 msg=extra_msg_for_fatal file=no_specific_file line 3 time=0 s process= report: ID3 INFO --> usr5 msg=extra_msg_for_info file=no_specific_file line 0 time=0 s process= report: ID3 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=0 s process= report: ID3 ERROR --> usr1 msg=extra_msg_for_error file=no_specific_file line 2 time=0 s process= report: ID3 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=0 s process= temporarily suppress usr4 report: ID1 INFO --> usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=1 ns process= report: ID1 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=1 ns process= report: ID1 ERROR --> msg=extra_msg_for_error file=no_specific_file line 2 time=1 ns process= report: ID1 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=1 ns process= report: ID1 INFO --> usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=1 ns process= report: ID1 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=1 ns process= report: ID1 ERROR --> usr4 msg=extra_msg_for_error file=no_specific_file line 2 time=1 ns process= report: ID1 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=1 ns process= temporarily force usr1 report: ID1 INFO --> usr1 usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=2 ns process= report: ID1 WARNING --> usr1 usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=2 ns process= report: ID1 ERROR --> usr1 usr4 msg=extra_msg_for_error file=no_specific_file line 2 time=2 ns process= report: ID1 FATAL --> usr1 usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=2 ns process= report: ID1 INFO --> usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=2 ns process= report: ID1 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=2 ns process= report: ID1 ERROR --> usr4 msg=extra_msg_for_error file=no_specific_file line 2 time=2 ns process= report: ID1 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=2 ns process= temporarily suppress {usr3,usr4} and force {usr1,usr3} report: ID1 INFO --> usr1 usr2 usr3 msg=extra_msg_for_info file=no_specific_file line 0 time=3 ns process= report: ID1 WARNING --> usr1 usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=3 ns process= report: ID1 ERROR --> usr1 usr3 msg=extra_msg_for_error file=no_specific_file line 2 time=3 ns process= report: ID1 FATAL --> usr1 usr3 usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=3 ns process= report: ID1 INFO --> usr2 msg=extra_msg_for_info file=no_specific_file line 0 time=3 ns process= report: ID1 WARNING --> usr3 msg=extra_msg_for_warning file=no_specific_file line 1 time=3 ns process= report: ID1 ERROR --> usr4 msg=extra_msg_for_error file=no_specific_file line 2 time=3 ns process= report: ID1 FATAL --> usr5 msg=extra_msg_for_fatal file=no_specific_file line 3 time=3 ns process= systemc-2.3.4/examples/sysc/2.1/sc_report/Makefile0000644000175000017500000000023214342422106021621 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = sc_report OBJS = main.o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.1/sc_export/0000755000175000017500000000000014342422106020172 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.1/sc_export/test.am0000644000175000017500000000523214342422106021472 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.1/sc_export ## %C%: 2_1_sc_export examples_TESTS += 2.1/sc_export/test 2_1_sc_export_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_1_sc_export_test_SOURCES = \ $(2_1_sc_export_H_FILES) \ $(2_1_sc_export_CXX_FILES) examples_BUILD += \ $(2_1_sc_export_BUILD) examples_CLEAN += \ 2.1/sc_export/run.log \ 2.1/sc_export/expected_trimmed.log \ 2.1/sc_export/run_trimmed.log \ 2.1/sc_export/diff.log examples_FILES += \ $(2_1_sc_export_H_FILES) \ $(2_1_sc_export_CXX_FILES) \ $(2_1_sc_export_BUILD) \ $(2_1_sc_export_EXTRA) examples_DIRS += 2.1/sc_export ## example-specific details 2_1_sc_export_H_FILES = 2_1_sc_export_CXX_FILES = \ 2.1/sc_export/main.cpp 2_1_sc_export_BUILD = \ 2.1/sc_export/golden.log 2_1_sc_export_EXTRA = \ 2.1/sc_export/sc_export.sln \ 2.1/sc_export/sc_export.vcxproj \ 2.1/sc_export/CMakeLists.txt \ 2.1/sc_export/Makefile \ 2.1/sc_export/README.txt #2_1_sc_export_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.1/sc_export/sc_export.vcxproj0000644000175000017500000002742314342422106023625 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {E1EA1796-55BF-4570-9905-2986C2DEF683} sc_export Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.1/sc_export/README.txt0000644000175000017500000000410514342422106021670 0ustar carstencarstenThe sc_export class is an addition to ports and allow one to export an interface through the module hierarchy. The sc_export makes an interface - that is bound to a channel located somewhere within that module - available to the outside of the module. If you see a module with an sc_export instance then you can be sure that this module already has a channel bound to that sc_export. Binding --- sc_export instances are similar to ports with respect to binding. An sc_export can be bound to either a channel or another sc_export, given that this sc_export itself is directly or indirectly bound to a channel. Types must match which is checked either during compilation or elaboration Binding can be done by name, or by CTOR. Binding is generally done just like ports, except for the following: If you bind an sc_export to another sc_export like port E.IFP2 to D.IFP in the example below, then you must bind the parent_expp to the child_exp, e.g. "parent_exp(child_exp)". For ports, this is done the opposite way like child_port(parent_port), however this is wrong for sc_exports and leads to an error during elaboration. As a rule of thumb, bind "further(closer)" with "further" the port/export that is further away from the channel. This further(closer) rule works for ports as well as exports. For hierarchical ports, the channel is connected to the port of the top-most module, so parent_port==closer, hence do a child_port(parent_port). For an sc_export, the channel is embedded to the innermost instance, so child_exp==closer, hence do parent_exp(child_exp) Names --- An sc_export can be given an explicit name through the CTOR. If not, then a default name like "export_0", "export_1", ... is given with an individual number set for each module. Supported Functions and Restrictions --- You can access the interface of an export with the get_interface() method as well as with operator ->. It is not allowed to use an export as an argument in the sensitivity list of a process. Furthermore, exports are not allowed in lambda expressions. Processes can use ports but not exports in these contexts. systemc-2.3.4/examples/sysc/2.1/sc_export/CMakeLists.txt0000644000175000017500000000351414342422106022735 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.1/sc_export/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (sc_export main.cpp) target_link_libraries (sc_export SystemC::systemc) configure_and_add_test (sc_export) systemc-2.3.4/examples/sysc/2.1/sc_export/sc_export.sln0000644000175000017500000000227414342422106022723 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_export", "sc_export.vcxproj", "{E1EA1796-55BF-4570-9905-2986C2DEF683}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|Win32.ActiveCfg = Debug|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|Win32.Build.0 = Debug|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|x64.ActiveCfg = Debug|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Debug|x64.Build.0 = Debug|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|Win32.ActiveCfg = Release|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|Win32.Build.0 = Release|Win32 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|x64.ActiveCfg = Release|x64 {E1EA1796-55BF-4570-9905-2986C2DEF683}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.1/sc_export/main.cpp0000644000175000017500000001067314342422106021631 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- This example shows the use of the sc_export class. Original Author: *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /* In this example, module D contains a channel of type C which implements an interface C_if. D makes the interface C visible to the outside by an interface-port named "IFP". Module E contains an instance of D and also contains another instance of C. E exports both interfaces as interface-ports IFP1 and IFP2. Both IFP1 and IFP2 are bound to ports P1 and P2 of module X. +-------------+ +------------------+ | X | | E +----+ | | |P1 IFP1| | C | | | [ ]------------O---------@ | | | | | | | | | | | +----+ | | | | | | | | +----------+ | | | | | D | | | | | | +----+ | | | |P2 IFP2| IFP| | C | | | | [ ]------------O-----O---@ | | | | | | | | | | | | | | | +----+ | | | | | | | | | | | +----------+ | +-------------+ +------------------+ Legend: [ ] port O interface-port @ interface */ #include "systemc.h" // Interface class C_if : virtual public sc_interface { public: virtual void run() = 0; }; // Channel class C : public C_if, public sc_channel { public: SC_CTOR(C) { } virtual void run() { cout << sc_time_stamp() << " In Channel run() " << endl; } }; // --- D: export channel C through IFP -------- SC_MODULE( D ) { sc_export IFP; SC_CTOR( D ) : IFP("IFP"), // explicit name m_C("C") { IFP( m_C ); // bind sc_export->interface by name } private: C m_C; // channel }; // --- E: module with two interface-ports --- SC_MODULE( E ) { private: C m_C; D m_D; public: sc_export IFP1; sc_export IFP2; SC_CTOR( E ) : m_C("C"), m_D("D"), IFP1("IFP1") { IFP1( m_C ); IFP2( m_D.IFP ); // bind sc_export->sc_export by name IFP1.get_interface(); // just to see whether it compiles } }; // Module X connected to the channels through E SC_MODULE( X ) { sc_port P1; sc_port P2; SC_CTOR(X) { SC_THREAD(run); } void run() { wait(10, SC_NS); P1->run(); wait(10, SC_NS); P2->run(); } }; int sc_main(int , char** ) { E the_E("E"); X the_X("X"); // port->IFP the_X.P1( the_E.IFP1 ); the_X.P2( the_E.IFP2 ); sc_start(17, SC_NS); the_E.IFP1->run(); // testing the operator-> of sc_export sc_start(50, SC_NS); return 0; } systemc-2.3.4/examples/sysc/2.1/sc_export/golden.log0000644000175000017500000000011014342422106022135 0ustar carstencarsten10 ns In Channel run() 17 ns In Channel run() 20 ns In Channel run() systemc-2.3.4/examples/sysc/2.1/sc_export/Makefile0000644000175000017500000000023214342422106021627 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = sc_export OBJS = main.o include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/simple_bus/0000755000175000017500000000000014342422106020026 5ustar carstencarstensystemc-2.3.4/examples/sysc/simple_bus/simple_bus_non_blocking_if.h0000644000175000017500000000423014342422106025540 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_non_blocking_if.h : The non-blocking BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_non_blocking_if_h #define __simple_bus_non_blocking_if_h #include #include "simple_bus_types.h" class simple_bus_non_blocking_if : public virtual sc_interface { public: // non-blocking BUS interface virtual void read(unsigned int unique_priority , int *data , unsigned int address , bool lock = false) = 0; virtual void write(unsigned int unique_priority , int *data , unsigned int address , bool lock = false) = 0; virtual simple_bus_status get_status(unsigned int unique_priority) = 0; }; // end class simple_bus_non_blocking_if #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_request.h0000644000175000017500000000436414342422106024120 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_request.h : The bus interface request form. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_request_h #define __simple_bus_request_h enum simple_bus_lock_status { SIMPLE_BUS_LOCK_NO = 0 , SIMPLE_BUS_LOCK_SET , SIMPLE_BUS_LOCK_GRANTED }; struct simple_bus_request { // parameters unsigned int priority; // request parameters bool do_write; unsigned int address; unsigned int end_address; int *data; simple_bus_lock_status lock; // request status sc_event transfer_done; simple_bus_status status; // default constructor simple_bus_request(); }; inline simple_bus_request::simple_bus_request() : priority(0) , do_write(false) , address(0) , end_address(0) , data((int *)0) , lock(SIMPLE_BUS_LOCK_NO) , status(SIMPLE_BUS_OK) {} #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_direct.h0000644000175000017500000000460514342422106025253 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_direct.h : The monitor (master) using the direct BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_master_direct_h #define __simple_bus_master_direct_h #include #include "simple_bus_direct_if.h" SC_MODULE(simple_bus_master_direct) { // ports sc_in_clk clock; sc_port bus_port; SC_HAS_PROCESS(simple_bus_master_direct); // constructor simple_bus_master_direct(sc_module_name name_ , unsigned int address , int timeout , bool verbose = true) : sc_module(name_) , m_address(address) , m_timeout(timeout) , m_verbose(verbose) { // process declaration SC_THREAD(main_action); } // process void main_action(); private: unsigned int m_address; int m_timeout; bool m_verbose; }; // end class simple_bus_master_direct #endif systemc-2.3.4/examples/sysc/simple_bus/test.am0000644000175000017500000000702614342422106021331 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: simple_bus ## %C%: simple_bus examples_TESTS += simple_bus/test simple_bus_test_CPPFLAGS = \ $(AM_CPPFLAGS) simple_bus_test_SOURCES = \ $(simple_bus_H_FILES) \ $(simple_bus_CXX_FILES) examples_BUILD += \ $(simple_bus_BUILD) examples_CLEAN += \ simple_bus/run.log \ simple_bus/expected_trimmed.log \ simple_bus/run_trimmed.log \ simple_bus/diff.log examples_FILES += \ $(simple_bus_H_FILES) \ $(simple_bus_CXX_FILES) \ $(simple_bus_BUILD) \ $(simple_bus_EXTRA) examples_DIRS += simple_bus ## example-specific details simple_bus_H_FILES = \ simple_bus/simple_bus.h \ simple_bus/simple_bus_arbiter.h \ simple_bus/simple_bus_arbiter_if.h \ simple_bus/simple_bus_blocking_if.h \ simple_bus/simple_bus_direct_if.h \ simple_bus/simple_bus_fast_mem.h \ simple_bus/simple_bus_master_blocking.h \ simple_bus/simple_bus_master_direct.h \ simple_bus/simple_bus_master_non_blocking.h \ simple_bus/simple_bus_non_blocking_if.h \ simple_bus/simple_bus_request.h \ simple_bus/simple_bus_slave_if.h \ simple_bus/simple_bus_slow_mem.h \ simple_bus/simple_bus_test.h \ simple_bus/simple_bus_types.h simple_bus_CXX_FILES = \ simple_bus/simple_bus.cpp \ simple_bus/simple_bus_arbiter.cpp \ simple_bus/simple_bus_main.cpp \ simple_bus/simple_bus_master_blocking.cpp \ simple_bus/simple_bus_master_direct.cpp \ simple_bus/simple_bus_master_non_blocking.cpp \ simple_bus/simple_bus_types.cpp \ simple_bus/simple_bus_tools.cpp simple_bus_BUILD = \ simple_bus/golden.log simple_bus_EXTRA = \ simple_bus/simple_bus.sln \ simple_bus/simple_bus.vcxproj \ simple_bus/CMakeLists.txt \ simple_bus/Makefile \ simple_bus/ChangeLog \ simple_bus/README \ simple_bus/SLIDES.pdf \ simple_bus/LEGAL #simple_bus_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/simple_bus/simple_bus.sln0000644000175000017500000000227614342422106022715 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_bus", "simple_bus.vcxproj", "{CE91C43D-8F06-4821-A84A-C561D9A19558}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|Win32.ActiveCfg = Debug|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|Win32.Build.0 = Debug|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|x64.ActiveCfg = Debug|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Debug|x64.Build.0 = Debug|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|Win32.ActiveCfg = Release|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|Win32.Build.0 = Release|Win32 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|x64.ActiveCfg = Release|x64 {CE91C43D-8F06-4821-A84A-C561D9A19558}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/simple_bus/simple_bus_arbiter.h0000644000175000017500000000412414342422106024052 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_arbiter.h : The arbitration unit. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_arbiter_h #define __simple_bus_arbiter_h #include #include "simple_bus_types.h" #include "simple_bus_request.h" #include "simple_bus_arbiter_if.h" class simple_bus_arbiter : public simple_bus_arbiter_if , public sc_module { public: // constructor simple_bus_arbiter(sc_module_name name_ , bool verbose = false) : sc_module(name_) , m_verbose(verbose) {} simple_bus_request *arbitrate(const simple_bus_request_vec &requests); private: bool m_verbose; }; // end class simple_bus_arbiter #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_slow_mem.h0000644000175000017500000001104414342422106024243 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_slow_mem.h : Slave : The memory (slave) with wait states. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_slow_mem_h #define __simple_bus_slow_mem_h #include #include "simple_bus_types.h" #include "simple_bus_slave_if.h" class simple_bus_slow_mem : public simple_bus_slave_if , public sc_module { public: // ports sc_in_clk clock; SC_HAS_PROCESS(simple_bus_slow_mem); // constructor simple_bus_slow_mem(sc_module_name name_ , unsigned int start_address , unsigned int end_address , unsigned int nr_wait_states) : sc_module(name_) , m_start_address(start_address) , m_end_address(end_address) , m_nr_wait_states(nr_wait_states) , m_wait_count(-1) { // process declaration SC_METHOD(wait_loop); dont_initialize(); sensitive << clock.pos(); sc_assert(m_start_address <= m_end_address); sc_assert((m_end_address-m_start_address+1)%4 == 0); unsigned int size = (m_end_address-m_start_address+1)/4; MEM = new int [size]; for (unsigned int i = 0; i < size; ++i) MEM[i] = 0; } // destructor ~simple_bus_slow_mem(); // process void wait_loop(); // direct Slave Interface bool direct_read(int *data, unsigned int address); bool direct_write(int *data, unsigned int address); // Slave Interface simple_bus_status read(int *data, unsigned int address); simple_bus_status write(int *data, unsigned int address); unsigned int start_address() const; unsigned int end_address() const; private: int *MEM; unsigned int m_start_address; unsigned int m_end_address; unsigned int m_nr_wait_states; int m_wait_count; }; // end class simple_bus_slow_mem inline simple_bus_slow_mem::~simple_bus_slow_mem() { if (MEM) delete [] MEM; MEM = (int *)0; } inline void simple_bus_slow_mem::wait_loop() { if (m_wait_count >= 0) m_wait_count--; } inline bool simple_bus_slow_mem::direct_read(int *data, unsigned int address) { *data = MEM[(address - m_start_address)/4]; return true; } inline bool simple_bus_slow_mem::direct_write(int *data, unsigned int address) { MEM[(address - m_start_address)/4] = *data; return true; } inline simple_bus_status simple_bus_slow_mem::read(int *data , unsigned int address) { // accept a new call if m_wait_count < 0) if (m_wait_count < 0) { m_wait_count = m_nr_wait_states; return SIMPLE_BUS_WAIT; } if (m_wait_count == 0) { *data = MEM[(address - m_start_address)/4]; return SIMPLE_BUS_OK; } return SIMPLE_BUS_WAIT; } inline simple_bus_status simple_bus_slow_mem::write(int *data , unsigned int address) { // accept a new call if m_wait_count < 0) if (m_wait_count < 0) { m_wait_count = m_nr_wait_states; return SIMPLE_BUS_WAIT; } if (m_wait_count == 0) { MEM[(address - m_start_address)/4] = *data; return SIMPLE_BUS_OK; } return SIMPLE_BUS_WAIT; } inline unsigned int simple_bus_slow_mem::start_address() const { return m_start_address; } inline unsigned int simple_bus_slow_mem::end_address() const { return m_end_address; } #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus.vcxproj0000644000175000017500000003164314342422106023614 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {CE91C43D-8F06-4821-A84A-C561D9A19558} simple_bus Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_non_blocking.h0000644000175000017500000000520114342422106026434 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_non_blocking.h : The master using the non-blocking BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_master_non_blocking_h #define __simple_bus_master_non_blocking_h #include #include "simple_bus_types.h" #include "simple_bus_non_blocking_if.h" SC_MODULE(simple_bus_master_non_blocking) { // ports sc_in_clk clock; sc_port bus_port; SC_HAS_PROCESS(simple_bus_master_non_blocking); // constructor simple_bus_master_non_blocking(sc_module_name _name , unsigned int unique_priority , unsigned int start_address , bool lock , int timeout) : sc_module(_name) , m_unique_priority(unique_priority) , m_start_address(start_address) , m_lock(lock) , m_timeout(timeout) { // process declaration SC_THREAD(main_action); sensitive << clock.pos(); } // process void main_action(); private: unsigned int m_unique_priority; unsigned int m_start_address; bool m_lock; int m_timeout; }; // end class simple_bus_master_non_blocking #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_slave_if.h0000644000175000017500000000404514342422106024214 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_slave_if.h : The Slave interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_slave_if_h #define __simple_bus_slave_if_h #include #include "simple_bus_types.h" #include "simple_bus_direct_if.h" class simple_bus_slave_if : public simple_bus_direct_if { public: // Slave interface virtual simple_bus_status read(int *data, unsigned int address) = 0; virtual simple_bus_status write(int *data, unsigned int address) = 0; virtual unsigned int start_address() const = 0; virtual unsigned int end_address() const = 0; }; // end class simple_bus_slave_if #endif systemc-2.3.4/examples/sysc/simple_bus/README0000644000175000017500000007751514342422106020725 0ustar carstencarsten This is a simple version of an Abstract Bus Model. This version is developed using SystemC 2.0, and is verified on all platforms supported by SystemC 2.0. By Ric Hilderink, Synopsys, Inc., 11 Oct 2001. Updated by Martin Janssen, Synopsys, Inc., 27 Nov 2001. Updated by Holger Keding, Synopsys, Inc., 26 Jan 2002. This README contains the following sections: 0. Getting Started 0.1 .. Getting Started for Unix 0.2 .. Getting Started for Windows 1. Introduction : the bus model 1.1 .. Bus Interface 1.1.1 .... Blocking Interface 1.1.2 .... Non-Blocking Interface 1.1.3 .... Direct Interface 1.2 .. Slave Interface 1.3 .. Arbiter 1.4 .. Timing 1.4.1 .... Blocking Request 1.4.2 .... Non-Blocking Request 1.4.3 .... Direct Request 1.5 .. Interfaces Used 1.5.1 .... Bus 1.5.2 .... Arbiter 2. The Testbench 2.1 .. Slaves 2.1.1 .... Fast Memory Slaves 2.1.2 .... Slow Memory Slaves 2.2 .. Masters 2.2.1 .... Non-Blocking Masters 2.2.2 .... Blocking Masters 2.2.3 .... Direct Masters 2.3 .. The Test 'Schematic' 2.3.1 .... Construction 2.3.2 .... Simulation 2.4 .. Runtime Behavior 2.4.1 .... Direct Master 2.4.2 .... Non-Blocking Master 2.4.3 .... Blocking Master 2.5 .. Running 3. Files ----------------------------------------------------------------------------- 0. Getting Started 0.1 Getting Started for Unix The simple bus example is now part of the SystemC distribution. It is located in directory 'examples/sysc/simple_bus'. To be able to run the example, first go to this directory and build the executable, e.g. For gcc-2.95.2 on Solaris: > gmake -f Makefile.gcc For SC6.1 and SC6.2 on Solaris: > gmake -f Makefile.sun For gcc-2.95.2 on Linux: > gmake -f Makefile.linux For aCC (A.03.15 and A.03.31) on HP-UX: > gmake -f Makefile.hp Now you can run the executable, e.g. > simple_bus.x 0.2 Getting Started for Windows The simple bus example is now part of the SystemC distribution. The source code of this example is located in directory 'examples/sysc/simple_bus'. Project and workspace files for Visual C++ are located in directory 'msvc60/examples/simple_bus'. To be able to run the example, go to this directory and double-click on the simple_bus.dsw file to launch Visual C++ with the workspace file. The workspace file will have the proper switches set to compile for Visual C++ 6.0. Select 'Build simple_bus.exe' under the Build menu or press F7 to build the simple_bus executable. Now you can select 'Execute simple_bus.exe' under the Build menu or press Ctrl+F5 to run the simple_bus executable. 1. Introduction : the bus model This is the description of a simple abstract bus model. The modeling is done at the transaction level, and is based on cycle-based synchronization. Cycle-based synchronization: This reduction in timing accuracy results in high simulation speed. The goal is to model the organization and data movement in the system on a clock by clock basis, as compared to the equivalent real system. Sub-cycle events are then of no interest. Transaction modeling: The communication between components are described as function calls. Events or sequences of events on a group of wires are represented by a set of function calls in an abstract software interface. Transaction modeling of the interfaces enables higher simulation speed than pin-based interfaces and also speeds up the modeling construction process. This example design uses an overall form of synchronization where modules attached to the bus execute on the rising clock edge, and the bus itself executes on a falling clock edge. This is a modeling technique used to achieve very high simulation performance for abstract bus models, it does not imply that the actual implementation of this design must use a bus that is sensitive to the falling clock edge. The final implementation may in fact only have a single clock with all logic sensitive only to the rising edge. Other synchronization schemes (e.g. reliance on primitive channels and the request_update/update scheme) could also have been used, though likely they will result in more complicated and slower code for this design. 1.1 Bus Interface The Bus Interface describes the communication between masters and the bus. To the bus multiple masters can be connected. Each master is identified by a unique priority, that is represented by an unsigned integer number. The lower this priority number is, the more important the master is. Each bus interface function uses this priority to set the importance of the call. There are three sets of communication functions (interfaces) defined between the masters and the bus: blocking, non-blocking and direct. A master can reserve the bus for a subsequent request by using a lock flag. If this flag is set and the request is granted at a given cycle, then the bus will be locked for the same master in the following cycle if that master issues another request. 1.1.1 Blocking Interface The blocking interface functions move data through the bus in burst-mode, and are defined as follows: simple_bus_status burst_read(unsigned int unique_priority, int *data, unsigned int start_address, unsigned int length = 1, bool lock = false); simple_bus_status burst_write(unsigned int unique_priority, int *data, unsigned int start_address, unsigned int length = 1, bool lock = false); These functions read or write a block of data words (32bit), pointed to by data of size length (in words) from or to start_address. We are using byte addressing here, i.e. each valid word address is a multiple of four. The value unique_priority specifies the importance of the master as well as the id of the master. If lock is set, there are two separate effects: 1) The function 'reserves' the bus for exclusive use for a next request of the same master. This request must follow immediately after the previous burst request is completed, i.e., when the burst_read() or burst_write() function returns. 2) The function (i.e. the transaction) cannot be interrupted by a request with a higher priority. After completion the bus returns a simple_bus_status that is one of: - SIMPLE_BUS_OK : Transfer succeeded. - SIMPLE_BUS_ERROR : An error occurred during the transfer. Not all data could be read/written. Examples of conditions which might result in SIMPLE_BUS_ERROR include illegal addresses or address ranges, and writing to a read-only slave. Note that interruption of a transaction does not result in SIMPLE_BUS_ERROR. 1.1.2 Non-Blocking Interface The non-blocking interface functions are defined as follows: void read(unsigned int unique_priority, int *data, unsigned int address, bool lock = false); void write(unsigned int unique_priority, int *data, unsigned int address, bool lock = false); simple_bus_status get_status(unsigned int unique_priority); These functions read or write a single data word, pointed to be data at address. The request is handled according the given unique_priority. If lock is set, the function 'reserves' the bus for exclusive use for a next request of the same master. This request must follow immediately after the previous request is completed, i.e. when the get_status() function returns SIMPLE_BUS_OK or SIMPLE_BUS_ERROR. The functions return immediately. The caller must take care of checking the status of the last request, using the function get_status(). This function queries the bus for the status of the last request made to the bus. Also here the unique_priority of the master must be passed in order to get the status of the appropriate request. The status of the request is one of: - SIMPLE_BUS_REQUEST : The request is issued and placed on the queue, waiting to be served. - SIMPLE_BUS_WAIT : The request is being served but is not completed yet. - SIMPLE_BUS_OK : The request is completed without errors. - SIMPLE_BUS_ERROR : An error occurred during processing of the request. The request is finished but the transfer did not complete successfully. A new non-blocking request can be made if the status of the (last) request is either SIMPLE_BUS_OK or SIMPLE_BUS_ERROR. Immediately after issuing the request, the status becomes in all cases SIMPLE_BUS_REQUEST. The status only changes when the bus processes the request. When a new request is issued and the current one is not completed yet, an error message is produced and the execution is aborted. 1.1.3 Direct Interface The direct interface functions are defined as follows and are the same for the bus interface and the slave interface: bool direct_read(int *data, unsigned int address); bool direct_write(int *data, unsigned int address); The direct interface functions perform the data transfer through the bus, but without using the bus protocol. When the function is invoked, the transfer takes place immediately. The return status is either: - true : The transfer was successful. - false : The transfer was not successful. Possible cause is that the given address cannot be mapped upon a slave, or the memory location cannot be read or written. 1.2 Slave Interface The slave interface describes the communication between the bus and the slaves. To the bus multiple slaves can be connected. Each slave models some kind of memory that can be accessed through the slave interface. The slave interface is defined by two sets of functions. The first set serves the default operations of read/write data to and from memory, while the second set of functions describe the direct interface, hereby ignoring possible wait states of the slaves. The direct interface is already discussed in section 1.1.3. The normal-mode functions are defined as follows: simple_bus_status read(int *data, unsigned int address); simple_bus_status write(int *data, unsigned int address); These functions read or write a single data element, pointed to by data in or from the slave's memory at address. The functions return instantaneously and the caller must check the status of the transfer by checking the return value of the functions. If the returned status is SIMPLE_BUS_WAIT, the caller must call the function again until the status changes. The status of the interface functions in one of: - SIMPLE_BUS_WAIT : The slave issued a wait state. - SIMPLE_BUS_OK : The transfer was successful. - SIMPLE_BUS_ERROR : An error occurred during the processing of the transfer. The transfer is finished but was not successful. If the slave models one or more wait states, the status of the interface function will be SIMPLE_BUS_WAIT; in case of an error the status will be SIMPLE_BUS_ERROR and the transfer is aborted. Each subsequent cycle the status must be checked again until the status becomes SIMPLE_BUS_OK. Only then the transfer is completed and the slave is ready to accept a next request. To obtain the memory range of a slave two functions are needed: unsigned int start_address() const; unsigned int end_address() const; The start_address function returns the address of the first addressable memory location of the slave; the end_address function returns the last addressable memory location of the slave. In the simple bus example these functions are used to perform a check for overlapping address spaces of the slaves before the simulation starts and to determine the appropriate slave for the specified address of a bus request. 1.3 Arbiter To the bus more than one master can be connected. Each master is independent of the others, so each master can issue a bus request at any time. When at a given cycle one or more requests are made for the bus, these requests are collected and passed to an arbiter. Out of this collection the most suitable request is selected; the other requests are kept in the request state. The arbiter is connected to the bus by a dedicated interface, and is called with one or more requests in the collection: simple_bus_request *arbitrate(const simple_bus_request_vec &Q); The arbiter selects the most appropriate request according the following rules: 1. If the current request is a locked burst request, then it is always selected. 2. If the last request had its lock flag set and is again 'requested', this request is selected from the collection Q and returned, otherwise: 3. the request with the highest priority (i.e. lowest number) is selected from the collection Q and returned. The arbiter checks whether all the priorities of the requests are unique. If that is not the case, the arbiter will produce an error message and abort execution. The arbiter is called whenever the last master request is fully processed by the bus, and when there are one or more new requests made by the set of masters. NOTE: The highest priority is specified by the lowest numerical value of the unique_priority parameter. 1.4 Timing A bus transfer is initiated by a master request. Each master is sensitive to the rising clock edge where it can call a bus interface function. 1.4.1 Blocking Request At the rising clock edge, masters can issue a bus request. The bus interface function registers the request in a request form. The status of the request becomes SIMPLE_BUS_REQUEST. (The interface function does not terminate but waits until the status of the bus is either SIMPLE_BUS_OK or SIMPLE_BUS_ERROR, and this status is returned at the first rising clock edge after the request is fully completed.) At the next falling clock edge after the request is issued, the bus handles the requests. Since now there is one (or more) request made, the arbiter is called to determine the most suitable request. The status of this request is set to SIMPLE_BUS_WAIT. This request is then executed. For each data transfer to be made, ranging from start_address to start_address + length - 1, the current address is obtained and the corresponding slave is selected. If there is no slave to be found, the status of the request is set to SIMPLE_BUS_ERROR. The master request is transformed into single slave requests, and one by one these requests are made to the slave. When the status of the slave is SIMPLE_BUS_OK after the call is made, then the transfer of a single data element has succeeded, the current address of the master request is incremented. If the current address is beyond the last to-be-addressed data element, the status of the request is set to SIMPLE_BUS_OK and the event is notified, for which the bus interface function that issued the request is waiting. If there are more data elements to be sent to the slave interface, the status of the request remains SIMPLE_BUS_WAIT. At the next falling clock edge the bus process continues with the data transfer to the slave until all data elements are done. If a slave encounters an error, the status of the request is set to SIMPLE_BUS_ERROR and the event is notified, for which the bus interface function that issued the request is waiting. The bus interface function does not actually wait until the status of the call becomes SIMPLE_BUS_OK or SIMPLE_BUS_ERROR, but waits for an event coming from the bus process indicating that the transfer is completed. This event comes at the falling clock edge. An additional wait for the next rising clock edge must be issued in order to synchronize: simple_bus_status burst_read(...) { // register request ... wait(request->transfer_done); wait(clock->posedge_event()); return get_status(priority); } 1.4.2 Non-Blocking Request A non-blocking master request is done at a rising clock edge. The request is registered by the bus by filling in the request form and the status of the request is set to SIMPLE_BUS_REQUEST. The non-blocking function returns. The status of the request changes as soon as the bus handles the request, and that happens at a falling clock edge. Now the master must check for the status of the request until the status is either SIMPLE_BUS_OK or SIMPLE_BUS_ERROR. Only the bus process can change the status of the request once the request is made. And that happens only at a falling clock edge. The same procedure is now followed for transferring one single data element through the bus as is described for the blocking interface request functions. 1.4.3 Direct Request A direct interface request from a master does not follow the bus protocol, but is handled instantaneously. Once the request is issued by a master, it is directly transformed into the corresponding direct slave interface function call. The only action performed by the bus is the selection of the slave according to the address argument of the direct interface function call. At the slave this direct request is also processed immediately without honoring the wait states of the slave. The function will return and its return value is either true if the given address could be read and/or written, or is false if that is not the case. The return value of the direct request of the bus interface function call is the same as for the slave side of the interface, only when the address parameter could not be mapped to a slave, it will also return false. 1.5 Interfaces Used class simple_bus_direct_if : virtual public sc_interface {...}; class simple_bus_non_blocking_if : virtual public sc_interface {...}; class simple_bus_blocking_if : virtual public sc_interface {...}; class simple_bus_arbiter_if : virtual public sc_interface {...}; class simple_bus_slave_if : public simple_bus_direct_if {...}; 1.5.1 Bus The bus is a hierarchical channel, providing the three different bus interfaces, and containing a clock port, an arbiter port and a (multi-)port for connecting one or more slaves. class simple_bus : public simple_bus_direct_if , public simple_bus_non_blocking_if , public_simple_bus_blocking_if , public sc_module { sc_clk_in clock; sc_port slave_port; sc_port arbiter_port; ... }; The implementation of the main process of the bus is a method process, using dynamic sensitivity for 'communicating' with the bus interface functions. The communication towards the slave interface does not use dynamic sensitivity. 1.5.2 Arbiter The arbiter is a hierarchical channel that provides the simple_bus_arbiter_if interface. class simple_bus_arbiter : public simple_bus_arbiter_if , public sc_module {...}; 2. The Testbench The testbench consists of an instantiation of the simple_bus with an arbiter, three masters and two slaves. Both slaves model a random access memory where the first memory does not have a wait state while the second memory has (some). The testbench contains three masters where each master issues only requests of a particular interface, like only issuing blocking interface function calls, only non-blocking interface function calls or only direct interface function calls. 2.1 Slaves Two kinds of memories are to be modeled: one without wait states and one with a configurable number of wait states. 2.1.1 Fast Memory Slaves The fast memory slave has no wait states and no clock port. It reacts immediately to the bus request and sets the status accordingly. class simple_bus_fast_mem : public simple_bus_slave_if , public sc_module { public: // no ports // constructor simple_bus_fast_mem(sc_module_name name, unsigned int start_address, unsigned int end_address) ... // interface methods ... }; The start_address points to the first byte of the first word in the memory of this slave and is a word aligned address, i.e. it has to be a multiple of 4. The end_address points to the last byte of the last word in the memory area of this slave, i.e. to address (start_address + storage_size_in_words * 4 - 1). 2.1.2 Slow Memory Slaves The slow memory slave has a configurable number of wait states (constructor argument), and contains a clock port. Once a request is made, the status is set to SIMPLE_BUS_WAIT, and a counter is set. Each rising clock edge this counter is decremented and checked, and if it becomes zero, the status is set to SIMPLE_BUS_OK. This status is picked up by the bus at the next falling clock edge. class simple_bus_slow_mem : public simple_bus_slave_if , public sc_module { public: sc_clk_in clock; // constructor simple_bus_slow_mem(sc_module_name name, unsigned int start_address, unsigned int end_address, unsigned int nr_wait_states) ... // interface methods ... }; The start_address points to the first byte of the first word in the memory of this slave and is a word aligned address, i.e. it has to be a multiple of 4. The end_address points to the last byte of the last word in the memory area of this slave, i.e. to address (start_address + storage_size_in_words * 4 - 1). 2.2 Masters For the testbench three masters are defined, each using one bus interface: blocking, non-blocking or direct. The main_action of each master is a thread process. 2.2.1 Non-Blocking Masters SC_MODULE(simple_bus_master_non_blocking) { // ports sc_clk_in clock; sc_port bus_port; // constructor simple_bus_master_non_blocking(sc_module_name name, unsigned int unique_priority, ...) ... }; In this example the non-blocking master reads data from a memory location, performs an arithmetic operation on this data and writes it back to memory. This happens in a loop so that the memory locations are at least changed each loop iteration. 2.2.2 Blocking Masters SC_MODULE(simple_bus_master_blocking) { // ports sc_clk_in clock; sc_port bus_port; // constructor simple_bus_master_blocking(sc_module_name name, unsigned int unique_priority, ...) ... }; Here the blocking master reads a block of data, performs the same arithmetic operations on the data as the non-blocking master, and writes it back to memory as a block. This master has a lower priority than the non-blocking master, to enable interrupts of higher prioritized requests during a burst mode transaction. 2.2.3 Direct Masters SC_MODULE(simple_bus_master_direct) { // ports sc_clk_in clock; sc_port bus_port; // constructor simple_bus_master_direct(sc_module_name name, ...) ... }; The direct master monitors some memory locations at distinct time intervals and prints them on the screen. --------------------------------------------------------------------------- +---------+ +---------+ +---------+ | master | | master | | master | +-->| #1 |-->| #2 |-->| #3 | | +-- [*]---+ +---[*]---+ +---[*]---+ | | | | | +-------------+-------------+ | | | /--------------(.)--------------\ +->[*]/ simple_bus \ +----------+ | \ /[*]----(.)| arbiter | | \--------------[*]--------------/ +----------+ | | | | ____/ \____ clock / \ | | | | +--(.)--+ +--(.)--+ legend: | | slave | | slave | [*] : port +----------->| #1 | | #2 | (.) : interface +-------+ +-------+ Figure 1: the simple_bus with three masters, two slaves and the arbiter. --------------------------------------------------------------------------- 2.3 The Test 'Schematic' The testbench contains a bus with arbiter, three different masters, each supporting a specific bus interface, and two slaves modeling a memory without wait states (fast memory), and a memory with wait states (slow memory). The testbench is available as the hierarchical module simple_bus_test. 2.3.1 Construction The testbench contains the clock channel 'C1' and the different instances. These instances are allocated in the simple_bus_test constructor and are configured by means of constructor arguments. The default argument is the name of the module, but for the masters and the slaves additional parameters must be specified. The memories cover the byte address range [0:ff] where the first half of the address space ([0:7f])is covered by a fast memory, and the second half of the address space ([0x80:0xff]) is covered by a slow memory with 1 wait state: - simple_bus_fast_mem("mem_fast", // name 0x00, // start_address 0x7f); // end_address - simple_bus_slow_mem("mem_slow", // name 0x80, // start_address 0xff, // end_address 1); // number of wait states For the masters, the unique priority must be defined during construction time, except for the direct master. The priority is not directly checked during construction, but only during run time by the arbiter. If during the same cycle two or more request are issued with the same priority, the simulation will abort after issuing an error message: - simple_bus_master_blocking("master_b", 4, ...); // unique_priority = 4 - simple_bus_master_non_blocking("master_nb", 3, ...); // unique_priority = 3 2.3.2 Simulation The simple_bus_test instance is instantiated in the sc_main routine and the simulation is started by the sc_start(10000) statement. This is coded in the simple_bus_main.cpp file. 2.4 Runtime Behavior The three different masters issue bus requests independently of each other. A single request, but also multiple requests at the same cycle are possible. Each master has its own behavior. 2.4.1 Direct Master The direct master serves as a monitor that reads at certain time intervals four adjacent memory locations and prints them on the output stream, using the direct bus interface. With m_address = 0x78, and m_timeout = 100, the direct master performs: while (true) { bus_port->direct_read(&mydata[0], m_address); bus_port->direct_read(&mydata[1], m_address+4); bus_port->direct_read(&mydata[2], m_address+8); bus_port->direct_read(&mydata[3], m_address+12); if (m_verbose) sb_fprintf(stdout, "%f %s : mem[%x:%x] = (%x, %x, %x, %x)\n", sc_time_stamp(), name(), m_address, m_address+15, mydata[0], mydata[1], mydata[2], mydata[3]); wait(m_timeout, SC_NS); } The parameters m_address and m_timeout are configurable by means of constructor arguments. Printing of the memory locations is enabled when m_verbose is set. Also that is configurable with a constructor argument. 2.4.2 Non-Blocking Master The non-blocking master reads a word 'data' at byte address 'addr' from memory, using the non-blocking bus interface function and checks whether the operation is successful. 'data' is modified a little bit and written to the same 'addr' in memory. After 'm_timeout' the next iteration is started. Each iteration, 'addr' is set to the next word address. With addr = 0x38, and m_timeout = 20, the non-blocking master performs: wait(); // ... for the next rising clock edge while (true) { bus_port->read(m_unique_priority, &mydata, addr, m_lock); while ((bus_port->get_status(m_unique_priority) != SIMPLE_BUS_OK) && (bus_port->get_status(m_unique_priority) != SIMPLE_BUS_ERROR)) wait(); if (bus_port->get_status(m_unique_priority) == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%f %s : ERROR cannot read from %x\n", sc_time_stamp(), name(), addr); mydata += cnt; cnt++; bus_port->write(m_unique_priority, &mydata, addr, m_lock); while ((bus_port->get_status(m_unique_priority) != SIMPLE_BUS_OK) && (bus_port->get_status(m_unique_priority) != SIMPLE_BUS_ERROR)) wait(); if (bus_port->get_status(m_unique_priority) == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%f %s : ERROR cannot write to %x\n", sc_time_stamp(), name(), addr); wait(m_timeout, SC_NS); wait(); // ... for the next rising clock edge addr+=4; // next word (byte addressing) if (addr > (m_start_address+0x80)) { addr = m_start_address; cnt = 0; } } Initially, all bus interface function calls are not locked. The lock can be set by means of a constructor argument. 2.4.3 Blocking Master The blocking master reads a block of 'data' words at byte 'addr' and of word length 0x10 from memory, performs some arithmetic calculations on them, that takes 0x10 wait states, and writes the block of 'data' back to memory at 'addr'. Then it pauses 'm_timeout' nanoseconds before the next iteration starts. With m_address = 0x4c and m_timeout = 300, the blocking master performs: while (true) { wait(); // ... for the next rising clock edge status = bus_port->burst_read(m_unique_priority, mydata, m_address, mylength, m_lock); if (status == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%f %s : blocking-read failed at address %x\n", sc_time_stamp(), name(), m_address); for (i = 0; i < mylength; ++i) { mydata[i] += i; wait(); } status = bus_port->burst_write(m_unique_priority, mydata, m_address, mylength, m_lock); if (status == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%f %s : blocking-write failed at address %x\n", sc_time_stamp(), name(), m_address); wait(m_timeout, SC_NS); } Initially, all bus interface function calls are not locked. The lock can be set by means of a constructor argument. 2.5 Running The runtime behavior is best be monitored by inspection of the collection of pending requests at the arbiter, and the identification of the selected request. The arbiter is called each cycle when there are one or multiple requests pending. A burst request is split up in separate requests for each slave action. Let R[p](-) be a request R of priority 'p' without a lock, and let R[p](+) be the same request, but now with a lock. For each cycle the list of requests is shown with the one selected. - R[3](-) // single request, is selected - R[3](-) R[4](-) // two requests, R[3](-) is selected according priority - R[3](-) R[3](-) R[4](-) // error: two requests with the same priority. Abort, end of simulation! It does not matter whether the request is part of a burst-request or just a non-blocking request. Each cycle the most appropriate (partial) request is selected. When R[4] is part of a burst-request, then it can be interrupted by R[3], due to a higher priority. When the lock is set, the behavior is slightly different. Not for the first selection of a request but for the next one, issued by the same master. 1: R[3](+) 2: R[3](+) // single request for cycle 1 and 2, no conflicts 1: R[3](+) 2: R[4](+) // locked request at cycle 1, but is not followed by a next request. // R[4] is selected at cycle 2. 1: R[4](+) 2: R[3](-) R[4](+) // locked request at cycle 1: selected. Request is issued again at // cycle 2, so the lock is kept and the request with a higher priority // must wait. 1: R[4](+) 2: R[3](+) R[4](+) // locked request at cycle 1: selected. Request is issued again at // cycle 2, so R[4] is selected in cycle 2. R[3] must wait, regardless // the higher priority and its lock. 3. Files ChangeLog LEGAL Makefile.gcc Makefile.hp Makefile.linux Makefile.srcs Makefile.sun README SLIDES.pdf simple_bus.cpp simple_bus.golden simple_bus.h simple_bus_arbiter.cpp simple_bus_arbiter.h simple_bus_arbiter_if.h simple_bus_blocking_if.h simple_bus_direct_if.h simple_bus_fast_mem.h simple_bus_main.cpp simple_bus_master_blocking.cpp simple_bus_master_blocking.h simple_bus_master_direct.cpp simple_bus_master_direct.h simple_bus_master_non_blocking.cpp simple_bus_master_non_blocking.h simple_bus_non_blocking_if.h simple_bus_request.h simple_bus_slave_if.h simple_bus_slow_mem.h simple_bus_test.h simple_bus_tools.cpp simple_bus_types.cpp simple_bus_types.h systemc-2.3.4/examples/sysc/simple_bus/ChangeLog0000644000175000017500000000176514342422106021611 0ustar carstencarsten2001-10-19 Ric Hilderink * Simple bus version 2 released. This version is a drastic simplification of the first version, focussing on the most elementary features and capabilities of a bus modeled at the Transaction-Level with SystemC 2.0. 2001-11-09 Martin Janssen * Simple bus version 2.1 released. This version supports the Windows NT platform, in addition to the UNIX platforms already supported in the previous release. 2001-11-27 Martin Janssen * Simple bus version 2.2 released. This version includes improvements in the README file and in the verbose output of the bus arbiter model. 2002-01-28 Holger Keding * Simple bus version 2.3 released. This version uses byte addressing throughout all models. Also, before simulation starts this version is performing a one-time check for overlapping address spaces of the slaves attached to the bus. systemc-2.3.4/examples/sysc/simple_bus/simple_bus_direct_if.h0000644000175000017500000000361714342422106024360 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_direct_if.h : The direct BUS/Slave interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_direct_if_h #define __simple_bus_direct_if_h #include class simple_bus_direct_if : public virtual sc_interface { public: // direct BUS/Slave interface virtual bool direct_read(int *data, unsigned int address) = 0; virtual bool direct_write(int *data, unsigned int address) = 0; }; // end class simple_bus_direct_if #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_non_blocking.cpp0000644000175000017500000000560314342422106026775 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_non_blocking.cpp : The master using the non-blocking BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "simple_bus_master_non_blocking.h" void simple_bus_master_non_blocking::main_action() { int mydata; int cnt = 0; unsigned int addr = m_start_address; wait(); // ... for the next rising clock edge while (true) { bus_port->read(m_unique_priority, &mydata, addr, m_lock); while ((bus_port->get_status(m_unique_priority) != SIMPLE_BUS_OK) && (bus_port->get_status(m_unique_priority) != SIMPLE_BUS_ERROR)) wait(); if (bus_port->get_status(m_unique_priority) == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%s %s : ERROR cannot read from %x\n", sc_time_stamp().to_string().c_str(), name(), addr); mydata += cnt; cnt++; bus_port->write(m_unique_priority, &mydata, addr, m_lock); while ((bus_port->get_status(m_unique_priority) != SIMPLE_BUS_OK) && (bus_port->get_status(m_unique_priority) != SIMPLE_BUS_ERROR)) wait(); if (bus_port->get_status(m_unique_priority) == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%s %s : ERROR cannot write to %x\n", sc_time_stamp().to_string().c_str(), name(), addr); wait(m_timeout, SC_NS); wait(); // ... for the next rising clock edge addr+=4; // next word (byte addressing) if (addr > (m_start_address+0x80)) { addr = m_start_address; cnt = 0; } } } systemc-2.3.4/examples/sysc/simple_bus/simple_bus_fast_mem.h0000644000175000017500000000721014342422106024214 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_fast_mem.h : The memory (slave) without wait states. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_fast_mem_h #define __simple_bus_fast_mem_h #include #include "simple_bus_types.h" #include "simple_bus_slave_if.h" class simple_bus_fast_mem : public simple_bus_slave_if , public sc_module { public: // constructor simple_bus_fast_mem(sc_module_name name_ , unsigned int start_address , unsigned int end_address) : sc_module(name_) , m_start_address(start_address) , m_end_address(end_address) { sc_assert(m_start_address <= m_end_address); sc_assert((m_end_address-m_start_address+1)%4 == 0); unsigned int size = (m_end_address-m_start_address+1)/4; MEM = new int [size]; for (unsigned int i = 0; i < size; ++i) MEM[i] = 0; } // destructor ~simple_bus_fast_mem(); // direct Slave Interface bool direct_read(int *data, unsigned int address); bool direct_write(int *data, unsigned int address); // Slave Interface simple_bus_status read(int *data, unsigned int address); simple_bus_status write(int *data, unsigned int address); unsigned int start_address() const; unsigned int end_address() const; private: int * MEM; unsigned int m_start_address; unsigned int m_end_address; }; // end class simple_bus_fast_mem inline bool simple_bus_fast_mem::direct_read(int *data, unsigned int address) { return (read(data, address) == SIMPLE_BUS_OK); } inline bool simple_bus_fast_mem::direct_write(int *data, unsigned int address) { return (write(data, address) == SIMPLE_BUS_OK); } inline simple_bus_status simple_bus_fast_mem::read(int *data , unsigned int address) { *data = MEM[(address - m_start_address)/4]; return SIMPLE_BUS_OK; } inline simple_bus_status simple_bus_fast_mem::write(int *data , unsigned int address) { MEM[(address - m_start_address)/4] = *data; return SIMPLE_BUS_OK; } inline simple_bus_fast_mem::~simple_bus_fast_mem() { if (MEM) delete [] MEM; MEM = (int *)0; } inline unsigned int simple_bus_fast_mem::start_address() const { return m_start_address; } inline unsigned int simple_bus_fast_mem::end_address() const { return m_end_address; } #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_test.h0000644000175000017500000000715314342422106023406 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_test.h : The test bench. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_test_h #define __simple_bus_test_h #include #include "simple_bus_master_blocking.h" #include "simple_bus_master_non_blocking.h" #include "simple_bus_master_direct.h" #include "simple_bus_slow_mem.h" #include "simple_bus.h" #include "simple_bus_fast_mem.h" #include "simple_bus_arbiter.h" SC_MODULE(simple_bus_test) { // channels sc_clock C1; // module instances simple_bus_master_blocking *master_b; simple_bus_master_non_blocking *master_nb; simple_bus_master_direct *master_d; simple_bus_slow_mem *mem_slow; simple_bus *bus; simple_bus_fast_mem *mem_fast; simple_bus_arbiter *arbiter; // constructor SC_CTOR(simple_bus_test) : C1("C1") { // create instances master_b = new simple_bus_master_blocking("master_b", 4, 0x4c, false, 300); master_nb = new simple_bus_master_non_blocking("master_nb", 3, 0x38, false, 20); master_d = new simple_bus_master_direct("master_d", 0x78, 100); mem_fast = new simple_bus_fast_mem("mem_fast", 0x00, 0x7f); mem_slow = new simple_bus_slow_mem("mem_slow", 0x80, 0xff, 1); // bus = new simple_bus("bus",true); // verbose output bus = new simple_bus("bus"); // arbiter = new simple_bus_arbiter("arbiter",true); // verbose output arbiter = new simple_bus_arbiter("arbiter"); // connect instances master_d->clock(C1); bus->clock(C1); master_b->clock(C1); master_nb->clock(C1); mem_slow->clock(C1); master_d->bus_port(*bus); master_b->bus_port(*bus); master_nb->bus_port(*bus); bus->arbiter_port(*arbiter); bus->slave_port(*mem_slow); bus->slave_port(*mem_fast); } // destructor ~simple_bus_test() { if (master_b) {delete master_b; master_b = 0;} if (master_nb) {delete master_nb; master_nb = 0;} if (master_d) {delete master_d; master_d = 0;} if (mem_slow) {delete mem_slow; mem_slow = 0;} if (bus) {delete bus; bus = 0;} if (mem_fast) {delete mem_fast; mem_fast = 0;} if (arbiter) {delete arbiter; arbiter = 0;} } }; // end class simple_bus_test #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_arbiter.cpp0000644000175000017500000000703714342422106024413 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_arbiter.cpp : The arbitration unit. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "simple_bus_arbiter.h" simple_bus_request * simple_bus_arbiter::arbitrate(const simple_bus_request_vec &requests) { unsigned int i; // at least one request is here simple_bus_request *best_request = requests[0]; if (m_verbose) { // shows the list of pending requests sb_fprintf(stdout, "%s %s :", sc_time_stamp().to_string().c_str(), name()); for (i = 0; i < requests.size(); ++i) { simple_bus_request *request = requests[i]; // simple_bus_lock_status encoding const char lock_chars[] = { '-', '=', '+' }; // simple_bus_status encoding sb_fprintf(stdout, "\n R[%d](%c%s@%x)", request->priority, lock_chars[request->lock], simple_bus_status_str[request->status], request->address); } } // highest priority: status==SIMPLE_BUS_WAIT and lock is set: // locked burst-action for (i = 0; i < requests.size(); ++i) { simple_bus_request *request = requests[i]; if ((request->status == SIMPLE_BUS_WAIT) && (request->lock == SIMPLE_BUS_LOCK_SET)) { // cannot break-in a locked burst if (m_verbose) sb_fprintf(stdout, " -> R[%d] (rule 1)\n", request->priority); return request; } } // second priority: lock is set at previous call, // i.e. SIMPLE_BUS_LOCK_GRANTED for (i = 0; i < requests.size(); ++i) if (requests[i]->lock == SIMPLE_BUS_LOCK_GRANTED) { if (m_verbose) sb_fprintf(stdout, " -> R[%d] (rule 2)\n", requests[i]->priority); return requests[i]; } // third priority: priority for (i = 1; i < requests.size(); ++i) { sc_assert(requests[i]->priority != best_request->priority); if (requests[i]->priority < best_request->priority) best_request = requests[i]; } if (best_request->lock != SIMPLE_BUS_LOCK_NO) best_request->lock = SIMPLE_BUS_LOCK_GRANTED; if (m_verbose) sb_fprintf(stdout, " -> R[%d] (rule 3)\n", best_request->priority); return best_request; } systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_blocking.h0000644000175000017500000000477614342422106025602 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_blocking.h : The master using the blocking BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_master_blocking_h #define __simple_bus_master_blocking_h #include #include "simple_bus_types.h" #include "simple_bus_blocking_if.h" SC_MODULE(simple_bus_master_blocking) { // ports sc_in_clk clock; sc_port bus_port; SC_HAS_PROCESS(simple_bus_master_blocking); // constructor simple_bus_master_blocking(sc_module_name name_ , unsigned int unique_priority , unsigned int address , bool lock , int timeout) : sc_module(name_) , m_unique_priority(unique_priority) , m_address(address) , m_lock(lock) , m_timeout(timeout) { // process declaration SC_THREAD(main_action); sensitive << clock.pos(); } // process void main_action(); private: unsigned int m_unique_priority; unsigned int m_address; bool m_lock; int m_timeout; }; // end class simple_bus_master_blocking #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_blocking_if.h0000644000175000017500000000426014342422106024671 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_blocking_if.h : The blocking bus interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_blocking_if_h #define __simple_bus_blocking_if_h #include #include "simple_bus_types.h" class simple_bus_blocking_if : public virtual sc_interface { public: // blocking BUS interface virtual simple_bus_status burst_read(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length = 1 , bool lock = false) = 0; virtual simple_bus_status burst_write(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length = 1 , bool lock = false) = 0; }; // end class simple_bus_blocking_if #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_blocking.cpp0000644000175000017500000000500014342422106026112 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_blocking.cpp : The master using the blocking BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "simple_bus_master_blocking.h" void simple_bus_master_blocking::main_action() { const unsigned int mylength = 0x10; // storage capacity/burst length in words int mydata[mylength]; unsigned int i; simple_bus_status status; while (true) { wait(); // ... for the next rising clock edge status = bus_port->burst_read(m_unique_priority, mydata, m_address, mylength, m_lock); if (status == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%s %s : blocking-read failed at address %x\n", sc_time_stamp().to_string().c_str(), name(), m_address); for (i = 0; i < mylength; ++i) { mydata[i] += i; wait(); } status = bus_port->burst_write(m_unique_priority, mydata, m_address, mylength, m_lock); if (status == SIMPLE_BUS_ERROR) sb_fprintf(stdout, "%s %s : blocking-write failed at address %x\n", sc_time_stamp().to_string().c_str(), name(), m_address); wait(m_timeout, SC_NS); } } systemc-2.3.4/examples/sysc/simple_bus/SLIDES.pdf0000644000175000017500000026515314342422106021520 0ustar carstencarsten%PDF-1.2 % 170 0 obj << /Linearized 1 /O 172 /H [ 728 844 ] /L 92779 /E 7929 /N 40 /T 89260 >> endobj xref 170 16 0000000016 00000 n 0000000671 00000 n 0000001572 00000 n 0000001731 00000 n 0000001941 00000 n 0000001993 00000 n 0000002174 00000 n 0000002605 00000 n 0000003123 00000 n 0000003310 00000 n 0000003503 00000 n 0000004268 00000 n 0000007426 00000 n 0000007505 00000 n 0000000728 00000 n 0000001550 00000 n trailer << /Size 186 /Info 169 0 R /Root 171 0 R /Prev 89249 /ID[<0cfdc2120fabb28e95fcc28991e83e97><0cfdc2120fabb28e95fcc28991e83e97>] >> startxref 0 %%EOF 171 0 obj << /Type /Catalog /Pages 165 0 R >> endobj 184 0 obj << /S 1016 /Filter /FlateDecode /Length 185 0 R >> stream Hb```f``$02 /+Pc&X0I*K1cdo\ 0/'y2 DR}UtsrE!΢U$`D| gEGɎEpL}%S;:Miz˩@)Wes`6ZV/,ev)If Sg*kFI//m)"EBg a`&R2Ϙ},/ȁS*r_5]> endobj 173 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im1 181 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs9 174 0 R >> >> endobj 174 0 obj [ /Indexed 175 0 R 255 183 0 R ] endobj 175 0 obj [ /CalRGB << /WhitePoint [ 0.9505 1 1.089 ] /Gamma [ 2.22221 2.22221 2.22221 ] /Matrix [ 0.4124 0.2126 0.0193 0.3576 0.71519 0.1192 0.1805 0.0722 0.9505 ] >> ] endobj 176 0 obj << /Length 356 /Filter /FlateDecode >> stream H|;o0wc8G*JoURh㴈?޹vTsξw_41dxlFقY,8$c&Ɇ|4BKAbVh^q6ȴA≊i0wD׋ٸ"ΤRTy:&,xSߦ!TFB ́]vI]eߎr2Ku^ytυӁsb@6X}pE6_=.,n7opZzyX ' RF͵%%MIh ! (#kP4y.2x(uT5,#0u0k}ޞ,cG‹퓚űnޝ5udF`Ig endstream endobj 177 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 146 /Widths [ 278 333 0 0 0 0 0 0 333 333 0 0 278 333 278 0 556 0 556 0 0 0 0 0 0 0 333 0 0 0 0 611 0 722 722 722 722 667 611 0 722 278 0 722 0 833 722 778 0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 ] /Encoding /WinAnsiEncoding /BaseFont /Arial,Bold /FontDescriptor 178 0 R >> endobj 178 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 0 /Descent -211 /Flags 32 /FontBBox [ -167 -376 1075 1048 ] /FontName /Arial,Bold /ItalicAngle 0 /StemV 133 >> endobj 179 0 obj << /Type /FontDescriptor /Ascent 935 /CapHeight 0 /Descent -211 /Flags 32 /FontBBox [ -137 -307 1000 1109 ] /FontName /ArialNarrow,Bold /ItalicAngle 0 /StemV 133 >> endobj 180 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 246 /Widths [ 228 273 0 0 0 0 0 0 273 273 0 0 228 273 228 228 456 456 456 456 456 456 456 456 456 456 273 0 0 479 479 501 0 592 592 592 592 547 501 638 592 228 0 0 501 683 592 638 547 0 592 547 501 592 547 774 0 0 0 0 0 0 0 456 0 456 501 456 501 456 273 501 501 228 0 456 228 729 501 501 501 501 319 456 273 501 456 638 456 456 0 0 0 0 0 0 0 0 0 0 0 820 0 0 0 0 0 0 0 0 0 0 0 0 228 410 410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 501 ] /Encoding /WinAnsiEncoding /BaseFont /ArialNarrow,Bold /FontDescriptor 179 0 R >> endobj 181 0 obj << /Type /XObject /Subtype /Image /Width 792 /Height 594 /BitsPerComponent 8 /ColorSpace 174 0 R /Length 2987 /Filter /FlateDecode >> stream H}4fpbfsQ2<7}J~ft(S;YI_ bd:ZMӳb *\O'Q*"Oe.zx:0hUE T5p1IhOGZl`& 0:L쌧x_|Ԛy(@C8j'˵R[̤P7]J;4*[t Z2>׀D/W ׳.]~H^TYY0N ʌdGKEd2y}ũkS 9x.x>t]7WOf.]ӷ1ayf!x'i[wSxfEp?&kEŃ[MTDO5I+Zxゴ\/4/?Q3!s[ܮ/JpHnwGSÚݦ]?A\wpLޥi}' he;/`D&4 "u[OTEA'JU g=TrND^k]I_,WfDȓCzRF k 5j7w6]`ޱƦH&I͝#{ t7NREܢn5]z(f ̯9ɭvZF r1,T_U=Ce.Qm"xaC(زH%c.x ;Tr[1,|][Ua_qajV ?MbNQVt`WMF6`J:LweEE/ˡ`;0Iuz4 g[M0PMlaۈ2+ͮ%wԀT(N>`LJGmjn zUی!H3(״fe;u,0uvn%5^|#I+1",jrz=yc ƟwHb4SrOޙ]yCu.!wYY9o!&c?Kh~sJYc{aUf]+(5[T٥0W'M:֏kv䧩u\eɱF9 0t.נcYE1j)o)SQxIwa9NJ-aǚ ;5{ (ԿIu$iIy9k.vl3WveQ^'SI(P/"ƑWR~S1jǎTkoE>YK6.O_GvG.;NZ'u/w.[/T@{ڱ48שtmiNŷ듋r#(;-rqZ`rbBwu|[1ź9W.N j dK |Z.fJf/jN%Q/JtEt!禹eYlIh(qCgydfuy:v/fxrR'iEٍs^Pyes#}#ݯb*iUeG(5G(ۜi?%lY^GhOu6PkH^GFoazj$b377f9޾Y1Ž & m?ԟOVkys[Z xW0eQ(FP!K,d;o>gNyt%jIA,5: $R:1D'DbI ŀ7g/6ŀ?b@b@Ъ-U@&e=1ETƣKtH?N͓<\m)h d 9 }L]c@2d@k޿.:R7cc@2e|4FǀlwLy3a hY3hʸ5:Se q4}u#g endstream endobj 182 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR /Identity >> endobj 183 0 obj << /Length 196 /Filter /FlateDecode >> stream Hb`,,9rL"*:OBW^M^_Mmzffqqj;,GLgM.^qAAAA;B#B#Sb"d-/-/s,pmlh8`iߣq43ͻhERWo\˳nݽ-dطٹso3Q@U`hH endstream endobj 1 0 obj << /Type /Page /Parent 164 0 R /Resources 2 0 R /Contents 3 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 2 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F4 119 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 3 0 obj << /Length 801 /Filter /FlateDecode >> stream HUn@U_TbW^"%Ej))ɃqD &5$i$ZY29sff0 7H<<hJR5.ۣ`^Bcqpx?61%q]8̛dDJ#Dګ$D}\^=٣CJ (FiA4G"SH Tl,$IU ;x B/u u(reW|bB٩#yU t&5BN8ݢ!m}+R(:(s7 CC>Ag`}G 5%]j2e eҲ~Fe(pt_UN"72 fj@pɠ-SClsi%nDڹq|l!'ly}_vźO>1i JK 2x DhdT N ೅3dÙ;x5>E,=B,&.L??vH=xB5/ـ庩\Uzyn3fɻO`vշpgg-b5뷯 0ࣳ endstream endobj 4 0 obj << /Type /Page /Parent 164 0 R /Resources 5 0 R /Contents 6 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 5 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 6 0 obj << /Length 387 /Filter /FlateDecode >> stream HN0E_1˲G, B:iqRTPqNsAae 2}^q¡"c I4(d$A${ gQX T MK-`ђkshˡ}TZRUf4!S2Ve:=pہLzwjqVKAYP,ӘYU"i"jh2jĻ6t F]A҃kulk6~?&n]hȷ endstream endobj 7 0 obj << /Type /Page /Parent 164 0 R /Resources 8 0 R /Contents 9 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 8 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 9 0 obj << /Length 635 /Filter /FlateDecode >> stream Hێ0mb.S>IVf X6wlv9t q&E"NdzeB 27}s`a<xB3B7Bq ޣG>g adQb37}[qn☒8>\嗩7MSH#(DI`"v5inokϗh Q"A"Ƌ([@ [~J^[V-K}w~ejf쓽rpa.ҋ P+mVNwhd:]}KdyjNCfh_u؞ \.>hf ^F7't>Fmo'rRj_x%Rѿm`YLԥ^L>,hH< (u:E6˲v9ɹ|L[XgHn:> endobj 11 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F6 128 0 R /F8 129 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 12 0 obj << /Length 600 /Filter /FlateDecode >> stream Hێ0ŭb.>$+$$貨H@"d6I:]ބŇ$-˦Pi5v-ϴɠ4@cJ4{A*@\Qȳ0f)$gmD}I2,wޏef˚M>6KEj㹀Ŀ]$"0)j('&)$ab brs6D ?!:9?%]6>lUa] jb8瘊g/z'4 gs9CA]?i~VʶMUNCܩX`؆g42LFidS<,QE{]ך8B+悕t2(M['+"Xy@Ṉ4TA)m:enx0'}l儜 g> endobj 14 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F8 129 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 15 0 obj << /Length 865 /Filter /FlateDecode >> stream HVn0+M=iȡnqP4JCџwA?0 7REC݁fOK :&;0my$yXs# +ݳLm2 Rt\/[;yPv;W{,yi!OڅE ٓꑬU֊ YXLr+ЪмPRBpr"JRM/I&>\kvMz 0vs^Bc4"+p .i 5@FMta"IsI0UT 5^Ӟrqؓ$0zt4ظxG 4"hO]麞htȧfh%&̈́jSMtudS66R2J yD۩Ј~`Pǚ媏hPWǐ?ҍG2ya 섆"VxfxwgyfNn+.K XjsNNE[xGvKV3V'Ȩ:=@13iW' endstream endobj 16 0 obj << /Type /Page /Parent 164 0 R /Resources 17 0 R /Contents 18 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 17 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 18 0 obj << /Length 1127 /Filter /FlateDecode >> stream HWK6 F:nEZ>!q dXߗ%1.Y4E~>R\,tbJ?΅;QX'K/y,A7JbSY(A(=))'l}yocaP5Ųi!5\YډEJ:VQic įߕx,l, ϻHra|`9eNK9EFL q_-q " sе8*d-,ATm:6zM󶰕B'"J>Kd3G2-6wIOm1f?H@c_Z#+i>`O,Z#m1AW$:M|TQ>3>@ \G\[Yb0\F;z )E&pD0P'IW~y)5I%ߕ#`^Id TfD^W.h9=jၚ0gh#J @D?` īhӔ5͉Wn {ؒawשf4SM# FD:-~hiF̉4cv:+ $u,&I8z Z5'Z|>.B7Gp._E\:Ł8= _[VKYjS. y&U_ZuPJ5~uz*RXw;Bc5,\bu"b0ٔ='hx;^:"N*%[(Bm(&i3%EP|T5.2FǼD }ظt[cAu& F˘ #|*shI'6~^= "nLrXa endstream endobj 19 0 obj << /Type /Page /Parent 164 0 R /Resources 20 0 R /Contents 21 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 20 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 21 0 obj << /Length 581 /Filter /FlateDecode >> stream HTKo0 W,Q5- awjw2gHw]\4ۿ%Yd$?~|~Ɋwo=,7(46Z@^mV'?r/`J$,^vx!`'e'sUTnX4BjVdYBNo)d!/MG:;[cVȅ<^Lr+ȪTdM.w&\yk=mZm^6_})!Bt(t (QýaJ I" ʘ՛ѕ?'y%&߂LY]X& eSƱ }*W.\q!Ts9&LcaGWgs<\AsF=0%0e13$VpunV%ՐIwYFLe8=1P|~nt7ͬSR|;pYW&Rej$ٌ:J=$:'U9`QX9q]IDЁּ^9{ 'T_x~pSFSMMS,QyFkѺmm!sJq- kH0^ endstream endobj 22 0 obj << /Type /Page /Parent 164 0 R /Resources 23 0 R /Contents 24 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 23 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 24 0 obj << /Length 1790 /Filter /FlateDecode >> stream HWKo7أ@k>=nP@SCER)FmA}gHp]Ea+}8޿2rnA=Ը FF#X.Iі<ڕX䓔_c)[1/?/_3~ߏO6g/f誛 TX:$LQ-9=18h,e |Ƕ:n%ﳜh YǷհ`1}bz,yRĆSӰ':o>y=dCXQy[Pa]JlQ Bb5PЏf1[AUh@D1Bz#b 'QɄ$_xm-"ApXp&TNN\E#OkL>V{YΜk],Z=bDfKw-QOXd : ,w:<DF\.IHuNИ豪8n$4cNNhy[L>&p^7*#Kc&Q P$-sI` y2"e䆢NAhhtVC#gcy[*/MFX/8 ty;7yu5/€Nt@gKoyƂlf^|yeÖ;|2Auw#wF{gUp,bwg17ݝUYmE,+]r7%KfUyOmrd1gb|$VCUWCiy̟:H;Pv?,tDS'z+bmU6]+(^l{T9loCU_̜Dwrj%rBt:EGCs\ǥ K~ʆ]aiYxbNaݰ_oXWė 9{7x﵎?[5(Z<i> endobj 26 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 27 0 obj << /Length 1809 /Filter /FlateDecode >> stream HWKo7أ@k>=nP@SCER)FmA}gr]Ea+}8o޿2rnA=Ը FF#X.Ixn_??}ݝz8O'ٚ@Ti`. r 32sQF!\NUک*\MF+?9,cfT9w^nBJ^~Q ?` R}) j+f̸^+yo)kRi4Loy+fI_,zڵޛU' U  dQ: AO\Nw?><ڕ')wG6+^1/?/_3~ߏOx#l^̎U7oHZ|szbp Vd%IVaVB>EBtDm5, O]%O`p9 zczN9ԑK3j5o))TAsieΰ!$BkJ]KxC@?Lo*VJT 0 r(}U9*ķ^K#q ֢i*7{z+4g /5`Ǚi2$=D?Ez1(baduNpZ-Td9 AJou3W|~0oK]xº$0+Y!|ËRARTpEU% e%YprB;zJ^cp K"XX€Nt@gHK5s?Tk%7piBt ֑[/jA{zVyo"z&/ عK*Dy) $JtVfm,ym^ B6/4jVyٰeg{fQ,T7ٜYT̪ Ynf YƛnfUVRf•.U2epRǬ8P)SИx1Z>H nFal:'H۬;X_\M_թWvd}Sx =SV ~pݩʩ#UG7;t9Ǽ,h6, K+v'p h톥z"ݰ>p6J\kۚ)rku]CK 'l&*.lGhjdJ"Zsk;^Qvh|h^ h׀{MX5z-  { >nU8E ]"N+伒|ZiG{ʱ: կC_n薌XF)Dܤy8/D:)x877/ûÀb'@qˈ&l3FVݑ-Jdu>?`,۫q| )c(ָHL( R@[fx)'ʻdO~J/Pԛ~*r?4*Gf{ /S~ pe OWri) d_;#Έ}C^Ck w{o,Kgf1F endstream endobj 28 0 obj << /Type /Page /Parent 166 0 R /Resources 29 0 R /Contents 30 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 29 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 30 0 obj << /Length 1970 /Filter /FlateDecode >> stream HWK`nf"HƲf=Nk&ȿOYEv[Zc ޯUy=vw>kgԣ\{kTA]oz9uݿ;aGd|O xrs zecw7*xsA7x8?sZ#ݍ1o#a 9dPc>Q1'Em$;ZA)‹vRc J?:V}WFOKgӡ| o82ZRReI'݇KSŀC$mY9:Br@~U1:dTȗ(tN/CSt:υ>YD{g>0uG7dz`EP2-TNž0Ƹ; xglVyP2B2CQ_;2 8υ[o,i7{i*MEiBLp.[Vف@[H&S/LXYsUK q79coo"?PaE^n1|ׄl^ 4[c-nY᪑"G,rܛU#-UpA֐rBo;]2?|~|;ؕ :)$.9(|֙*O*}XBȓ sԳ0P(BpfXd38ZUfɡ>R!62|[nΥ/`{t&+, Gyf=`ZkJYJޖӌQNbpB[ӊr^qVQ}ZJ8 F(ծ0#:Ra]>jK{MT㱻9Nu?cZ @sVLE@FA!2+[& A 1)NG8>c߀nxmjfi;.w7דWJNj+6? N鋺OW ~C}b@ǯOOOAI[ M@a.RmKV&p*8U҅~=bU`_ endstream endobj 31 0 obj << /Type /Page /Parent 166 0 R /Resources 32 0 R /Contents 33 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 32 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 33 0 obj << /Length 1964 /Filter /FlateDecode >> stream HWKoFWtnQlnj1<9,eo,#TuWUMZ;BHw/ƥ|pḲiBܷޙuޚSXC;"[v?RvU٥:i =ތu47?~n~wx;F&b+*oYYtѾK7XA9ۑH5%M7Iog[q5| ޿SMpd΍PL͡ɒPz%>× ( ̃ȱ-C4觨I^fQ1Mvau<,ɦY)m%VH/}KcaZ0W#{rHٓ&oV+6j akLEaP;?+%#yXv. /),Qb9tkZ.F*.|gy}_vdϟNV1U.`>%Y)rEN!ŻLĩ(am Ta.&gֆ䡽ڐr_ྦ/°a|ڄ!k6z-,pHF\a-pHy! kSTAsؒL^>>^HJـN 8)&.=\ɔ|u C6Ξ㐮hR*Oe35UP=B9^d||Wާ;`W tS Svȃ.4yf=(Za,%o˩F&.(@[/ B\WLXEA(E^ `\SwI\G=yU(8EcHy)^UD pT`%*-CWfq)FGr eBs}*rO,Bpr֑[W 鍵m9@U\"rmq誸@qѵAds"+Pi!b%#u\G/}!\E(qU\ U\6tٞY3w3$,ߕϐ̢XάWL۾YB,}5 J1<u6Rlymy3B+L@zjwi2J\siIx3͸*֧ eeǻYrVbz_⪰2-1g Wvօ幩`"3i7YŕS,NLI2o+>+Y%YjʬRh_y^-1kc1kcYc[c.1-1ҏ>&-E>$|6JjJ$[M [M &^%a =a"HJ{eO sbuu0to[P"X-[Z D[ZM-̆RZy{-'0ld8D`%AK BYgW-a ؒi&yd f9\  I62a75SQ>VNҿG(rjZQ+J:cOM)BJk(3 ,NTf/譍U 㹱{k]ocss~46ӎZ>,8ڒ6B' t8UG+Lbbc(r; p|Xz'z3%47?|||=O2y+zO~̧<ݿ|zz=}rXs4]w,ɨ‘Ұ> endobj 35 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 36 0 obj << /Length 1995 /Filter /FlateDecode >> stream HW͏hnJG>zi(8d&=U]v i:.tiL緭5*lAMZ濍V!Vm pj=Y;poqUftSo= `;1tj8 z<f? 4Ҵ:CNT DhϢmӡ5@.ېHw#it=!;Ա2ZS?ՇYNzo}T#sj% elvMv3 :<)0 ,G{PHū FG"{qFtK'yh I(mզn,çƆ&VU0CW|yA4$h5ac:e2u췚BFSQ&1rʟ]a4MD;LߤKԠXa6嚤lK$"r=Pp}9ڌGu:8RT?1tMb*;7(| )$JN@1+onRkHڐ,wRЯtÇw0p aΖ,5Kx5]#E.8c# 7S!kR8 T9>lEw&W_WPas:5,vJ4RDJSݥtvkPl6NO}O^(As OdggKfΡc4N1:O!7E\jT zA(p^2] sj 8<rAp4[yApyα8SB9z0xAp֦HOgR3aYǮ9"Msp27\y *W2<dD)6m(:O`f.zcVq@3\\1&.G6u8.#09E}Hyf M^9 `}Pq `&q)܏$eʈX䖼02 ɉZGto^0Ԃ7֒,Vqa ˅ Tq"%.,d@s oq=SJ\ rWq!<.4jqYe"g}fQ,GY6Ϗ̢ܘϬL̲mW,LgY%Vdf2ypx)c,,[`d|&)N?RI(ܑt/./Y̤f5oW̛8 y7KqLgK\V%lZCk ە]p SnLɰ2 > Y%?jʤR[iaxڼL7/ټL[o^FB޼3ۼ6߼_n^Do^_f7/ƬK\զKBUnV.uKjjO%dtT1IUe9B 6xi^PQq+5N0wvo5X]Ypjϭf j̬&jt&jon5cV2eٜyLqJl5g8_;NA6[=pd ֜upf̼.!0l,e0%ش&ќt8%6qA9-8 騏>5`\ )Ů L09e)TotPt#&#*> endobj 38 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 39 0 obj << /Length 2053 /Filter /FlateDecode >> stream HWKW07 vQ"cwdAX9-q'='ݝ ߧ"%JaaKN/ʤ˩ѨtF=Co }~>X}N+zY>H{yt7XS pfUpڧo:qpN6Q'DߺwOw@hu2ȇʢ!̠y{RCXrQ9"Ա2Z}T? OO}Qt֒B2u.KB}ϐc/L(+̂C4tR+Iľ8L'|>D'<4IP MӟfVZeY#>|A4*I kÀwfu\/Jo--0P))ZPiKsaX) L)}~`4!8&I 00RTǟ_^ϗ[,q?{y*ULi1= Uv`ߠ)X)8%s9UKYp!9ckC_mH/~4/°n>kk6z- X[ ;^5RR#\pn-wwj oT@U[ҕOgRa ;y!V'ߏ5/RdS S2`Rl)M8ٻ/ B8p+2**P߇rbEQd|z_/`Wst+,giFz!P1”n-Ϣ}(esQ]*`Ƣ. B/ PQ yZ<x^شX^;=gar0W_7 Y(|A-39YZSEgTAB)ͳ8ݔ` 8 `xWA@V2B8FXNJSoy `ɋJ:'F qU#]|V(}jAd YA@V2B8FFťI* ͵-y'.0LYąDK#Z/y_0Ԃ76qȅ_ 4q7,R5. XɀF ޮB=z Ը2.Bٌ oBe\hԬⲡL̢_Y6kHY6kjfQn,gVL̲}lfP3z̬*V*׼"Ǘ(:flg) m0 EЌx7C RyP&dLda"7/e9{9R0րXywsnyno %e۬4*XK!-eV뽞d~##˄v2eJ(`݋h݋c{ fc4IV+8kS(_[mb8K褺`ZUP ?E/-90Wvn5XX_Z-ՂYXMՀZMդjlX-eP |dْyBqFZ2įQRegNW.,a t KVkpI]#{ςY'^$ɦZF4pM]oT>ZNWdJ|PԴ\VtFR1#j PfNY Շn0>?jk>KZS;MOtߏc'@sVˈE@FA!2#[& A 1qNG8ޯc7`n?jMN9~Aoݏ~}}xz߅CQ}}z~}yFMPw3@wGNO3b|EE]¾>ׇyC# L/xJn8[4n[~+Vvp>W'Wu=Z}2';\0%2g̍ endstream endobj 40 0 obj << /Type /Page /Parent 166 0 R /Resources 41 0 R /Contents 42 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 41 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F8 129 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 42 0 obj << /Length 2158 /Filter /FlateDecode >> stream HW[o~ׯ`Ƌ̘Ë6@IXŨO Ύo5tsHR&@tx}sp*?Jxq;6=-HZcw>DzI'L~N'-zUABxn]JwNʝ< dɝ*SQj}=Z#4RY r>'*DhǢC K|AN"8oKjH 56oL\|2o| u$oxߩ>Ӡ| ^SDȜ:IJ}$>ps! Ɗ@WHV !Bt#x~}8QRT?14M1Nb*/PRJbVZOUnR\jHFې4؋ )7s"}e`V捾$ dB p46F5cr7FWaXC w r^aK0YDb DrR0;5-$^d͋8T”7)<4TyJarD E2`**5PrbEe{UΝ+<7`W3t+L> :ӌ@ S\fd+vQ`]*`ʢ. L. PQyXy\CrQ04c`c q & s.ruESpEh"|Θ:v Q4Ĕh8B4Z0TU]G`R2eDsu,rM 3LBpr[/jAq0債&.`Y\2wKA@2т9F˸P)5.9 SV|52>(gfYUa9 btfiUQJYW2ypRl{=^ϖ|&3-OSp M.+7i3 0JdVYldJ2{#,p/G &c5nu!Z\}ύ429DvE o[81՚Tk)޹೐U3LjI@Wix{)^^ؽmw/UVB޽3۽6߽[^D^_fw/ƬlC\*ʡ:NKUHGS #UgLR+{`YNPc?E+.9N06l5hXmz[ՌYMՀZMդjƬXeP \Ȳ9b jp`NA:[=prAf9f8]âՒ3j\>g ` dc-#Y SrUT>SdJxSԸDžtGFR1BaJki(LNY 06=QKk>S'wR C9\ ! sVYǖ@^GA2#kL]]ãx>~biO+jL5 c\¤= *_+LR. 0hl2X pw$1ZeI0X1|nv;B|||z>_}?|xʋIl##O7(=* ,J}~qCk t|_rvq h8JSJɜ yH/kLulԟoB h\ohKr#~B o7d_|roן?> և)u%7_FϼN 3cY)g[MO$ endstream endobj 43 0 obj << /Type /Page /Parent 166 0 R /Resources 44 0 R /Contents 45 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 44 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 45 0 obj << /Length 1971 /Filter /FlateDecode >> stream HWK6W810>J$u` awΌa;F*zu]tm=uqa\3>:3~y^?3җ{8G"0z~./nJNfJ6uxXW@Ѹ ΑA9O?ǘn [3A"M9=&!=KOYc Y^NrIOtٛ2 E9}Mn&p(~)fE`GM KGBJxRd1u? 2{!'L G}ǼsЀHBmTFf&}y`Z+#zL,.Ia Z#6PrYr\=Tx?FN9E|tlwS8[EC$p9UK7mA޺ڂ̯m~{vJG*? ^u fÈvawO{~{zIyn(qTH+3/?~}Bjwz D'i`-5d aKveT%N{|K~U(b2dwcQ4%Yʰ}*!u:xF ;O`\ʠ PS#Tk1q=/CV-]ʹdvA r l~O9x+>2- \h Y a'N&aT q+G jg%ӺsO Ro\Rhk.n`%xTO9Rt`:+DBtсE)CjKNEj˂( hʷ0$L׽׳:ᔀvh\vpӭ S4˭` st`:+DBtM\]H%:!zʡ^$|g 湉 @~iK5.ʀNt@gHqfޅ 5.Eø..DoBsg[6zfQ_f.2\f,4Ga?ܜi&viVY}FSS&Λ:5 GWqS4 pLE=wä#Mré(Wg)H [ JVrTZeKay)Fv=ߞ;WNp<# hv> :ѝT=;9;]5%zdSnŘ +Cec}eu;K8Eva}n_dK8I}(!kJ}Pk1kJǤNQ&Vɦ ŷJ44bQĂNS7p^/uk^{4Z4TxMkt&k΁RZp/kp{M{pz~e=Nodk#.omR(p.fSq8HC@\hc<̖O)GI:YeR$ݖ#:NyqG*q~m8pRޮx c/ H e016i;?~a4Jy).h{!wЩ! Pݑ#NKKd,u$L0m&!2 Gv@LޣU<a]6e2M+`f\Уƍ=E~6=r劍?_)fǷ c(В:r:=_$gj.eC0Ag LjiK=JFxgrZjM7O5 endstream endobj 46 0 obj << /Type /Page /Parent 166 0 R /Resources 47 0 R /Contents 48 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 47 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 48 0 obj << /Length 1993 /Filter /FlateDecode >> stream HWKs6WਸJMtw7:@`ztZї[WSwɪ^Vr}.N44=ɱM= ?LNZoݍ ?L'<J@'͠C>DVVE Iw~heFP7(/wKfh 3n;ݽ>9V}SFi3#cӡ~ ޾SU%pdNdPE˚1$}r@ y|SiDoEHatT+Ʉ$\NN|KOteh NSA+M;+8'=:3 +QO$^c36]A'"n9 GϿ ޵AiKsaX) L)5(CpM\ޗ00GoI5cbfL>9951("OSUkgj=nNyo)gQxib4wNuzo:i9eX/štj`2E~nu|IfYt|{U*)'ብݏCo"6D†/Ac!G(* Pڊ"!6:F]+7W;#;e7> :ќI-9]5ZdQC1eิanXfaݰLYdj"z2~aް>pvJx뵉>Z5ksW&RÌD'Ӆ[%axm0(bᶈ\ڍ`ueZ4Thkӱdkx-eP |dݒyq'{-rQReN/V𤋮5e+y%Lκ$kX)r$+*H,G95oFюX"h8TYp8e)To'tKnb"Z=qyttj:t7 OСwi).SVќ[ (SCe@5G a1֑\]RKk휖V2 G6xWwX^1Pwd)Lېc\ƒ ڪ'HKh>Շ?Y=PlM5Lr8ëz>wzݜ_ϯ=x:H[I> endobj 50 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 51 0 obj << /Length 2022 /Filter /FlateDecode >> stream HWKoWQk@~q@S<)rlD?UU&5a!@zt=yқŸw9vww9lwfkno˩{YC_n d <_{!0oCy4i~ēa6O;كn4ƍ?_g;<N&0'$(t5nuFT^-a̸؂;ƦH~Bx8k>Ӛϝb #s' t]քЏCC3<+4F 0t\SVdBfS1]zDdH? k7CVl,U2Y#1cQY9T<)ZqxqlNv[4ȊN"1Aib5ڹ0fm~`:taM\Cp0G/oӉkI`1H<)D$AQ@*¥_k>?|+Q 'ANyy)zNy\<nCvZf_J :@.waa@#6:B$ abjn!g S tMcaj>DX=C J:gy_H蛸"z﫸 M\ LU\tEHh 6.:ąu\hmcJD_h~(/$yl&F= ]9l'f h>frpщ/|'I E Em+gu7r_XdL"Ҟ_Z!1^Fg7JCS\J?帪d+g%J+s6/xe#",mh/‰~';zd-g'SS2E֝s#gG*/U&c*vs}YJy s}9]e N^\ܮaky N~sPgkk7nIm#{MM 'ŷJ458aQĢ^Sk\qx&{k:L^4Z4SyMktl&쫽ΎRZpG-'Hv2"ג :J U-alpzEK^[pyFc%d Km9ȩe7vƞ)C4Ȋ)Kz?{* s[K>sgֺ|;yg6jS\=T\Z#Щ! P͑=FSlSldLe$W/sCZ7 紴q9;C u7 # ĬެS?@ځ>w7N<_aYNckn#x|O'~y5ߟ<<|}5i9щ]N HHGp<.ͬ.Yxḩ\b\@==zjut 1]SRA{×P7i]/ wR, endstream endobj 52 0 obj << /Type /Page /Parent 166 0 R /Resources 53 0 R /Contents 54 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 53 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 54 0 obj << /Length 2046 /Filter /FlateDecode >> stream HWKϯ#WgQ3sd' W^:K%B}{SYweΨgչ{kӃVjz잺vZї=tP.?gQ:%۹g@')}OAG0;kmF5=vf?u?5ȕ(4^G0'DuVfucDoOfh 3v]BA?OdU_>tftȬo*sg-T(Kqpۇ1kH7f !z. `t4!THLXzNW^(CSt|!z_ymF@? _j8uG$RES&ۏb Hē&טw M8ewBNPqԆ? %Ôehvj ˍ%OlQb; )$%&6FhbtzQN/cKNcLY(n< bML@L UhI5|vX7Oͷ@6gu6& J`6ۖin:zI έn:is] WaXjҁ% ύ-_veD 7˦+A Q۟tVP@X.gq?B1o$^|S|B1h "XBr#ǾJaj $"alt70ҹ)8N´)^Rsy^xy +2mjzk8 GS6QP G@{0eyGAAQP?K1<6|^T 94-ȅPoZJpyٱXrE%<3Jp&VAǙT VgRLiHd RYB>DGGYFt@cK:)9<&)>EߦU:H,5NjfeIIm_ӕs6$;pn?E)`r&"+ K`q/#+XFǰM15!.*SN讍o):cɔUniip fV5]Mn &7La} ʍ#/4`+XBht :L)l:7LXZfÞJ,4(77ʋIlv(/&FRofl6,7 l%idɋ Ay)˸}a߾,0rS^c]K+ u *4']<avt2e=0-T `F[R*=nӍW"#m|T0ntCEBX͘DU0Zrth)nziW ׅ-s,3C{_2_>ɌoO2##dN2' 듌hIFe$cL}27SP''kk3I#yMMgL2+G`YOАc BdEZT4܊x ݤo{ V7^iCkYC1,k^}׌A:˜us1M\qaEӫ7ݬ'S@ ׵ W:np75cqfp.Si#-)N7K0"Gs]DPr\弒|ZiG{lhi)<4䒥T1Cb!Z|t|vS\my:8o|yj t mFȦjX+01FTvsu+Mp< a<+,+A/VDϳš0?SfVym?JD#0voQrzr>:0 Dz<z|r|%xjwϗ}_/ϟ?/m۝awedǼ~Hnvð>rQ&4bP l|Sgt.kVp9/%> endobj 56 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 57 0 obj << /Length 1790 /Filter /FlateDecode >> stream HWK5&QvlH9N( Y*v Q)z%/ểq|3ggrOL$Gexo? ?Vr2SJh O.?4S [tȊw.p_^=Θ*Ԉ¤/V>ce˓lֈ5eϿ?|~+J9oٔC~Qώ- r g 5bhD3+˩*\L lA_ aוw-e-7o=<-=pIN^~pIy5\QNdYʀNlt@gH(:(zH _ ݾ+$9-r|Kt=N hy_\iGn.tFܙ"ܪJ :@ <7^a@'6:B$̝yjj$ gtjwt;0ątzHrI5"]\/M\t^ $FtVnj]RXm\ٍ @B6.4w6qٱeghE4ss0)̵:iFNzD93l ffgtw:5e鼩hm8Sgu($e2]7G n<7i fb\ m#g^J(Uҕ\ ļ-{]]KldsD=V qpݩʩI#USGV%u-ƼHX*׶/;ۗ 7/v(ۗphev"ݾ>ۗpPCR6-(bkJǤNQ&Zɦ ŷJ44bQĢNS7\qnxskp/u=z-i&Z5`:^zM^ gk)-kuK ◝ d8Ƚ&IA{pe=N_dk#._mR(p.fSq8JC@\hc<˧r$2^u)DN7e#ю#tA_+N8#^_11XxdM4ܝΟN:>oS^ pVL&3tPCgRwd;;K z^.@ endstream endobj 58 0 obj << /Type /Page /Parent 167 0 R /Resources 59 0 R /Contents 60 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 59 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 60 0 obj << /Length 574 /Filter /FlateDecode >> stream H]o0[s 8.lS'mT]L IX!t?FDAǏs^:Ru. F*@<1~(e:/"`?"@ ?ef E%Rs~Y #)_ۮ$8fi&y&JK?0c  ℘));0oU/<7%QWT;^Ю*X]1)|ae;26nLg1A#p-o%(`>9‚(ω>E*w.%S4QW:Vd9oZ,$ׄMPj堖e+ $lZݫvj??q"0e"Ƹkyf(d4,k- S)eBY@W&9]Ƙ`vY-({Ƹ{d:US !1jJ(q^7ZUp] VrJdXN]H 599iN= 9r٘'!(xh[w>KI endstream endobj 61 0 obj << /Type /Page /Parent 167 0 R /Resources 62 0 R /Contents 63 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 62 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F8 129 0 R /F9 130 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 63 0 obj << /Length 570 /Filter /FlateDecode >> stream Hn0ŭb.NPoJ"w5^U}x`lg Jl4?/3YJ tRiDA”$="1$@te[=eј~UuQĶ 'U($7E&fP6x@c`G0!8!VF8eZ; #7jv mZzϥlkIW.tc%S{Ϛh#^„PU`?hn}rs7~PbJ/VߋOs-lFT j'vkYK{Z4Zެ,bYa-sUΨZ qx`w#*Jn endstream endobj 64 0 obj << /Type /Page /Parent 167 0 R /Resources 65 0 R /Contents 66 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 65 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F11 131 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 66 0 obj << /Length 672 /Filter /FlateDecode >> stream HK05b!IpdHHF9x$g__Nnw*Տ񌻸0)T*X_2ؘAHԏiB! u3`ݦJkD3XCsJo`Q "k8/f' <K˱y5kiݱ"pz1CPfuTNm`F^#twp1Ī2(#KeR,kx4Ip9elpJڷ#fs{=cgOv"BK&SMx:L=硯1ޙ 5DqBD5=(X75fө(%iX M.En&YoU?`bzJTuYxP[%CmV[/p<ܳi|ϝ>DU*;esYUՍXE ܨo&ZK>Wf;,~vo5iڛwȲF+8hU 9|]1#brWٙ~b1?V͠(BзjjN5*zk ~ 0 endstream endobj 67 0 obj << /Type /Page /Parent 167 0 R /Resources 68 0 R /Contents 69 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 68 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F8 129 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 69 0 obj << /Length 464 /Filter /FlateDecode >> stream Hj0z m)tB(h֥Nh6𝑢8 k{_$Tf*KK$)%/k ʌt] ↡,ha0ITyCFy蓭֞N!‘̹,T̿R2 s.,! !-usv endstream endobj 70 0 obj << /Type /Page /Parent 167 0 R /Resources 71 0 R /Contents 72 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 71 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F8 129 0 R /F13 132 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 72 0 obj << /Length 1397 /Filter /FlateDecode >> stream HWKoFFe@}qj;) V Ԛt #/>IJv 7|Jݶ%foV67 DR& x.Id-ܳ+$7/H⩮,㩬W,+gTp b@AO L)_,-jǖ0ՐA!%̧:nyy3fձlT\ KS/+H5E}"^޼71Ag$/SDhYSFkNN9! u%iG6̋lh,;V׉ߢj42Lt*pi㞻Q :*lX3˧!HWsgYHb;yɄXRDv rvhj#GAjڽ2B8Өy)] !Cࣨ jmLƗAa6Ue :p;K8ʌg[dꨞASJƑ;"bIw$ɘbFX\^2x5B3M@l<"pkNǴ-7I~C2$:!j-@;rnnbNR~Qr^iBLfgMD]N-Ք$S劃xO:s뉴~le¢!0npqZy'AtsNjsQγٜ֑G:; '{lAN<1* Y\!ߙA¶'pI7)BٴY$//o7onvܔқb >ؼ@;YU9rWNx!inaw۾;<ӜMu,?=$CBp=DuaO^Avu6!Á2=p7SeclKY#'ᙴ q_f&V0Rb?í3ny:&3xbSu>/m6z],&t1#(ik߻ 6L2 Ti fǫQsuj =5pw9SN_)gip endstream endobj 73 0 obj << /Type /Page /Parent 167 0 R /Resources 74 0 R /Contents 75 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 74 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F8 129 0 R /F13 132 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 75 0 obj << /Length 1592 /Filter /FlateDecode >> stream HWKo6FMk`eD)Ϣrhw{`H-9OwᐒNV3˾f۞+>`+j)XS֜-m[?K/n<s/KXW> W.k [ZJW9ÖۯѰB(]q ?W [@R!IlP)*amFF > ˠO}˿}e}{軡 57 dC,Z}FP>!UB%NGYR%yӪ\<+;BF2 0Y--|p&`3AT%9:[nj7Ր`jl !qұW/~_\þ_X7o'dLp]1Y"l*G \'_Aꨁl¢p3 7i3l\5:$PPzSv]p}36<#5tDoTٙvr]@!Ps/ BqSi,`6 kؠ[]+5~C;IbMe5ڑRvt1AkPJ+ep|u@;9%k pHfO2ɘ 5"B2ٖX@B% ՐzMGۑԃO$Gi̪P`5/+>I*'I" b|"Y PDr'ɴDe[T.c(Y f(YJ9Y^Zde0DF{lbUGf#LE*wHݔD B&LHæ$9 xٔ-2  ĽgO{- ;޶b$I:$P`F赇-@vۂ 蒝('da)LBˤ^BLI@4YDr$)9Izx8X)Pgax~ 0fڏ<$`8r '0n,͡w}r_>XN{Hy\7f%#+pnvtipdLI*ӝƨ ]E]rXlAem _fBWk`jUsV t+lejsƸho~UWm]nG9KE~u*rض] ~l@C|"* >+#AWpع:5b%?nZ*Nt< DL"qX\Ѥbhz.qD5\i.y$ l{jw|5LᄘwlW<3_Ƕ-:Jœ>@ q`_Ol)_op\-P/7m.+O # Y+S, nP*yO;#S9 xȆnnX{ ` endstream endobj 76 0 obj << /Type /Page /Parent 167 0 R /Resources 77 0 R /Contents 78 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 77 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F8 129 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 78 0 obj << /Length 571 /Filter /FlateDecode >> stream Hێ0ŭb.Sq}Q `-BDh&n $nv4j`Q8Nf~8+CKh3Fj@<11)#KBw58uA$ͯZtβp YyQDX 2 N"AyIfL͠(mtqΊoN58$p;XIbsSSӰB"gHE?t*\6]Vkh6ZJүfX.*\:=֓mTb98wynF<rh#F„`-v6ț۾<,ff_wc:gSӼC4)0A/Eu{Z #^x$Ю DUR]Z-ylُ٦{QN[Nq|j99g9y4ٿ8=gs S~Rb%i=<̦WPjadz?b3Ι4Mbmj B/>^rc'{ ̷3}"PRVV]m ]iJ6z1y] sl\ endstream endobj 79 0 obj << /Type /Page /Parent 167 0 R /Resources 80 0 R /Contents 81 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 80 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F8 129 0 R /F15 133 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 81 0 obj << /Length 674 /Filter /FlateDecode >> stream HM05b%-nP>m(Bnv6~/ciKiw@$yL^  tL^2XA A3(2f),t0O<u0fV!vWIIbKRBKJY u&y߭5Nh _Pbno55J*N/z9i;@'Q+.DVov; IXS 3=Q[VUh({neQSFx(̷A 9 0/!場E/C*28Or6o֨_/㡇'b8wT<5A>0=qgZ%k'n)r^p~fEd˹qqS|i~[湗ʏXu95>w]d+`ߣ > endobj 83 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 84 0 obj << /Length 1790 /Filter /FlateDecode >> stream HWKo7أ2C.XA>ROEjvw.+5 xOyݻ0_G^{;:y|g)g3NΌ`3H&pٍ~dv)]B? wI'<98t" ag~83ƦpDp7pO %6PRyaKvMYwy?h*˻%3 7-+~MۿCOqњa73>ؙQ?YoX TӰ&~2b*Vr ߊKڧ1ل,^/db9D'MuBdH}Mn"v }4PS̚AfKPX: UHœ'7w+ +Hro=BN! :b 8ϊDsYhpRR%jQ,c6qMR@vQ \T"1??}8>jR:썸rϊɱyDN!lAf@ r&|p9UKk)|u|ͧ5=xY9wXEw|])ap"tkR}Z]Ay4\P8c9ڕ/\N;,z91Ke?ZF<4<mDnC:#[ 1ɘ8o@z* endstream endobj 85 0 obj << /Type /Page /Parent 167 0 R /Resources 86 0 R /Contents 87 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 86 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F8 129 0 R /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 87 0 obj << /Length 581 /Filter /FlateDecode >> stream Hێ0[?\1>NjW[V41mw@!g?Ɍ'UN_g R@UHr(-Y_ 6975ߐF'y8cxX4Dt K ErfB*d<ƋtC8\ĐN*>J_\Pfbls6v.>ʝc:mamr[_ bJ!SёkTq!H"IHGj(ЉUsV9>cNe(.Q)AJ15nT-pf}LUpAKsZduC^Ւ y3m=ljrYB媶n̡_ag3IUik> endobj 89 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F15 133 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 90 0 obj << /Length 666 /Filter /FlateDecode >> stream Hĕn06OqE.%Yv\x7E. z$O r֓D /m@ ,D[ *X*! ۈYOZzsLe5nCZʡڨяfTBq!nw]z8)GX ,|feV$2s^A~8ũdyZ}.>QL;i&f3X&l\IJCq'J&왒=Wun˔ %ݚǶ> K%%rl^WRîmuQ޵]I8~\rz_$ ;x]֏"-OY endstream endobj 91 0 obj << /Type /Page /Parent 168 0 R /Resources 92 0 R /Contents 93 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 92 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 93 0 obj << /Length 448 /Filter /FlateDecode >> stream Ho0Ƶw̵e|k{@b.!!Uh*$>.}C6>^W[O2@Ă<"gAoȆ# 2q-I-UG~ŒQ)$Q$U*G$ΊV HwdtcG&r$%2IPD)xL 4g[ ZnuH!/Twsv}5`7x{33,ؼ:3Sύl c ӑ~N@Hx\2sEk7>N ZD'jm5î{]7hcy[xMa;y?*4jM_zgv4"KR꣤'DhMmr f\p?D>{|#^\Z 8oHᵶapgE 0ݴ endstream endobj 94 0 obj << /Type /Page /Parent 168 0 R /Resources 95 0 R /Contents 96 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 95 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F2 118 0 R /F17 134 0 R /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 96 0 obj << /Length 521 /Filter /FlateDecode >> stream HSn0DM:KI¼5=2eԔ$e)H"@d@hwq9x>n92kd`p4!myA9uOVzז|]Uu.#&+J V麀,}% .e>0@׈$2?=8sHA,.Hin#O! |%;ɵvpK!dqinh 0Ggi #uz7];h8%;Bx~̛ؒ&f=kB&d 9UFXA+GD6ʖ XT"Y$o0Z0L}}x,Eҧ*&j{%?'lK*_q9cx옶?nlDpwl $J-siKǶ`#vٿ6*z7q0p@ؤ3¨) #5δ*Pꋚ6q@ccoڽqc 0 endstream endobj 97 0 obj << /Type /Page /Parent 168 0 R /Resources 98 0 R /Contents 99 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 98 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 99 0 obj << /Length 743 /Filter /FlateDecode >> stream HtTn0}W O%-7Ry*flo73vvVT+̙3c/>(`qz`3 jL," Y a%Uhg QBd f6X|i5wp*E|`%kDf"!t"P $o)T)%of,s-HD,?#5:>E|~j0M3E0~(7e^a<%'j3.;2(W> endobj 101 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 102 0 obj << /Length 1829 /Filter /FlateDecode >> stream HWK6W `-C:vӠhUOA`]onxΐHnQ,?7gF/?\z.GvtӁQcթ V|opy=`dC-XQy[Pa:KlV U+B=hQk1RoG3赀S*4^h UR!=!RVhB_{͍\@/MS\Q瞽Xl8$킓R5zHC"U#SҙS{mǦ9VO1"Me y9;.4`+XotxցwCjrq(&~"yP3"*!FcUqB3zIhRǜF }y(%SDw .EU$@:c6Yf@#V:%qbl*RFN讉PtBHS =׽pqol5oYi窼M^NU^d`{ɋ0+X|Ûu^Gױ`Byad3/ ШYeÖE 9̨̢ڨgV g2.43243ۊ,+]2ypx)cV5w&Gp/&Y,*ile3B9֙?Ff?yKBN0%B+Sk3je!,ZNF6NY$)N4 TR,;JJWYhWeAึaݰainXZ?ްSmXD7,aEeyb^}>Zt?&kQn+R{H^}DEәQ%Z֓jdǣyaEÍN`T㵝^[45SyMkrl&쫽fΆ| µ^Y7W#vڨp kdN/VS*N/[k/d|Q|̩a .SFJ #:)E]rSr^I>=7HX ׂ N.YJÌA7t1}zW,DG".Oϝҡprnܽ;$5U̓Z͐A I͑-JF&0&ȘVĠPwg^{/fkL9(zOUh/e,˧Y> ]8˧7哑iTga*vw㿴x-ލmwrsgNVx7['"G%/]ˇe/?.9% endstream endobj 103 0 obj << /Type /Page /Parent 168 0 R /Resources 104 0 R /Contents 105 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 104 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 105 0 obj << /Length 2233 /Filter /FlateDecode >> stream HWKo#l=|ֳ  i0[g= >Udd 0`~Ǔw^ǿӮ;;u;gt?@7Q۾{թ7DV |osw>h__pPC6o݇Pޜ7?T- *SR:?WkM@z v @2&/D~@WKLlal~E#)T bG?s"btL(0[v0WdJO9:J%&B G1F+}^O nѻ J>k \5` kjV/o>KK6/z-,M)h_rڥE# pFdkr.`=$gKwvO>/dZ/_UaSB2숦@B!O)uEppCg,{#5rZ!42x.H7\)O`Par d8W ˄Q-y]NhuS,yIw{ 1*v-J >$xP0| 0YۄBrFvve/ FE"ji$s>ZTMfOB5g %`!ig2̹g9B ~XcU)肩XxS &~9\Lx927272vP\JH4jdL1$ >4L h#y]N }(qȫB)GY|).y5s 2@| h!F8KQs?T(4"7PaRŅDC#X/y1Ԃ7,4q窸M\NU\V!2\p h2.ԣk_ e5. ШYeEE8̨%ՙEQϬϘ3˸,gY1䙥pK9>F\y1 7E{k`fsiUh5Te5̳e(~ n;X_L_V-ZJVNY8͂)F4 dRKw-eVѮep۰nX]ذk7,?ٰSmX7, ca feԞ/IVꃪ5i)-!uEjj%`ZUP#5?^EϨ0l5Xm jTV0[V[MV fj)\p˖V2<Ւ ~ 0z~*Nh 5!,  Iv(erc ߡsoeL$d]YV|" qR :h0B)v0 eᔥPn IxD4Jyct跻n;yZ9T<{:" A\YC,x0a b La5#::נg^7 ӪkL9ܘ :eoMpvbY>qe4gg M^x|4p峠 FeŻx -ލmwy/nnZx-[`ff8VPJ50 e)o ߮ZBe&uLKYbya 4|`O#B.VQB5J0B1*ja%0ERP(.Vxz~T9:V '6]ʑ%Z_F,zXs#~R~~O?KA#E MDAjR_9V \׏?ća{I7n/n߿^LiύRVu&hNL ީQ&g\d!(L3Y*`)ؒ.\\H<;QWpLh@> endobj 107 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 108 0 obj << /Length 2210 /Filter /FlateDecode >> stream HWKol@->-.fO=HWΌH2SEVMvlP?7_ݸu{7A`OjF/aϠF:\Y.Hsn~> jKK6z- [h_,rڵܫۋFΫpFd|Г5yחǷ ])k1INzYyI>qȚD/~7odZ~Wa'4M*g?':P42"XZ'^[<CdDq* _B9SD08V6W ˌ\Q+y[N h S,HyIƨԵ*o(襙|bP*_`PDe ʢ_AUJ*$H2|a͞J {jk|`㐴 L\D?Er1*|AtV[TD9UPJou3gu b|%^XɀN ;^d` {H ;Q(.yߤ_$P hL^UP[_ &-L>&H\7P@sz^-9 >+8JtZTU=#9IrDsM*rCމ )M\NN4:{C-Hzc/y[*.M\p @vnR d@p oqB(5.E(q]\ƅF*.,l, řefP6gF;*`gqYBY,M7*`p[)3KJeqr|2xcVu(MLYhLY|LSH nFalƯ:'Y;X_\M_թW-ZAf{NJf#~rdfT#[S3,;JV̓hWk|yY28mX:v6, KO6,4 KEv"=oX+KR:jrku]CK Gl&*.{`,)jOW *)n {j .[ FuV9ڢ"Z-jVco5ZIjlX-eP |dْyBFZ2įQRaNVߩ,)jVZI5!,  IveJc qpoL$d]EV|"+iS*:0Bv-0eᔥP}ء xxD4JyiPR:p?>nmi7 0g rhx mD(3X`;;sj2::נg^aӋ5fZn,e}MUٲ7&|8|ʇb]> /Pӛ)i4gEUvwOZW}wBwoӴx-Oœ~mLgJ,0P1BYrRr Pk) gaYbr iʹS򂅆E2`?/ ֓̀r:a jô<˙"@ fdf[ #VԈBOԗ׷_E Ʃi)\T\dpUK}=OK_G R !m?家*p?/㗻n(8g[q@ u.orާ\.* pSRS|tpIfPT9cL(YwmS"S  u, ueZևH,[ Ǘ*@5ItYEH#NBMU_%$|S$Cʷ/`-yv{{|~b;;_' endstream endobj 109 0 obj << /Type /Page /Parent 168 0 R /Resources 110 0 R /Contents 111 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 110 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R /TT6 120 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 111 0 obj << /Length 2173 /Filter /FlateDecode >> stream HWKƀ|ڻ b`G+yYɯOYE6-%?}7߾qe8˽}ucpӁ4<H{-/ۿ^Jj:fp4'i>j'IEr jRJpDǰdaͤ`'lS0,aMQ'y@WKB?&2.' V3l=^ bI)D y|SDr NUj2\!tGVgSBhR F؀+*喢&ĥ0eu`Z J`0Yi.M'Ed ֮o:iexi ҁzz"w?=?|}==ڕ7')~?;Qz?7nj?FƏjctM*bb~Nh"e E?:* Js9ZQ$NGoaAn1}z,yRĆy':o>{^)"3ZpiFm=% 5h.m"ݻ7n/ {kk|`З㐴 NN\A"d=֘|1_X0:']8o}j*^hn _ux9):OXdt`:+DtxсwPCj8\ }jԂNИ豪$L$4NNhy[O }LnUA@s,1+Q-%>+ $JtVTS=#H9&]rCщ &/D j){¡$׼gˋ kBtsKa@'V:B$N7Pnc!H l"f^|yQˆ- =3|sf%̢hgVN2.v3K2t3 2TwǗ(:fUǁNџ䔅tDZp4Z U] le3$֙?Af?rB/hj NEͼ݆k%mϝ+Ǜm葝J+SNUNYvȕZ=Ѯޡ9eAึaoXذ7,]?ٰlXDk7,aExްWjχ^lMA[{cD_j8c3Qtd8Dc=P#5?EV2^Y꼶sE[ECZ8Dk,kZɾklx-נ\kuK b T8H\ ^/*^SY#jVZI kCX8m1;! EvH"_4*"GIɺbrSrYI>=wHXGׂ! ,nbXF)D\pԤ8wo/1m eCsceP̤c%ww2:d4 u e{5Q1{|c{ Џ6iS^Y_7OoM|VzZ/ޔeOA˧,U9./-ޅ[ 7Z }we/mn^xO-^8][fFo 6/8w ߯ZxsYrRrާu9x+#8xL-EiGG HRE yAh"yug"f3%k"=??|}_^^Js.y%RBsۂhE>aQ$23k%P9K{nXT(* "Z1^)Vi:@=6JE;);|ݟ~`\rkՔHnTX+eo%ǯ|qy8=GC#|N7*?F endstream endobj 112 0 obj << /Type /Page /Parent 168 0 R /Resources 113 0 R /Contents 114 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 113 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F6 128 0 R /F19 135 0 R /TT2 177 0 R /TT4 180 0 R /TT8 127 0 R >> /XObject << /Im2 121 0 R /Im3 122 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs10 123 0 R /Cs11 124 0 R >> >> endobj 114 0 obj << /Length 837 /Filter /FlateDecode >> stream HV]o0і_zdl @"^Binq˵#cTNs=M`aA]Dg'l$H,$gCgU%^b7!\OA 㢉f Gmfs*Ѭ,5R*W`E u+9K5J3CDq.r(]^FD05kÀferiv*/ux=) sYPM,M}yJE4{^ 2vx#@tܬL=0-/$|ȓ'#O/[C.k2E3TW8`9v|mG.-y„-<ȴ!|°%r>Hh0I (F\AUN&"y1(KhRj. hJNɦaYw4cɎO+KuW'w'uu3@_7gHC[Y[ ڍ٭V0*D|J ͷ6?Dd]}5M{NiPsjAegE=]Z}0pWۆj1+drXr#ӜĶĢ6op"k\#ܪAcBaAwu? tPp _y>>v5S:Teф;[wV0힤i=& KgA;6C}r^m \T^TԹ4Eko K]n| kq]fMWϸ{#.]M<1cav4}Ur\F?q[ endstream endobj 115 0 obj << /Type /Page /Parent 168 0 R /Resources 116 0 R /Contents 117 0 R /Rotate 90 /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] >> endobj 116 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /TT2 177 0 R /TT4 180 0 R >> /XObject << /Im1 181 0 R >> /ExtGState << /GS1 182 0 R >> /ColorSpace << /Cs5 175 0 R /Cs9 174 0 R >> >> endobj 117 0 obj << /Length 256 /Filter /FlateDecode >> stream HlN0EK8WmyAQDaPN@|1v@B._s)֣\o} GЕJ)!,"> endobj 119 0 obj << /Type /Font /Subtype /Type1 /Encoding 155 0 R /BaseFont /Symbol /ToUnicode 156 0 R >> endobj 120 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 133 /Widths [ 278 278 0 0 0 0 0 191 0 0 0 0 278 333 278 278 0 556 556 556 0 556 0 0 0 556 278 0 584 0 584 0 0 667 667 722 722 667 611 778 0 278 0 0 0 833 722 778 667 0 722 667 611 722 0 0 0 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 1000 ] /Encoding /WinAnsiEncoding /BaseFont /Arial /FontDescriptor 152 0 R >> endobj 121 0 obj << /Type /XObject /Subtype /Image /Width 792 /Height 594 /BitsPerComponent 8 /ColorSpace 123 0 R /Length 2249 /Filter /FlateDecode >> stream HOLd#i¡[(Z kRqUTZwX|t̯;r_z5CY,N'4 C d ,yL4/^PGbmvW^WHLBt4_^ Ev Ouj.l} Eքb{Z5K;EL@mф& UwJūjЛȹ)=sZ1>/uvٶ E̻]TKRl5Gm̼EF?:m޸ >nm~YYwSC#:X/7ŽⅨeYagB[tjzpuѩBag:]"M>t6chg$[Če ' Ѫ}҈azm*?gK5/ ("v'>x:FIGξ.ؙV"AUʸb˼P ie|{aVG -E1 GPY}2FUƹ& :" >)@6mǏk q_ܗ]TyW*ң2߄h~6~-%S r_yx쵆>}QEuyxy_U"i%l 6G0jtW9@K`79cSbAyU_&쵆>wGdr'ma}eL ]KL# ˱jH6%^kU6F{%0yI p?J* _4wf-a1Ӿh9d*9d틟-*֗y^S -PuџV/ީ~:^k`|.}p71o=kC{p}\/"e[ĶfM\2L_i_mVQjʔfs93O~9?PJI)Ut=CE-2k_`g[]0e<޹[`g!a<6lw vBtN(C/؊>dh 7lE|24+dVN'C5}P줞E}ɐ]lQd2t)`!Ģ0[ֽN%C[; )1D26H1m 42ߐhȐ10[!CqxĖwgSȐ24ys7^ ; QƳ߱% 1d/\2`wةcHS [/dY endstream endobj 122 0 obj << /Type /XObject /Subtype /Image /Width 792 /Height 89 /BitsPerComponent 8 /ColorSpace 124 0 R /Length 1901 /Filter /FlateDecode >> stream H엍w<CvUa~Y/ D WGiLɽq]@dUz;PZ-ӗ ce:. x~0 ~`OZL[C ?~ fx1#KL^W4t E&i]Lg<.&''Kp ,'ϑ+` | /KOx,O0Δ sA.畧 sE.煻bz3\t H2-^eᮘP a]%d1u7e]1XR a]aJhmV՚A{4(m1ɷ76FvqLn׳'e6\bX76*_QF]TVy,Ϙ6歹ZW(eȯm7 rd ۈNjk8s32Z;wԌR 8DVdZ1lNEwګmV֨2qCcr6蘯r;5U%OICC I*JޯU%،:@8۴LV1 /DD G5g1/,4mu`)nuE(9U~**f:0x;"8Wؾ3"+PhIOG λj5T#) VsϦ#ob-kRw2u PZ#Hv^2:@(TZ9u$ԁ"1yGiAY5Tļ&ٹ&RG"[h6-\wSḷ$ '[h[x<6)|/Ȧ2mKך6ZCMN, p[5J9+acVgLˌ)k]+ٓ~PqT k]w֛wO:gXRG?ﴔs7.\mփ֌U-c^lJ \=7'»]a*{ˬWgV\ͰXճ:ZCbJӭa. ^gl }dl';uoMvSRP5y}IjEfm#/܇@J*n^*paj,gymf}q_$i6-V_w;;bO\ BWģT򩗵4ԇ ~Bݑe}`1bxϺɔC:>%_h3ilo`zd6g ~~E0Tv+ucUI$ )cVeʹSPRHag =/p<񄑥2IJK^R7|dr"}ZC+>_Z%uY 'KeT0پc}crмyyb5/kB7Ejj/!p/h_/"JsBEu>>zPt^ߞ: Iq5/Nvp͵̪ء/߿|꿼>5~`5޴tMaCW5 ٧}Ե 9/?͘"3V_q->hMl5˺㉸JN뺖MaF&L<  ݞ ŋ:@ypˬ;\Y:@$se]!hA-蒠(%ˁ:@ xxVt9P.a,%] X :@~DƘRk D)2C-&^IԢ.`qcBPb,e]P/BI 71ԑbP+qb3yƠ#oB1kd Sux?XP;?1r]2& uDyu Vx>!4*Su܄s@< 0a1ePSXK]1 endstream endobj 123 0 obj [ /Indexed 175 0 R 255 125 0 R ] endobj 124 0 obj [ /Indexed 175 0 R 255 126 0 R ] endobj 125 0 obj << /Length 218 /Filter /FlateDecode >> stream Hb``TSSsUO.5111  wvvqHpkI s)KLLHVeђبVgBʆ9ݛLT\1sϒY[T`֭ۺ{w2+o߾qSΝx>ěݼ^pNý{='^\ݾs߿F( Th endstream endobj 126 0 obj << /Length 176 /Filter /FlateDecode >> stream Hb` 0O^M jj֘j;,g;B#A`_N[-/m= pq4y pc"kyց;ώR;y)s o^/w|zy_{n{ӹ `P f endstream endobj 127 0 obj << /Type /Font /Subtype /TrueType /FirstChar 150 /LastChar 150 /Widths [ 456 ] /Encoding /WinAnsiEncoding /BaseFont /ArialNarrow /FontDescriptor 153 0 R >> endobj 128 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 458 ] /Encoding 157 0 R /BaseFont /JCKJDE+TT27Ao00 /FontDescriptor 138 0 R >> endobj 129 0 obj << /Type /Font /Subtype /Type1 /Encoding /WinAnsiEncoding /BaseFont /Courier-Bold >> endobj 130 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 457 ] /Encoding 158 0 R /BaseFont /JCLCMM+TT2FBo00 /FontDescriptor 140 0 R >> endobj 131 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 579 ] /Encoding 159 0 R /BaseFont /JCLDFA+TT317o00 /FontDescriptor 142 0 R >> endobj 132 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 988 ] /Encoding 160 0 R /BaseFont /JCLEED+TT32Co00 /FontDescriptor 144 0 R >> endobj 133 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 991 ] /Encoding 161 0 R /BaseFont /JCLFMB+TT364o00 /FontDescriptor 146 0 R >> endobj 134 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 992 ] /Encoding 162 0 R /BaseFont /JCLIBM+TT3B0o00 /FontDescriptor 148 0 R >> endobj 135 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 1 /Widths [ 575 ] /Encoding 163 0 R /BaseFont /JCLLFD+TT3F8o00 /FontDescriptor 150 0 R >> endobj 136 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 0 375 505 ] /FontName /JCKHEC+TT23Co00 /ItalicAngle 0 /StemV 0 /CharSet (/Ga7) /FontFile3 137 0 R >> endobj 137 0 obj << /Filter /FlateDecode /Length 110 /Subtype /Type1C >> stream Hbd`ad`ddrpu 12v70i9|V M GO 1012'5300DE~|w(яy`%%" endstream endobj 138 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 0 374 507 ] /FontName /JCKJDE+TT27Ao00 /ItalicAngle 0 /StemV 0 /CharSet (/Ga7) /FontFile3 139 0 R >> endobj 139 0 obj << /Filter /FlateDecode /Length 108 /Subtype /Type1C >> stream Hbd`ad`ddrrq 12w70i9"V M GO 1012'5300DE~}w$ɏ' (<%0 endstream endobj 140 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 0 374 507 ] /FontName /JCLCMM+TT2FBo00 /ItalicAngle 0 /StemV 0 /CharSet (/Ga7) /FontFile3 141 0 R >> endobj 141 0 obj << /Filter /FlateDecode /Length 108 /Subtype /Type1C >> stream Hbd`ad`ddrq 1rs70i9"V M GO 1012'5300DE~Y ُg 4%\ endstream endobj 142 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 0 492 568 ] /FontName /JCLDFA+TT317o00 /ItalicAngle 0 /StemV 0 /CharSet (/G77) /FontFile3 143 0 R >> endobj 143 0 obj << /Filter /FlateDecode /Length 115 /Subtype /Type1C >> stream Hbd`ad`ddrqqs 16470i,*w7`wA!&FFwssnv(l7 ˢ6?kDX?@dW% endstream endobj 144 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 -12 952 509 ] /FontName /JCLEED+TT32Co00 /ItalicAngle 0 /StemV 0 /CharSet (/Gde) /FontFile3 145 0 R >> endobj 145 0 obj << /Filter /FlateDecode /Length 193 /Subtype /Type1C >> stream Hbd`ad`ddrquu 16r70i.akpcg#YxSRA)|2/dXg ~߅޴lLo dsz!w6Zo4k|gSv>×0LQIOYG_^7ۖ/`ǂA endstream endobj 146 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 -14 949 507 ] /FontName /JCLFMB+TT364o00 /ItalicAngle 0 /StemV 0 /CharSet (/Gde) /FontFile3 147 0 R >> endobj 147 0 obj << /Filter /FlateDecode /Length 195 /Subtype /Type1C >> stream Hbd`ad`ddrqu 16370iΗakpcg#YxSRA)|2oeXgw 62Eټ^,onR՟bЅ njΡ]Ov0M'%]%=}];=llx"G7;@~A endstream endobj 148 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 -16 952 504 ] /FontName /JCLIBM+TT3B0o00 /ItalicAngle 0 /StemV 0 /CharSet (/Gde) /FontFile3 149 0 R >> endobj 149 0 obj << /Filter /FlateDecode /Length 192 /Subtype /Type1C >> stream Hbd`ad`ddrt 1v270iΒakpcg#YxSRA)|2dXg}w .*߅ٺ^ܯ o `st!w6o5sj )^aN zz6ض;rEnv>cA endstream endobj 150 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ 0 0 491 563 ] /FontName /JCLLFD+TT3F8o00 /ItalicAngle 0 /StemV 0 /CharSet (/G77) /FontFile3 151 0 R >> endobj 151 0 obj << /Filter /FlateDecode /Length 111 /Subtype /Type1C >> stream Hbd`ad`ddrqs 1v70i$*w7`wA!&FFwssnv(l7 ?KD(a` "% endstream endobj 152 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 0 /Descent -211 /Flags 32 /FontBBox [ -222 -325 1072 1037 ] /FontName /Arial /ItalicAngle 0 /StemV 0 >> endobj 153 0 obj << /Type /FontDescriptor /Ascent 935 /CapHeight 0 /Descent -211 /Flags 32 /FontBBox [ -182 -307 1000 1086 ] /FontName /ArialNarrow /ItalicAngle 0 /StemV 0 >> endobj 154 0 obj << /Type /Encoding /Differences [ 1 /Ga7 ] >> endobj 155 0 obj << /Type /Encoding /Differences [ 1 /mu ] >> endobj 156 0 obj << /Filter /FlateDecode /Length 212 >> stream HT10 w~V7$T 1]zWCbP$D& K(m!OԜĕn1Bo0N~f` ֭U;@$]CU)vq?7dK~߿4hFtH$5 q&yCyzSPYрPɲ$=ϺHCpgk]wM3XE2_HiP endstream endobj 157 0 obj << /Type /Encoding /Differences [ 1 /Ga7 ] >> endobj 158 0 obj << /Type /Encoding /Differences [ 1 /Ga7 ] >> endobj 159 0 obj << /Type /Encoding /Differences [ 1 /G77 ] >> endobj 160 0 obj << /Type /Encoding /Differences [ 1 /Gde ] >> endobj 161 0 obj << /Type /Encoding /Differences [ 1 /Gde ] >> endobj 162 0 obj << /Type /Encoding /Differences [ 1 /Gde ] >> endobj 163 0 obj << /Type /Encoding /Differences [ 1 /G77 ] >> endobj 164 0 obj << /Type /Pages /Kids [ 172 0 R 1 0 R 4 0 R 7 0 R 10 0 R 13 0 R 16 0 R 19 0 R 22 0 R 25 0 R ] /Count 10 /Parent 165 0 R >> endobj 165 0 obj << /Type /Pages /Kids [ 164 0 R 166 0 R 167 0 R 168 0 R ] /Count 40 >> endobj 166 0 obj << /Type /Pages /Kids [ 28 0 R 31 0 R 34 0 R 37 0 R 40 0 R 43 0 R 46 0 R 49 0 R 52 0 R 55 0 R ] /Count 10 /Parent 165 0 R >> endobj 167 0 obj << /Type /Pages /Kids [ 58 0 R 61 0 R 64 0 R 67 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R 85 0 R ] /Count 10 /Parent 165 0 R >> endobj 168 0 obj << /Type /Pages /Kids [ 88 0 R 91 0 R 94 0 R 97 0 R 100 0 R 103 0 R 106 0 R 109 0 R 112 0 R 115 0 R ] /Count 10 /Parent 165 0 R >> endobj 169 0 obj << /CreationDate (D:20011023160642) /Producer (Acrobat Distiller 4.05 for Windows) /ModDate (D:20011023160643+02'00') >> endobj xref 0 170 0000000000 65535 f 0000007776 00000 n 0000007929 00000 n 0000008202 00000 n 0000009076 00000 n 0000009229 00000 n 0000009477 00000 n 0000009937 00000 n 0000010090 00000 n 0000010351 00000 n 0000011059 00000 n 0000011215 00000 n 0000011489 00000 n 0000012163 00000 n 0000012319 00000 n 0000012581 00000 n 0000013520 00000 n 0000013676 00000 n 0000013938 00000 n 0000015140 00000 n 0000015296 00000 n 0000015546 00000 n 0000016201 00000 n 0000016357 00000 n 0000016607 00000 n 0000018472 00000 n 0000018628 00000 n 0000018878 00000 n 0000020762 00000 n 0000020918 00000 n 0000021168 00000 n 0000023213 00000 n 0000023369 00000 n 0000023619 00000 n 0000025658 00000 n 0000025814 00000 n 0000026064 00000 n 0000028134 00000 n 0000028290 00000 n 0000028540 00000 n 0000030668 00000 n 0000030824 00000 n 0000031086 00000 n 0000033319 00000 n 0000033475 00000 n 0000033725 00000 n 0000035771 00000 n 0000035927 00000 n 0000036177 00000 n 0000038245 00000 n 0000038401 00000 n 0000038651 00000 n 0000040748 00000 n 0000040904 00000 n 0000041154 00000 n 0000043275 00000 n 0000043431 00000 n 0000043681 00000 n 0000045546 00000 n 0000045702 00000 n 0000045964 00000 n 0000046612 00000 n 0000046768 00000 n 0000047029 00000 n 0000047673 00000 n 0000047829 00000 n 0000048104 00000 n 0000048850 00000 n 0000049006 00000 n 0000049255 00000 n 0000049793 00000 n 0000049949 00000 n 0000050224 00000 n 0000051696 00000 n 0000051852 00000 n 0000052139 00000 n 0000053806 00000 n 0000053962 00000 n 0000054223 00000 n 0000054868 00000 n 0000055024 00000 n 0000055311 00000 n 0000056059 00000 n 0000056215 00000 n 0000056465 00000 n 0000058330 00000 n 0000058486 00000 n 0000058760 00000 n 0000059415 00000 n 0000059571 00000 n 0000059846 00000 n 0000060586 00000 n 0000060742 00000 n 0000060991 00000 n 0000061513 00000 n 0000061669 00000 n 0000061931 00000 n 0000062526 00000 n 0000062682 00000 n 0000062932 00000 n 0000063749 00000 n 0000063908 00000 n 0000064159 00000 n 0000066064 00000 n 0000066223 00000 n 0000066474 00000 n 0000068783 00000 n 0000068942 00000 n 0000069193 00000 n 0000071479 00000 n 0000071638 00000 n 0000071889 00000 n 0000074138 00000 n 0000074297 00000 n 0000074573 00000 n 0000075485 00000 n 0000075644 00000 n 0000075854 00000 n 0000076185 00000 n 0000076356 00000 n 0000076469 00000 n 0000076964 00000 n 0000079384 00000 n 0000081455 00000 n 0000081507 00000 n 0000081559 00000 n 0000081852 00000 n 0000082103 00000 n 0000082286 00000 n 0000082457 00000 n 0000082565 00000 n 0000082736 00000 n 0000082907 00000 n 0000083078 00000 n 0000083249 00000 n 0000083420 00000 n 0000083591 00000 n 0000083803 00000 n 0000084005 00000 n 0000084217 00000 n 0000084417 00000 n 0000084629 00000 n 0000084829 00000 n 0000085041 00000 n 0000085248 00000 n 0000085462 00000 n 0000085747 00000 n 0000085961 00000 n 0000086248 00000 n 0000086462 00000 n 0000086746 00000 n 0000086958 00000 n 0000087161 00000 n 0000087341 00000 n 0000087527 00000 n 0000087594 00000 n 0000087660 00000 n 0000087947 00000 n 0000088014 00000 n 0000088081 00000 n 0000088148 00000 n 0000088215 00000 n 0000088282 00000 n 0000088349 00000 n 0000088416 00000 n 0000088563 00000 n 0000088656 00000 n 0000088805 00000 n 0000088954 00000 n 0000089109 00000 n trailer << /Size 170 /ID[<0cfdc2120fabb28e95fcc28991e83e97><0cfdc2120fabb28e95fcc28991e83e97>] >> startxref 173 %%EOF systemc-2.3.4/examples/sysc/simple_bus/CMakeLists.txt0000644000175000017500000000566414342422106022601 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/simple_bus/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (simple_bus simple_bus_main.cpp simple_bus_test.h simple_bus_master_blocking.h simple_bus_master_blocking.cpp simple_bus_master_non_blocking.h simple_bus_master_non_blocking.cpp simple_bus_master_direct.h simple_bus_master_direct.cpp simple_bus_slow_mem.h simple_bus_types.h simple_bus_blocking_if.h simple_bus_direct_if.h simple_bus_non_blocking_if.h simple_bus_request.h simple_bus_slave_if.h simple_bus.h simple_bus.cpp simple_bus_fast_mem.h simple_bus_arbiter.h simple_bus_arbiter_if.h simple_bus_arbiter.cpp simple_bus_types.cpp simple_bus_tools.cpp) target_link_libraries (simple_bus SystemC::systemc) configure_and_add_test (simple_bus) systemc-2.3.4/examples/sysc/simple_bus/simple_bus.cpp0000644000175000017500000003363614342422106022707 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus.cpp : The bus. The main_action process is active at falling clock edge. Handling of the requests. A request can result in different requests to slaves. These are atomic requests and cannot be interrupted. A slave can take several cycles to complete: each time the request has to be re-issued to the slave. Once the slave transaction is completed, the m_current_request is cleared, and the request form is updated (address+=4, data++). When m_current_request is clear, the next request is selected. This can be the same one, if the transfer is not completed (burst-mode), or it can be a request with a higher priority. Intrusion to a non-locked burst-mode transaction is possible. When a transaction sets a lock, then the corresponding field in the request is set to SIMPLE_BUS_LOCK_SET. If the locked transaction is granted by the arbiter for the first time, the lock is set to SIMPLE_BUS_LOCK_GRANTED. At the end of the transaction, the lock is set to SIMPLE_BUS_LOCK_SET. If now a new locked request is made, with the same priority, the status of the lock is set to SIMPLE_BUS_LOCK_GRANTED, and the arbiter will pick this transaction to be the best. If the locked trans- action was not selected by the arbiter in the first round (request with higher priority preceeded), then the lock is not set. After the completion of the transaction, the lock is set from SIMPLE_BUS_LOCK_SET (set during the bus-interface function), to SIMPLE_BUS_LOCK_NO. The bus is derived from the following interfaces, and contains the implementation of these: - blocking : burst_read/burst_write - non-blocking : read/write/get_status - direct : direct_read/direct_write Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "simple_bus.h" void simple_bus::end_of_elaboration() { // perform a static check for overlapping memory areas of the slaves bool no_overlap; for (int i = 1; i < slave_port.size(); ++i) { simple_bus_slave_if *slave1 = slave_port[i]; for (int j = 0; j < i; ++j) { simple_bus_slave_if *slave2 = slave_port[j]; no_overlap = ( slave1->end_address() < slave2->start_address() ) || ( slave1->start_address() > slave2->end_address() ); if ( !no_overlap ) { sb_fprintf(stdout,"Error: overlapping address spaces of 2 slaves : \n"); sb_fprintf(stdout,"slave %i : %0X..%0X\n",i,slave1->start_address(),slave1->end_address()); sb_fprintf(stdout,"slave %i : %0X..%0X\n",j,slave2->start_address(),slave2->end_address()); exit(0); } } } } //---------------------------------------------------------------------------- //-- process //---------------------------------------------------------------------------- void simple_bus::main_action() { // m_current_request is cleared after the slave is done with a // single data transfer. Burst requests require the arbiter to // select the request again. if (!m_current_request) m_current_request = get_next_request(); else // monitor slave wait states if (m_verbose) sb_fprintf(stdout, "%s SLV [%d]\n", sc_time_stamp().to_string().c_str(), m_current_request->address); if (m_current_request) handle_request(); if (!m_current_request) clear_locks(); } //---------------------------------------------------------------------------- //-- direct BUS interface //---------------------------------------------------------------------------- bool simple_bus::direct_read(int *data, unsigned int address) { if (address%4 != 0 ) {// address not word alligned sb_fprintf(stdout, " BUS ERROR --> address %04X not word alligned\n",address); return false; } simple_bus_slave_if *slave = get_slave(address); if (!slave) return false; return slave->direct_read(data, address); } bool simple_bus::direct_write(int *data, unsigned int address) { if (address%4 != 0 ) {// address not word alligned sb_fprintf(stdout, " BUS ERROR --> address %04X not word alligned\n",address); return false; } simple_bus_slave_if *slave = get_slave(address); if (!slave) return false; return slave->direct_write(data, address); } //---------------------------------------------------------------------------- //-- non-blocking BUS interface //---------------------------------------------------------------------------- void simple_bus::read(unsigned int unique_priority , int *data , unsigned int address , bool lock) { if (m_verbose) sb_fprintf(stdout, "%s %s : read(%d) @ %x\n", sc_time_stamp().to_string().c_str(), name(), unique_priority, address); simple_bus_request *request = get_request(unique_priority); // abort when the request is still not finished sc_assert((request->status == SIMPLE_BUS_OK) || (request->status == SIMPLE_BUS_ERROR)); request->do_write = false; // we are reading request->address = address; request->end_address = address; request->data = data; if (lock) request->lock = (request->lock == SIMPLE_BUS_LOCK_SET) ? SIMPLE_BUS_LOCK_GRANTED : SIMPLE_BUS_LOCK_SET; request->status = SIMPLE_BUS_REQUEST; } void simple_bus::write(unsigned int unique_priority , int *data , unsigned int address , bool lock) { if (m_verbose) sb_fprintf(stdout, "%s %s : write(%d) @ %x\n", sc_time_stamp().to_string().c_str(), name(), unique_priority, address); simple_bus_request *request = get_request(unique_priority); // abort when the request is still not finished sc_assert((request->status == SIMPLE_BUS_OK) || (request->status == SIMPLE_BUS_ERROR)); request->do_write = true; // we are writing request->address = address; request->end_address = address; request->data = data; if (lock) request->lock = (request->lock == SIMPLE_BUS_LOCK_SET) ? SIMPLE_BUS_LOCK_GRANTED : SIMPLE_BUS_LOCK_SET; request->status = SIMPLE_BUS_REQUEST; } simple_bus_status simple_bus::get_status(unsigned int unique_priority) { return get_request(unique_priority)->status; } //---------------------------------------------------------------------------- //-- blocking BUS interface //---------------------------------------------------------------------------- simple_bus_status simple_bus::burst_read(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length , bool lock) { if (m_verbose) { sb_fprintf(stdout, "%s %s : burst_read(%d) @ %x\n", sc_time_stamp().to_string().c_str(), name(), unique_priority, start_address); } simple_bus_request *request = get_request(unique_priority); request->do_write = false; // we are reading request->address = start_address; request->end_address = start_address + (length-1)*4; request->data = data; if (lock) request->lock = (request->lock == SIMPLE_BUS_LOCK_SET) ? SIMPLE_BUS_LOCK_GRANTED : SIMPLE_BUS_LOCK_SET; request->status = SIMPLE_BUS_REQUEST; wait(request->transfer_done); wait(clock->posedge_event()); return request->status; } simple_bus_status simple_bus::burst_write(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length , bool lock) { if (m_verbose) sb_fprintf(stdout, "%s %s : burst_write(%d) @ %x\n", sc_time_stamp().to_string().c_str(), name(), unique_priority, start_address); simple_bus_request *request = get_request(unique_priority); request->do_write = true; // we are writing request->address = start_address; request->end_address = start_address + (length-1)*4; request->data = data; if (lock) request->lock = (request->lock == SIMPLE_BUS_LOCK_SET) ? SIMPLE_BUS_LOCK_GRANTED : SIMPLE_BUS_LOCK_SET; request->status = SIMPLE_BUS_REQUEST; wait(request->transfer_done); wait(clock->posedge_event()); return request->status; } //---------------------------------------------------------------------------- //-- BUS methods: // // handle_request() : performs atomic bus-to-slave request // get_request() : BUS-interface: gets the request form of given // priority // get_next_request() : returns a valid request out of the list of // pending requests // clear_locks() : downgrade the lock status of the requests once // the transfer is done //---------------------------------------------------------------------------- void simple_bus::handle_request() { if (m_verbose) sb_fprintf(stdout, "%s %s Handle Slave(%d)\n", sc_time_stamp().to_string().c_str(), name(), m_current_request->priority); m_current_request->status = SIMPLE_BUS_WAIT; simple_bus_slave_if *slave = get_slave(m_current_request->address); if ((m_current_request->address)%4 != 0 ) {// address not word alligned sb_fprintf(stdout, " BUS ERROR --> address %04X not word alligned\n",m_current_request->address); m_current_request->status = SIMPLE_BUS_ERROR; m_current_request = (simple_bus_request *)0; return; } if (!slave) { sb_fprintf(stdout, " BUS ERROR --> no slave for address %04X \n",m_current_request->address); m_current_request->status = SIMPLE_BUS_ERROR; m_current_request = (simple_bus_request *)0; return; } simple_bus_status slave_status = SIMPLE_BUS_OK; if (m_current_request->do_write) slave_status = slave->write(m_current_request->data, m_current_request->address); else slave_status = slave->read(m_current_request->data, m_current_request->address); if (m_verbose) sb_fprintf(stdout, " --> status=(%s)\n", simple_bus_status_str[slave_status]); switch(slave_status) { case SIMPLE_BUS_ERROR: m_current_request->status = SIMPLE_BUS_ERROR; m_current_request->transfer_done.notify(); m_current_request = (simple_bus_request *)0; break; case SIMPLE_BUS_OK: m_current_request->address+=4; //next word (byte addressing) m_current_request->data++; if (m_current_request->address > m_current_request->end_address) { // burst-transfer (or single transfer) completed m_current_request->status = SIMPLE_BUS_OK; m_current_request->transfer_done.notify(); m_current_request = (simple_bus_request *)0; } else { // more data to transfer, but the (atomic) slave transfer is done m_current_request = (simple_bus_request *)0; } break; case SIMPLE_BUS_WAIT: // the slave is still processing: no clearance of the current request break; default: break; } } simple_bus_slave_if *simple_bus::get_slave(unsigned int address) { for (int i = 0; i < slave_port.size(); ++i) { simple_bus_slave_if *slave = slave_port[i]; if ((slave->start_address() <= address) && (address <= slave->end_address())) return slave; } return (simple_bus_slave_if *)0; } simple_bus_request * simple_bus::get_request(unsigned int priority) { simple_bus_request *request = (simple_bus_request *)0; for (unsigned int i = 0; i < m_requests.size(); ++i) { request = m_requests[i]; if ((request) && (request->priority == priority)) return request; } request = new simple_bus_request; request->priority = priority; m_requests.push_back(request); return request; } simple_bus_request * simple_bus::get_next_request() { // the slave is done with its action, m_current_request is // empty, so go over the bag of request-forms and compose // a set of likely requests. Pass it to the arbiter for the // final selection simple_bus_request_vec Q; for (unsigned int i = 0; i < m_requests.size(); ++i) { simple_bus_request *request = m_requests[i]; if ((request->status == SIMPLE_BUS_REQUEST) || (request->status == SIMPLE_BUS_WAIT)) { if (m_verbose) sb_fprintf(stdout, "%s %s : request (%d) [%s]\n", sc_time_stamp().to_string().c_str(), name(), request->priority, simple_bus_status_str[request->status]); Q.push_back(request); } } if (Q.size() > 0) return arbiter_port->arbitrate(Q); return (simple_bus_request *)0; } void simple_bus::clear_locks() { for (unsigned int i = 0; i < m_requests.size(); ++i) if (m_requests[i]->lock == SIMPLE_BUS_LOCK_GRANTED) m_requests[i]->lock = SIMPLE_BUS_LOCK_SET; else m_requests[i]->lock = SIMPLE_BUS_LOCK_NO; } systemc-2.3.4/examples/sysc/simple_bus/simple_bus_master_direct.cpp0000644000175000017500000000433414342422106025605 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_master_direct.cpp : The monitor (master) using the direct BUS interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "simple_bus_master_direct.h" #include "simple_bus_types.h" void simple_bus_master_direct::main_action() { int mydata[4]; while (true) { bus_port->direct_read(&mydata[0], m_address); bus_port->direct_read(&mydata[1], m_address+4); bus_port->direct_read(&mydata[2], m_address+8); bus_port->direct_read(&mydata[3], m_address+12); if (m_verbose) sb_fprintf(stdout, "%s %s : mem[%x:%x] = (%x, %x, %x, %x)\n", sc_time_stamp().to_string().c_str(), name(), m_address, m_address+15, mydata[0], mydata[1], mydata[2], mydata[3]); wait(m_timeout, SC_NS); } } systemc-2.3.4/examples/sysc/simple_bus/simple_bus_types.h0000644000175000017500000000372414342422106023573 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_types.h : The common types. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_types_h #define __simple_bus_types_h #include #include enum simple_bus_status { SIMPLE_BUS_OK = 0 , SIMPLE_BUS_REQUEST , SIMPLE_BUS_WAIT , SIMPLE_BUS_ERROR }; // needed for more readable debug output extern char simple_bus_status_str[4][20]; struct simple_bus_request; typedef std::vector simple_bus_request_vec; extern int sb_fprintf(FILE *, const char *, ...); #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_tools.cpp0000644000175000017500000000345614342422106024124 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_tools.cpp : The signal-safe fprintf function (sb_fprintf). Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include #include int sb_fprintf(FILE *fp, const char *fmt, ...) { va_list ap; va_start(ap, fmt); int ret = 0; do { errno = 0; ret = vfprintf(fp, fmt, ap); } while (errno == EINTR); return ret; } systemc-2.3.4/examples/sysc/simple_bus/simple_bus_main.cpp0000644000175000017500000000323414342422106023702 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_main.cpp : sc_main Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "simple_bus_test.h" int sc_main(int, char **) { simple_bus_test top("top"); sc_start(10000, SC_NS); return 0; } systemc-2.3.4/examples/sysc/simple_bus/simple_bus.h0000644000175000017500000000752514342422106022352 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus.h : The bus. The bus is derived from the following interfaces, and contains the implementation of these: - blocking : burst_read/burst_write - non-blocking : read/write/get_status - direct : direct_read/direct_write Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_h #define __simple_bus_h #include #include "simple_bus_types.h" #include "simple_bus_request.h" #include "simple_bus_direct_if.h" #include "simple_bus_non_blocking_if.h" #include "simple_bus_blocking_if.h" #include "simple_bus_arbiter_if.h" #include "simple_bus_slave_if.h" class simple_bus : public simple_bus_direct_if , public simple_bus_non_blocking_if , public simple_bus_blocking_if , public sc_module { public: // ports sc_in_clk clock; sc_port arbiter_port; sc_port slave_port; SC_HAS_PROCESS(simple_bus); // constructor simple_bus(sc_module_name name_ , bool verbose = false) : sc_module(name_) , m_verbose(verbose) , m_current_request(0) { // process declaration SC_METHOD(main_action); dont_initialize(); sensitive << clock.neg(); } // process void main_action(); // direct BUS interface bool direct_read(int *data, unsigned int address); bool direct_write(int *data, unsigned int address); // non-blocking BUS interface void read(unsigned int unique_priority , int *data , unsigned int address , bool lock = false); void write(unsigned int unique_priority , int *data , unsigned int address , bool lock = false); simple_bus_status get_status(unsigned int unique_priority); // blocking BUS interface simple_bus_status burst_read(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length = 1 , bool lock = false); simple_bus_status burst_write(unsigned int unique_priority , int *data , unsigned int start_address , unsigned int length = 1 , bool lock = false); private: void handle_request(); void end_of_elaboration(); simple_bus_slave_if * get_slave(unsigned int address); simple_bus_request * get_request(unsigned int priority); simple_bus_request * get_next_request(); void clear_locks(); private: bool m_verbose; simple_bus_request_vec m_requests; simple_bus_request *m_current_request; }; // end class simple_bus #endif systemc-2.3.4/examples/sysc/simple_bus/LEGAL0000644000175000017500000000222614342422106020577 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ systemc-2.3.4/examples/sysc/simple_bus/golden.log0000644000175000017500000001252014342422106022001 0ustar carstencarsten0 s top.master_d : mem[78:87] = (0, 0, 0, 0) 100 ns top.master_d : mem[78:87] = (b, c, d, e) 200 ns top.master_d : mem[78:87] = (b, c, d, e) 300 ns top.master_d : mem[78:87] = (b, c, d, e) 400 ns top.master_d : mem[78:87] = (1b, 1d, d, e) 500 ns top.master_d : mem[78:87] = (26, 18, 1a, 2f) 600 ns top.master_d : mem[78:87] = (26, 18, 1a, 2f) 700 ns top.master_d : mem[78:87] = (26, 18, 1a, 2f) 800 ns top.master_d : mem[78:87] = (31, 24, 27, 3d) 900 ns top.master_d : mem[78:87] = (31, 24, 27, 3d) 1 us top.master_d : mem[78:87] = (31, 24, 27, 3d) 1100 ns top.master_d : mem[78:87] = (31, 24, 27, 3d) 1200 ns top.master_d : mem[78:87] = (3c, 41, 46, 5e) 1300 ns top.master_d : mem[78:87] = (3c, 41, 46, 5e) 1400 ns top.master_d : mem[78:87] = (3c, 41, 46, 5e) 1500 ns top.master_d : mem[78:87] = (47, 4d, 53, 6c) 1600 ns top.master_d : mem[78:87] = (47, 4d, 53, 6c) 1700 ns top.master_d : mem[78:87] = (47, 4d, 53, 6c) 1800 ns top.master_d : mem[78:87] = (47, 4d, 53, 6c) 1900 ns top.master_d : mem[78:87] = (62, 6a, 60, 7a) 2 us top.master_d : mem[78:87] = (62, 6a, 72, 8d) 2100 ns top.master_d : mem[78:87] = (62, 6a, 72, 8d) 2200 ns top.master_d : mem[78:87] = (62, 6a, 72, 8d) 2300 ns top.master_d : mem[78:87] = (6d, 76, 7f, 9b) 2400 ns top.master_d : mem[78:87] = (6d, 76, 7f, 9b) 2500 ns top.master_d : mem[78:87] = (6d, 76, 7f, 9b) 2600 ns top.master_d : mem[78:87] = (78, 82, 8c, a9) 2700 ns top.master_d : mem[78:87] = (88, 93, 9e, bc) 2800 ns top.master_d : mem[78:87] = (88, 93, 9e, bc) 2900 ns top.master_d : mem[78:87] = (88, 93, 9e, bc) 3 us top.master_d : mem[78:87] = (93, 9f, ab, ca) 3100 ns top.master_d : mem[78:87] = (93, 9f, ab, ca) 3200 ns top.master_d : mem[78:87] = (93, 9f, ab, ca) 3300 ns top.master_d : mem[78:87] = (9e, ab, b8, d8) 3400 ns top.master_d : mem[78:87] = (ae, ab, b8, d8) 3500 ns top.master_d : mem[78:87] = (ae, bc, ca, eb) 3600 ns top.master_d : mem[78:87] = (ae, bc, ca, eb) 3700 ns top.master_d : mem[78:87] = (b9, c8, d7, f9) 3800 ns top.master_d : mem[78:87] = (b9, c8, d7, f9) 3900 ns top.master_d : mem[78:87] = (b9, c8, d7, f9) 4 us top.master_d : mem[78:87] = (c4, d4, d7, f9) 4100 ns top.master_d : mem[78:87] = (c4, d4, e4, 107) 4200 ns top.master_d : mem[78:87] = (d4, e5, f6, 107) 4300 ns top.master_d : mem[78:87] = (d4, e5, f6, 11a) 4400 ns top.master_d : mem[78:87] = (df, f1, 103, 128) 4500 ns top.master_d : mem[78:87] = (df, f1, 103, 128) 4600 ns top.master_d : mem[78:87] = (df, f1, 103, 128) 4700 ns top.master_d : mem[78:87] = (df, f1, 103, 128) 4800 ns top.master_d : mem[78:87] = (ea, fd, 110, 136) 4900 ns top.master_d : mem[78:87] = (fa, fd, 110, 136) 5 us top.master_d : mem[78:87] = (fa, 10e, 122, 149) 5100 ns top.master_d : mem[78:87] = (105, 11a, 12f, 157) 5200 ns top.master_d : mem[78:87] = (105, 11a, 12f, 157) 5300 ns top.master_d : mem[78:87] = (105, 11a, 12f, 157) 5400 ns top.master_d : mem[78:87] = (105, 11a, 12f, 157) 5500 ns top.master_d : mem[78:87] = (110, 126, 13c, 165) 5600 ns top.master_d : mem[78:87] = (110, 126, 13c, 165) 5700 ns top.master_d : mem[78:87] = (120, 137, 14e, 165) 5800 ns top.master_d : mem[78:87] = (12b, 143, 14e, 178) 5900 ns top.master_d : mem[78:87] = (12b, 143, 15b, 186) 6 us top.master_d : mem[78:87] = (12b, 143, 15b, 186) 6100 ns top.master_d : mem[78:87] = (12b, 143, 15b, 186) 6200 ns top.master_d : mem[78:87] = (136, 14f, 168, 194) 6300 ns top.master_d : mem[78:87] = (136, 14f, 168, 194) 6400 ns top.master_d : mem[78:87] = (136, 14f, 168, 194) 6500 ns top.master_d : mem[78:87] = (146, 160, 17a, 1a7) 6600 ns top.master_d : mem[78:87] = (151, 16c, 187, 1b5) 6700 ns top.master_d : mem[78:87] = (151, 16c, 187, 1b5) 6800 ns top.master_d : mem[78:87] = (151, 16c, 187, 1b5) 6900 ns top.master_d : mem[78:87] = (15c, 178, 194, 1c3) 7 us top.master_d : mem[78:87] = (15c, 178, 194, 1c3) 7100 ns top.master_d : mem[78:87] = (15c, 178, 194, 1c3) 7200 ns top.master_d : mem[78:87] = (16c, 189, 194, 1c3) 7300 ns top.master_d : mem[78:87] = (177, 195, 1a1, 1e4) 7400 ns top.master_d : mem[78:87] = (177, 195, 1a1, 1e4) 7500 ns top.master_d : mem[78:87] = (177, 195, 1a1, 1e4) 7600 ns top.master_d : mem[78:87] = (182, 1a1, 1ae, 1f2) 7700 ns top.master_d : mem[78:87] = (182, 1a1, 1ae, 1f2) 7800 ns top.master_d : mem[78:87] = (182, 1a1, 1ae, 1f2) 7900 ns top.master_d : mem[78:87] = (182, 1a1, 1ae, 1f2) 8 us top.master_d : mem[78:87] = (18d, 1ad, 1cd, 213) 8100 ns top.master_d : mem[78:87] = (18d, 1ad, 1cd, 213) 8200 ns top.master_d : mem[78:87] = (18d, 1ad, 1cd, 213) 8300 ns top.master_d : mem[78:87] = (18d, 1ad, 1cd, 213) 8400 ns top.master_d : mem[78:87] = (198, 1b9, 1da, 221) 8500 ns top.master_d : mem[78:87] = (198, 1b9, 1da, 221) 8600 ns top.master_d : mem[78:87] = (198, 1b9, 1da, 221) 8700 ns top.master_d : mem[78:87] = (1b3, 1c5, 1e7, 22f) 8800 ns top.master_d : mem[78:87] = (1b3, 1d6, 1f9, 242) 8900 ns top.master_d : mem[78:87] = (1b3, 1d6, 1f9, 242) 9 us top.master_d : mem[78:87] = (1b3, 1d6, 1f9, 242) 9100 ns top.master_d : mem[78:87] = (1be, 1e2, 206, 250) 9200 ns top.master_d : mem[78:87] = (1be, 1e2, 206, 250) 9300 ns top.master_d : mem[78:87] = (1be, 1e2, 206, 250) 9400 ns top.master_d : mem[78:87] = (1c9, 1ee, 213, 25e) 9500 ns top.master_d : mem[78:87] = (1d9, 1ff, 225, 25e) 9600 ns top.master_d : mem[78:87] = (1d9, 1ff, 225, 271) 9700 ns top.master_d : mem[78:87] = (1d9, 1ff, 225, 271) 9800 ns top.master_d : mem[78:87] = (1e4, 20b, 232, 27f) 9900 ns top.master_d : mem[78:87] = (1e4, 20b, 232, 27f) systemc-2.3.4/examples/sysc/simple_bus/simple_bus_arbiter_if.h0000644000175000017500000000354314342422106024534 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_arbiter_if.h : The arbiter interface. Original Author: Ric Hilderink, Synopsys, Inc., 2001-10-11 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef __simple_bus_arbiter_if_h #define __simple_bus_arbiter_if_h #include #include "simple_bus_types.h" class simple_bus_arbiter_if : public virtual sc_interface { public: virtual simple_bus_request * arbitrate(const simple_bus_request_vec &requests) = 0; }; // end class simple_bus_arbiter_if #endif systemc-2.3.4/examples/sysc/simple_bus/simple_bus_types.cpp0000644000175000017500000000344514342422106024126 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_bus_types.h : The common types. Original Author: Holger Keding, Synopsys, Inc., 2002-01-28 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // only needed for more readable debug output char simple_bus_status_str[4][20] = {"SIMPLE_BUS_OK" , "SIMPLE_BUS_REQUEST" , "SIMPLE_BUS_WAIT" , "SIMPLE_BUS_ERROR"}; systemc-2.3.4/examples/sysc/simple_bus/Makefile0000644000175000017500000000024114342422106021463 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT := simple_bus SRCS := $(wildcard *.cpp) OBJS := $(SRCS:.cpp=.o) include ../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/Makefile.am0000644000175000017500000000676514342422106017736 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## examples/sysc/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc. ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: Philipp Hartmann, OFFIS, 2013-05-20 ## Description of Modification: Rewritten for (mostly) non-recursive build, ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.examples all: @echo "To compile and run the examples type" @echo " make check " ## use a wrapper script to check expected outputs TESTS = $(check_SCRIPTS) check_SCRIPTS = $(examples_TESTS:=.sh) check_PROGRAMS = $(examples_TESTS) ## ************************************************************************ ## additional data for installation syscexamplesdir = $(examplesdir)/sysc examples_FILES = \ README.txt \ \ fft/README ## ************************************************************************ examples_INPUT =input.txt examples_GOLDEN=golden.log ## filled later examples_BUILD = examples_CLEAN = examples_TESTS = examples_DIRS = ## ## list of SystemC examples ## ## main examples include fft/fft_flpt/test.am include fft/fft_fxpt/test.am examples_DIRS += fft include fir/test.am include pipe/test.am include pkt_switch/test.am include risc_cpu/test.am include rsa/test.am include simple_bus/test.am include simple_fifo/test.am include simple_perf/test.am ## 2.1 examples include 2.1/dpipe/test.am include 2.1/forkjoin/test.am include 2.1/reset_signal_is/test.am include 2.1/sc_export/test.am include 2.1/sc_report/test.am include 2.1/scx_barrier/test.am include 2.1/scx_mutex_w_policy/test.am include 2.1/specialized_signals/test.am examples_DIRS += 2.1 ## 2.3 examples include 2.3/sc_rvd/test.am include 2.3/sc_ttd/test.am include 2.3/simple_async/test.am examples_DIRS += 2.3/include examples_DIRS += 2.3 ## ************************************************************************ # install examples? if SEPARATE_INSTALL_TREE nobase_syscexamples_DATA = \ $(examples_FILES) uninstall-hook: test ! -d "$(syscexamplesdir)" || ( set -e ; cd "$(syscexamplesdir)" ; \ for dir in $(examples_DIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir "$(syscexamplesdir)" ) endif # SEPARATE_INSTALL_TREE EXTRA_DIST += \ $(examples_FILES) \ CMakeLists.txt CLEANFILES += \ $(examples_CLEAN) \ $(check_SCRIPTS) ## Taf! systemc-2.3.4/examples/sysc/simple_fifo/0000755000175000017500000000000014342422106020160 5ustar carstencarstensystemc-2.3.4/examples/sysc/simple_fifo/simple_fifo.vcxproj0000644000175000017500000002726714342422106024107 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C} simple_fifo Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/simple_fifo/test.am0000644000175000017500000000512114342422106021455 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: simple_fifo ## %C%: simple_fifo examples_TESTS += simple_fifo/test simple_fifo_test_CPPFLAGS = \ $(AM_CPPFLAGS) simple_fifo_test_SOURCES = \ $(simple_fifo_H_FILES) \ $(simple_fifo_CXX_FILES) examples_BUILD += \ $(simple_fifo_BUILD) examples_CLEAN += \ simple_fifo/run.log \ simple_fifo/expected_trimmed.log \ simple_fifo/run_trimmed.log \ simple_fifo/diff.log examples_FILES += \ $(simple_fifo_H_FILES) \ $(simple_fifo_CXX_FILES) \ $(simple_fifo_BUILD) \ $(simple_fifo_EXTRA) examples_DIRS += simple_fifo ## example-specific details simple_fifo_H_FILES = simple_fifo_CXX_FILES = \ simple_fifo/simple_fifo.cpp simple_fifo_BUILD = \ simple_fifo/golden.log simple_fifo_EXTRA = \ simple_fifo/simple_fifo.sln \ simple_fifo/simple_fifo.vcxproj \ simple_fifo/CMakeLists.txt \ simple_fifo/Makefile #simple_fifo_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/simple_fifo/simple_fifo.cpp0000644000175000017500000001014414342422106023160 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_fifo.cpp -- Simple SystemC 2.0 producer/consumer example. From "An Introduction to System Level Modeling in SystemC 2.0". By Stuart Swan, Cadence Design Systems. Available at www.accellera.org Original Author: Stuart Swan, Cadence Design Systems, 2001-06-18 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include class write_if : virtual public sc_interface { public: virtual void write(char) = 0; virtual void reset() = 0; }; class read_if : virtual public sc_interface { public: virtual void read(char &) = 0; virtual int num_available() = 0; }; class fifo : public sc_channel, public write_if, public read_if { public: fifo(sc_module_name name) : sc_channel(name), num_elements(0), first(0) {} void write(char c) { if (num_elements == max) wait(read_event); data[(first + num_elements) % max] = c; ++ num_elements; write_event.notify(); } void read(char &c){ if (num_elements == 0) wait(write_event); c = data[first]; -- num_elements; first = (first + 1) % max; read_event.notify(); } void reset() { num_elements = first = 0; } int num_available() { return num_elements;} private: enum e { max = 10 }; char data[max]; int num_elements, first; sc_event write_event, read_event; }; class producer : public sc_module { public: sc_port out; SC_HAS_PROCESS(producer); producer(sc_module_name name) : sc_module(name) { SC_THREAD(main); } void main() { const char *str = "Visit www.accellera.org and see what SystemC can do for you today!\n"; while (*str) out->write(*str++); } }; class consumer : public sc_module { public: sc_port in; SC_HAS_PROCESS(consumer); consumer(sc_module_name name) : sc_module(name) { SC_THREAD(main); } void main() { char c; cout << endl << endl; while (true) { in->read(c); cout << c << flush; if (in->num_available() == 1) cout << "<1>" << flush; if (in->num_available() == 9) cout << "<9>" << flush; } } }; class top : public sc_module { public: fifo *fifo_inst; producer *prod_inst; consumer *cons_inst; top(sc_module_name name) : sc_module(name) { fifo_inst = new fifo("Fifo1"); prod_inst = new producer("Producer1"); prod_inst->out(*fifo_inst); cons_inst = new consumer("Consumer1"); cons_inst->in(*fifo_inst); } }; int sc_main (int, char *[]) { top top1("Top1"); sc_start(); return 0; } systemc-2.3.4/examples/sysc/simple_fifo/CMakeLists.txt0000644000175000017500000000352714342422106022727 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/simple_fifo/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (simple_fifo simple_fifo.cpp) target_link_libraries (simple_fifo SystemC::systemc) configure_and_add_test (simple_fifo) systemc-2.3.4/examples/sysc/simple_fifo/golden.log0000644000175000017500000000015414342422106022133 0ustar carstencarsten V<9>isit www<1>.a<9>ccellera<1>.o<9>rg and s<1>ee<9> what Sy<1>st<9>emC can <1>do<9> for you<1> today!<1> systemc-2.3.4/examples/sysc/simple_fifo/Makefile0000644000175000017500000000024214342422106021616 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT := simple_fifo SRCS := $(wildcard *.cpp) OBJS := $(SRCS:.cpp=.o) include ../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/simple_fifo/simple_fifo.sln0000644000175000017500000000230014342422106023165 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_fifo", "simple_fifo.vcxproj", "{1CDB535E-14E9-4E52-8898-0CE0B826B97C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|Win32.ActiveCfg = Debug|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|Win32.Build.0 = Debug|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|x64.ActiveCfg = Debug|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Debug|x64.Build.0 = Debug|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|Win32.ActiveCfg = Release|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|Win32.Build.0 = Release|Win32 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|x64.ActiveCfg = Release|x64 {1CDB535E-14E9-4E52-8898-0CE0B826B97C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/fir/0000755000175000017500000000000014342422106016444 5ustar carstencarstensystemc-2.3.4/examples/sysc/fir/display.h0000644000175000017500000000335214342422106020265 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** display.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ SC_MODULE(display) { sc_in output_data_ready; sc_in result; int i, tmp1; SC_CTOR(display) { SC_METHOD(entry); dont_initialize(); sensitive << output_data_ready.pos(); i = 0; } void entry(); }; systemc-2.3.4/examples/sysc/fir/display.cpp0000644000175000017500000000373714342422106020627 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** display.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "display.h" void display::entry(){ // Reading Data when valid if high tmp1 = result.read(); cout << "Display : " << tmp1 << " " /* << " at time " << sc_time_stamp() << endl; */ << " at time " << sc_time_stamp().to_double() << endl; i++; if(i == 24) { cout << "Simulation of " << i << " items finished" /* << " at time " << sc_time_stamp() << endl; */ << " at time " << sc_time_stamp().to_double() << endl; sc_stop(); }; } // EOF systemc-2.3.4/examples/sysc/fir/fir_common.vcxproj0000644000175000017500000002221014342422106022206 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B} fir_common Win32Proj StaticLibrary Unicode true StaticLibrary Unicode StaticLibrary Unicode true StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\$(ProjectName)\ $(ProjectDir)$(IntDir) $(Configuration)\$(ProjectName)\ $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\$(ProjectName)\ $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\$(ProjectName)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions) Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc-2.3.4/examples/sysc/fir/test.am0000644000175000017500000000564114342422106017750 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: fir ## %C%: fir examples_TESTS += fir/test fir/test_rtl fir_test_CPPFLAGS = \ $(AM_CPPFLAGS) fir_test_SOURCES = \ $(fir_H_FILES) \ $(fir_CXX_COMMON) \ $(fir_CXX_FILES) fir_test_rtl_SOURCES = \ $(fir_H_FILES) \ $(fir_CXX_COMMON) \ $(fir_rtl_CXX_FILES) examples_BUILD += \ $(fir_BUILD) examples_CLEAN += \ fir/run.log \ fir/expected_trimmed.log \ fir/run_trimmed.log \ fir/diff.log examples_FILES += \ $(fir_H_FILES) \ $(fir_CXX_COMMON) \ $(fir_CXX_FILES) \ $(fir_rtl_CXX_FILES) \ $(fir_BUILD) \ $(fir_EXTRA) examples_DIRS += fir ## example-specific details fir_H_FILES = \ fir/display.h \ fir/fir.h \ fir/fir_const.h \ fir/fir_data.h \ fir/fir_fsm.h \ fir/fir_top.h \ fir/stimulus.h fir_CXX_COMMON = \ fir/stimulus.cpp \ fir/display.cpp fir_CXX_FILES = \ fir/fir.cpp \ fir/main.cpp fir_rtl_CXX_FILES = \ fir/fir_fsm.cpp \ fir/fir_data.cpp \ fir/main_rtl.cpp # output varies between fir/fir_rtl #fir_BUILD = \ # fir/golden.log fir_EXTRA = \ fir/log \ fir/rtl_log \ fir/fir.sln \ fir/fir_common.vcxproj \ fir/fir.vcxproj \ fir/fir_rtl.vcxproj \ fir/CMakeLists.txt \ fir/Makefile \ fir/README #fir_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/fir/fir_const.h0000644000175000017500000000335114342422106020605 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_const.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ coefs[0] = -6; coefs[1] = -4; coefs[2] = 13; coefs[3] = 16; coefs[4] = -18; coefs[5] = -41; coefs[6] = 23; coefs[7] = 154; coefs[8] = 222; coefs[9] = 154; coefs[10] = 23; coefs[11] = -41; coefs[12] = -18; coefs[13] = 16; coefs[14] = 13; coefs[15] = -4; systemc-2.3.4/examples/sysc/fir/fir_fsm.h0000644000175000017500000000354214342422106020246 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_fsm.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ SC_MODULE(fir_fsm) { sc_in clock; sc_in reset; sc_in in_valid; sc_out state_out; // defining the states of the ste machine enum {reset_s, first_s, second_s, third_s, output_s} state; SC_CTOR(fir_fsm) { SC_METHOD(entry); dont_initialize(); sensitive << clock.pos(); } void entry(); }; systemc-2.3.4/examples/sysc/fir/fir_data.h0000644000175000017500000000365314342422106020375 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_data.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ SC_MODULE(fir_data) { sc_in reset; sc_in state_out; sc_in sample; sc_out result; sc_out output_data_ready; sc_int<19> acc; sc_int<8> shift[16]; sc_int<9> coefs[16]; SC_CTOR(fir_data) { SC_METHOD(entry); dont_initialize(); sensitive << reset; sensitive << state_out; sensitive << sample; #include "fir_const.h" } void entry(); }; systemc-2.3.4/examples/sysc/fir/fir.vcxproj0000644000175000017500000003040414342422106020642 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370} fir Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 /ltcg %(AdditionalOptions) X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 /ltcg %(AdditionalOptions) {171393b0-59c8-4e90-96ee-1ddf852cbe9b} false systemc-2.3.4/examples/sysc/fir/README0000644000175000017500000000535714342422106017336 0ustar carstencarstenREADME for FIR =================================================================== The example shows how to use the C++ modeling with SystemC to model hardware properties. One important aspect of modeling with the Systemc classes is that you can use the same environment for different levels of abstraction, from very abstract down to RT-level. My example models a simple FIR filter which reads in samples with each input_valid signal and writing out the result when output_data_ready is high. The filter is a 16 tap FIR filter(fir.cc). The test bench feeds simply ascending values into the FIR(stimulus.cc) and the output is sampled (display.cc) and displayed with print statements. The basic structure looks like this: +--------------------------------------------------+ | +-----------+ +-----------+ +-----------+ | | | | | | | | | | | stimuli |---->| FIR |-->| display | | | | | | | | | | | +-----------+ +-----------+ +-----------+ | | | | | | main | +--------------------------------------------------+ In order to compile the example you have to execute 'make'. Please note that the file Makefile.defs contains the location of the SystemC class library, which might be different for you, depending on your installation. Once the compilation is finished, you will find an executable 'run.x'. Once I have evaluated the functionality for the FIR it might be interesting to "refine" the model further to get an better idea about the complexity of the design. When modeling with C++ using SystemC one can easily refine the FIR filter into a RTL style model. I have refined the FIR process under the assumption that I use 4 cycles to do the whole computation. The structure looks now like this: +---------------------------------------------------+ | +-----------+ +------------+ +-----------+ | | | | | FIR_top | | | | | | stimuli | | +--------+ | | display | | | | | | |FIR_FSM | | | | | | +-----------+ | +--------+ | +-----------+ | | | +--------+ | | | | |FIR_data| | | | | +--------+ | | | main +------------+ | +---------------------------------------------------+ I have modeled a state machine(fir_fsm.cc) and a datapath(fir_data.cc) in order to distribute the operations into 4 cycles, which makes the model more difficult to read, but this models now a "RTL" like view to the architecture for this design. systemc-2.3.4/examples/sysc/fir/fir_rtl.vcxproj0000644000175000017500000003004314342422106021522 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {1C76D968-D583-4B12-A138-D52A8AA6E835} fir_rtl Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 /vmg %(AdditionalOptions) Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 /vmg %(AdditionalOptions) $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 /ltcg %(AdditionalOptions) {171393b0-59c8-4e90-96ee-1ddf852cbe9b} systemc-2.3.4/examples/sysc/fir/fir.sln0000644000175000017500000000543214342422106017746 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir", "fir.vcxproj", "{EF9191E5-B7F6-499A-A3CB-55283EFD6370}" ProjectSection(ProjectDependencies) = postProject {171393B0-59C8-4E90-96EE-1DDF852CBE9B} = {171393B0-59C8-4E90-96EE-1DDF852CBE9B} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir_common", "fir_common.vcxproj", "{171393B0-59C8-4E90-96EE-1DDF852CBE9B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fir_rtl", "fir_rtl.vcxproj", "{1C76D968-D583-4B12-A138-D52A8AA6E835}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|Win32.ActiveCfg = Debug|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|Win32.Build.0 = Debug|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|x64.ActiveCfg = Debug|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Debug|x64.Build.0 = Debug|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|Win32.ActiveCfg = Release|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|Win32.Build.0 = Release|Win32 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|x64.ActiveCfg = Release|x64 {EF9191E5-B7F6-499A-A3CB-55283EFD6370}.Release|x64.Build.0 = Release|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|Win32.ActiveCfg = Debug|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|Win32.Build.0 = Debug|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|x64.ActiveCfg = Debug|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Debug|x64.Build.0 = Debug|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|Win32.ActiveCfg = Release|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|Win32.Build.0 = Release|Win32 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|x64.ActiveCfg = Release|x64 {171393B0-59C8-4E90-96EE-1DDF852CBE9B}.Release|x64.Build.0 = Release|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|Win32.ActiveCfg = Debug|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|Win32.Build.0 = Debug|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|x64.ActiveCfg = Debug|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Debug|x64.Build.0 = Debug|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|Win32.ActiveCfg = Release|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|Win32.Build.0 = Release|Win32 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|x64.ActiveCfg = Release|x64 {1C76D968-D583-4B12-A138-D52A8AA6E835}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/fir/stimulus.cpp0000644000175000017500000000403214342422106021034 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stimulus.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "stimulus.h" void stimulus::entry() { cycle++; // sending some reset values if (cycle<4) { reset.write(true); input_valid.write(false); } else { reset.write(false); input_valid.write( false ); // sending normal mode values if (cycle%10==0) { input_valid.write(true); sample.write( (int)send_value1 ); cout << "Stimuli : " << (int)send_value1 << " at time " /* << sc_time_stamp() << endl; */ << sc_time_stamp().to_double() << endl; send_value1++; }; } } systemc-2.3.4/examples/sysc/fir/main_rtl.cpp0000644000175000017500000000446414342422106020765 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main_rtl.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "stimulus.h" #include "display.h" #include "fir_top.h" int sc_main (int, char *[]) { sc_clock clock; sc_signal reset; sc_signal input_valid; sc_signal sample; sc_signal output_data_ready; sc_signal result; stimulus stimulus1("stimulus_block"); stimulus1.reset(reset); stimulus1.input_valid(input_valid); stimulus1.sample(sample); stimulus1.CLK(clock); fir_top fir_top1 ( "process_body"); fir_top1.RESET(reset); fir_top1.IN_VALID(input_valid); fir_top1.SAMPLE(sample); fir_top1.OUTPUT_DATA_READY(output_data_ready); fir_top1.RESULT(result); fir_top1.CLK(clock); display display1 ( "display"); display1.output_data_ready(output_data_ready); display1.result(result); sc_start(); return 0; } systemc-2.3.4/examples/sysc/fir/log0000644000175000017500000000243014342422106017147 0ustar carstencarstenStimuli : 0 at time 9 Display : 0 at time 10 Stimuli : 1 at time 19 Display : -6 at time 20 Stimuli : 2 at time 29 Display : -16 at time 30 Stimuli : 3 at time 39 Display : -13 at time 40 Stimuli : 4 at time 49 Display : 6 at time 50 Stimuli : 5 at time 59 Display : 7 at time 60 Stimuli : 6 at time 69 Display : -33 at time 70 Stimuli : 7 at time 79 Display : -50 at time 80 Stimuli : 8 at time 89 Display : 87 at time 90 Stimuli : 9 at time 99 Display : 446 at time 100 Stimuli : 10 at time 109 Display : 959 at time 110 Stimuli : 11 at time 119 Display : 1495 at time 120 Stimuli : 12 at time 129 Display : 1990 at time 130 Stimuli : 13 at time 139 Display : 2467 at time 140 Stimuli : 14 at time 149 Display : 2960 at time 150 Stimuli : 15 at time 159 Display : 3466 at time 160 Stimuli : 16 at time 169 Display : 3968 at time 170 Stimuli : 17 at time 179 Display : 4470 at time 180 Stimuli : 18 at time 189 Display : 4972 at time 190 Stimuli : 19 at time 199 Display : 5474 at time 200 Stimuli : 20 at time 209 Display : 5976 at time 210 Stimuli : 21 at time 219 Display : 6478 at time 220 Stimuli : 22 at time 229 Display : 6980 at time 230 Stimuli : 23 at time 239 Display : 7482 at time 240 Simulation of 24 items finished at time 240 SystemC: simulation stopped by user. systemc-2.3.4/examples/sysc/fir/stimulus.h0000644000175000017500000000351214342422106020503 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** stimulus.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ SC_MODULE(stimulus) { sc_out reset; sc_out input_valid; sc_out sample; sc_in CLK; sc_int<8> send_value1; unsigned cycle; SC_CTOR(stimulus) { SC_METHOD(entry); dont_initialize(); sensitive << CLK.pos(); send_value1 = 0; cycle = 0; } void entry(); }; systemc-2.3.4/examples/sysc/fir/fir.cpp0000644000175000017500000000453714342422106017741 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "fir.h" void fir::entry() { sc_int<8> sample_tmp; sc_int<17> pro; sc_int<19> acc; sc_int<8> shift[16]; // reset watching /* this would be an unrolled loop */ for (int i=0; i<=15; i++) shift[i] = 0; result.write(0); output_data_ready.write(false); wait(); // main functionality while(1) { output_data_ready.write(false); do { wait(); } while ( !(input_valid == true) ); sample_tmp = sample.read(); acc = sample_tmp*coefs[0]; for(int i=14; i>=0; i--) { /* this would be an unrolled loop */ pro = shift[i]*coefs[i+1]; acc += pro; }; for(int i=14; i>=0; i--) { /* this would be an unrolled loop */ shift[i+1] = shift[i]; }; shift[0] = sample_tmp; // write output values result.write((int)acc); output_data_ready.write(true); wait(); }; } systemc-2.3.4/examples/sysc/fir/CMakeLists.txt0000644000175000017500000000473714342422106021217 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/fir/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (fir main.cpp fir.h fir.cpp fir_const.h stimulus.h stimulus.cpp display.h display.cpp) target_link_libraries (fir SystemC::systemc) configure_and_add_test (fir) add_executable (fir_rtl main_rtl.cpp fir_top.h fir_fsm.h fir_fsm.cpp fir_data.h fir_data.cpp fir_const.h stimulus.h stimulus.cpp display.h display.cpp) target_link_libraries (fir_rtl SystemC::systemc) configure_and_add_test (fir_rtl) systemc-2.3.4/examples/sysc/fir/fir_top.h0000644000175000017500000000440414342422106020261 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_top.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "fir_fsm.h" #include "fir_data.h" SC_MODULE(fir_top) { sc_in CLK; sc_in RESET; sc_in IN_VALID; sc_in SAMPLE; sc_out OUTPUT_DATA_READY; sc_out RESULT; sc_signal state_out; fir_fsm *fir_fsm1; fir_data *fir_data1; SC_CTOR(fir_top) { fir_fsm1 = new fir_fsm("FirFSM"); fir_fsm1->clock(CLK); fir_fsm1->reset(RESET); fir_fsm1->in_valid(IN_VALID); fir_fsm1->state_out(state_out); fir_data1 = new fir_data("FirData"); fir_data1 -> reset(RESET); fir_data1 -> state_out(state_out); fir_data1 -> sample(SAMPLE); fir_data1 -> result(RESULT); fir_data1 -> output_data_ready(OUTPUT_DATA_READY); } }; systemc-2.3.4/examples/sysc/fir/rtl_log0000644000175000017500000000251414342422106020033 0ustar carstencarstenInformation : Reset state Information : Reset state Stimuli : 0 at time 9 Display : 0 at time 13 Stimuli : 1 at time 19 Display : -6 at time 23 Stimuli : 2 at time 29 Display : -16 at time 33 Stimuli : 3 at time 39 Display : -13 at time 43 Stimuli : 4 at time 49 Display : 6 at time 53 Stimuli : 5 at time 59 Display : 7 at time 63 Stimuli : 6 at time 69 Display : -33 at time 73 Stimuli : 7 at time 79 Display : -50 at time 83 Stimuli : 8 at time 89 Display : 87 at time 93 Stimuli : 9 at time 99 Display : 446 at time 103 Stimuli : 10 at time 109 Display : 959 at time 113 Stimuli : 11 at time 119 Display : 1495 at time 123 Stimuli : 12 at time 129 Display : 1990 at time 133 Stimuli : 13 at time 139 Display : 2467 at time 143 Stimuli : 14 at time 149 Display : 2960 at time 153 Stimuli : 15 at time 159 Display : 3466 at time 163 Stimuli : 16 at time 169 Display : 3968 at time 173 Stimuli : 17 at time 179 Display : 4470 at time 183 Stimuli : 18 at time 189 Display : 4972 at time 193 Stimuli : 19 at time 199 Display : 5474 at time 203 Stimuli : 20 at time 209 Display : 5976 at time 213 Stimuli : 21 at time 219 Display : 6478 at time 223 Stimuli : 22 at time 229 Display : 6980 at time 233 Stimuli : 23 at time 239 Display : 7482 at time 243 Simulation of 24 items finished at time 243 SystemC: simulation stopped by user. systemc-2.3.4/examples/sysc/fir/fir.h0000644000175000017500000000352214342422106017377 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir.h -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ SC_MODULE(fir) { sc_in reset; sc_in input_valid; sc_in sample; sc_out output_data_ready; sc_out result; sc_in_clk CLK; sc_int<9> coefs[16]; SC_CTOR(fir) { SC_CTHREAD(entry, CLK.pos()); reset_signal_is(reset,true); #include "fir_const.h" } void entry(); }; systemc-2.3.4/examples/sysc/fir/fir_data.cpp0000644000175000017500000000611514342422106020724 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_data.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "fir_data.h" void fir_data::entry() { int state; sc_int<8> sample_tmp; // reset functionality if(reset.read()==true) { sample_tmp = 0; acc = 0; for (int i=0; i<=15; i++) shift[i] = 0; } // default settings result.write(0); output_data_ready.write(false); state = state_out.read(); #ifdef DEBUG // cout << "Data debug : " << " " << state << " " << acc << " " << " at time " << sc_time_stamp() << endl; cout << "Data debug : " << " " << state << " " << acc << " " << " at time " << sc_time_stamp().to_double() << endl; for(int i=15; i>=0; i--) { cout << "Data debug : shift(" << i << ") " << shift[i] << endl; }; #endif // cycle behavior could be as well a case statement switch (state) { case 1 : sample_tmp = sample.read(); acc = sample_tmp*coefs[0]; acc += shift[14]* coefs[15]; acc += shift[13]*coefs[14]; acc += shift[12]*coefs[13]; acc += shift[11]*coefs[12]; break; case 2 : acc += shift[10]*coefs[11]; acc += shift[9]*coefs[10]; acc += shift[8]*coefs[9]; acc += shift[7]*coefs[8]; break; case 3 : acc += shift[6]*coefs[7]; acc += shift[5]*coefs[6]; acc += shift[4]*coefs[5]; acc += shift[3]*coefs[4]; break; case 4 : acc += shift[2]*coefs[3]; acc += shift[1]*coefs[2]; acc += shift[0]*coefs[1]; for(int i=14; i>=0; i--) { shift[i+1] = shift[i]; }; shift[0] = sample.read(); result.write((int)acc); output_data_ready.write(true); break; default : cout << "Information : Reset state" << endl; } } systemc-2.3.4/examples/sysc/fir/fir_fsm.cpp0000644000175000017500000000466214342422106020605 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fir_fsm.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "fir_fsm.h" void fir_fsm::entry() { sc_uint<3> state_tmp; // reset behavior if(reset.read()==true) { state = reset_s; } else { #ifdef DEBUG cout << "debug: " << state << " " << state_tmp << " " << reset.read() << endl; #endif // main state machine switch(state) { case reset_s: state = first_s; state_tmp = 0; state_out.write((unsigned)state_tmp); break; case first_s: if(in_valid.read()==true) { state = second_s; }; state_tmp = 1; state_out.write((unsigned)state_tmp); break; case second_s: state = third_s; state_tmp = 2; state_out.write((unsigned)state_tmp); break; case third_s: state = output_s; state_tmp = 3; state_out.write((unsigned)state_tmp); break; default: state = first_s; state_tmp = 4; state_out.write((unsigned)state_tmp); break; } } } systemc-2.3.4/examples/sysc/fir/main.cpp0000644000175000017500000000441514342422106020100 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- Original Author: Rocco Jonack, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include "stimulus.h" #include "display.h" #include "fir.h" int sc_main (int, char *[]) { sc_clock clock; sc_signal reset; sc_signal input_valid; sc_signal sample; sc_signal output_data_ready; sc_signal result; stimulus stimulus1("stimulus_block"); stimulus1.reset(reset); stimulus1.input_valid(input_valid); stimulus1.sample(sample); stimulus1.CLK(clock); fir fir1( "process_body"); fir1.reset(reset); fir1.input_valid(input_valid); fir1.sample(sample); fir1.output_data_ready(output_data_ready); fir1.result(result); fir1.CLK(clock); display display1 ( "display"); display1.output_data_ready(output_data_ready); display1.result(result); sc_start(); return 0; } systemc-2.3.4/examples/sysc/fir/Makefile0000644000175000017500000000114414342422106020104 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECTS := fir fir_rtl COMMON_TARGETS := all build run check clean ultraclean COMMON_SRCS = \ stimulus.cpp \ display.cpp fir_SRCS = \ $(COMMON_SRCS) \ fir.cpp \ main.cpp fir_rtl_SRCS = \ $(COMMON_SRCS) \ fir_fsm.cpp \ fir_data.cpp \ main_rtl.cpp # project not set -> all projects ifeq (,$(strip $(PROJECT))) $(COMMON_TARGETS):: @for prj in $(PROJECTS) ; do \ $(MAKE) $@ FLAG_BATCH=1 PROJECT=$$prj ; \ done else # module-specific rules OBJS := $($(PROJECT)_SRCS:.cpp=.o) include ../../build-unix/Makefile.rules endif # project switch ## Taf! systemc-2.3.4/examples/sysc/README.txt0000644000175000017500000000356114342422106017367 0ustar carstencarstenBuilding and running the examples ================================= Unix-like systems ----------------- In addition to running the examples during the SystemC library build process ('make check'), simple Makefiles are provided for building and running the examples after the installation of SystemC. Each subdirectory contains a simple Makefile, which includes the top-level Makefiles - Makefile.config Setup environment for the build. Default values are provided, but some variables (like the TARGET_ARCH) may need to be provided from the environment. The following variables can be set (or overridden from the environment): SYSTEMC_HOME - path to installation TARGET_ARCH - target architecture ARCH_SUFFIX - library architecture suffix (see INSTALL) For more details, please see Makefile.config directly. - Makefile.rules Default rules for building and running the examples. The following targets are provided: all - build example run - run example check - compare with expected output, if present clean - clean example ultraclean - clean even more For convenience, a simple recursing Makefile is available as well. - Makefile.all With this, a specific target can be invoked on all examples at once: gmake -f Makefile.all TARGET_ARCH=linux64 run Microsoft Visual C++ -------------------- Project files for Microsoft Visual C++ 2010 (10.0) are provided in the subdidrectory containing each of these examples. Each project file has the correct settings to build the example in either Debug or Release modes. The project files assume an environment variable name SYSTEMC_HOME and MSVC is set and contains the path to the mscv10 subdirectory. Update MSVC entry in SystemC_examples properties file. systemc-2.3.4/examples/sysc/risc_cpu/0000755000175000017500000000000014342422106017473 5ustar carstencarstensystemc-2.3.4/examples/sysc/risc_cpu/exec.cpp0000644000175000017500000001245514342422106021132 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** exec.cpp -- Integer Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "exec.h" #include "directive.h" void exec::entry(){ int opcode_tmp = 0; int add1_tmp = 0; signed int dina_tmp = 0; signed int dinb_tmp = 0; sc_dt::int64 dout_tmp = 0; unsigned int dest_tmp = 0; // // main loop // // // initialization of output wait(3); while(1) { if (in_valid.read() == true) { dina_tmp = dina.read(); dinb_tmp = dinb.read(); opcode_tmp = opcode.read(); dest_tmp = dest.read(); // output MUX switch (opcode_tmp) { case 0: // Stall // dout_tmp = dout_tmp; // keeps its value wait(); break; case 1: // add with carry dout_tmp = dina_tmp + dinb_tmp + add1_tmp; wait(); break; case 2: // sub with carry dout_tmp = dina_tmp - dinb_tmp - add1_tmp; wait(); break; case 3: // add without carry dout_tmp = dina_tmp + dinb_tmp; wait(); break; case 4: // sub without carry dout_tmp = dina_tmp - dinb_tmp; wait(); break; case 5: // multiply assume 2 clock cycle multiplication dout_tmp = dina_tmp * dinb_tmp; wait(); // so that BC has something to do wait(); break; case 6: // divide assume 2 clock cycle division if (dinb_tmp == 0) { printf("Division Exception - Divide by zero \n"); } else { dout_tmp = dina_tmp / dinb_tmp; } wait(); // so that BC has something to do wait(); break; case 7: // bitwise NAND dout_tmp = ~(dina_tmp & dinb_tmp); wait(); break; case 8: // bitwise AND dout_tmp = dina_tmp & dinb_tmp; wait(); break; case 9: // bitwise OR dout_tmp = dina_tmp | dinb_tmp; wait(); break; case 10: // bitwise XOR dout_tmp = dina_tmp ^ dinb_tmp; wait(); break; case 11: // bitwise complement dout_tmp = ~ dina_tmp; wait(); break; case 12: // left shift dout_tmp = dina_tmp << dinb_tmp; wait(); break; case 13: // right shift dout_tmp = dina_tmp >> dinb_tmp; wait(); break; case 14: // modulo dout_tmp = dina_tmp % dinb_tmp; wait(); break; default: printf("ALU: Bad Opcode %d.\n",opcode_tmp); break; } dout.write(static_cast(dout_tmp)); out_valid.write(true); destout.write(dest_tmp); if (dout_tmp == 0) { Z.write(true); } else { Z.write(false); } sc_dt::int64 abs_dout = dout_tmp >= 0 ? dout_tmp : -dout_tmp; const sc_dt::int64 carry_mask = sc_dt::int64(1) << 32; if (abs_dout & carry_mask) { C.write(true); } else { C.write(false); } if (abs_dout > carry_mask) { V.write(true); } else { V.write(false); } printf("\t\t\t\t\t\t\t-------------------------------\n"); cout << "\t\t\t\t\t\t\tALU :" << " op= " << opcode_tmp << " A= " << dina_tmp << " B= " << dinb_tmp << endl; cout << "\t\t\t\t\t\t\tALU :" << " R= " << dout_tmp << "-> R" << dest_tmp; cout << " at CSIM " << sc_time_stamp() << endl; printf("\t\t\t\t\t\t\t-------------------------------\n"); wait(); out_valid.write(false); wait(); } else { wait(); } } } systemc-2.3.4/examples/sysc/risc_cpu/icache.h0000644000175000017500000000574114342422106021067 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** icache.h -- Instruction Cache Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #define BOOT_LENGTH 5 #define MAX_CODE_LENGTH 500 struct icache : sc_module { sc_in datain; // modified instruction sc_in cs; // chip select sc_in we; // write enable for SMC sc_in addr; // address sc_in ld_valid; // load valid sc_in ld_data; // load data value sc_out dataout; // ram data out sc_out icache_valid; // output valid sc_out stall_fetch; // stall fetch if busy sc_in_clk CLK; // Parameter unsigned *icmemory; // icache data memory unsigned *ictagmemory; // icache tag memory signed int pid; // process ID int wait_cycles; // Number of cycles it takes to access imemory void init_param(int given_delay_cycles) { wait_cycles = given_delay_cycles; } //Constructor SC_CTOR(icache) { SC_CTHREAD(entry, CLK.pos()); // initialize instruction icmemory from external file pid = 0; FILE *fp = fopen("icache.img","r"); int size=0; unsigned int mem_word; icmemory = new unsigned[MAX_CODE_LENGTH]; ictagmemory = new unsigned[MAX_CODE_LENGTH]; for (size = 0; size < MAX_CODE_LENGTH; size++) { // initialize bad data icmemory[size] = 0xeeeeeeee; ictagmemory[size] = 0xeeeeeeee; } size = 0; while (fscanf(fp,"%x", &mem_word) != EOF) { icmemory[size] = mem_word; ictagmemory[size] = size; size++; } } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/program.img0000644000175000017500000000057314342422106021645 0ustar carstencarstenInput source name = test.m 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x01010203 /* add R1, R2, R3 */ 0x00000000 0x0202030e /* addi R2, R3, 14 */ 0x00000000 0x04040506 /* sub R4, R5, R6 */ 0x00000000 0x0504051c /* subi R4, R5, 28 */ 0x00000000 0x07010204 /* mul R1, R2, R4 */ 0x00000000 0x090a0d0f /* nand R10, R13, R15 */ 0x00000000 /* lw R11, R0, 1 */ 0x00000000 systemc-2.3.4/examples/sysc/risc_cpu/risc_cpu.sln0000644000175000017500000000227214342422106022023 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "risc_cpu", "risc_cpu.vcxproj", "{7E89CFF9-22EE-45E4-942B-100C34D8AD72}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|Win32.ActiveCfg = Debug|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|Win32.Build.0 = Debug|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|x64.ActiveCfg = Debug|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Debug|x64.Build.0 = Debug|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|Win32.ActiveCfg = Release|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|Win32.Build.0 = Release|Win32 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|x64.ActiveCfg = Release|x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/risc_cpu/mmxu.cpp0000644000175000017500000002237614342422106021177 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** mmxu.cpp -- MMX-Like Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "mmxu.h" #include "directive.h" #ifdef __SUNPRO_CC // Martin, fix the ios stuff! #define ios std::ios_base #endif void mmxu::entry(){ int opcode_tmp = 0; unsigned int dout_tmp = 0; unsigned int dest_tmp = 0; const char * opcode_encode; unsigned int mmxa_tmp = 0; unsigned int mmxb_tmp = 0; unsigned int mmxa0_tmp = 0; unsigned int mmxa1_tmp = 0; unsigned int mmxa2_tmp = 0; unsigned int mmxa3_tmp = 0; unsigned int mmxb0_tmp = 0; unsigned int mmxb1_tmp = 0; unsigned int mmxb2_tmp = 0; unsigned int mmxb3_tmp = 0; unsigned int mmxc0_tmp = 0; unsigned int mmxc1_tmp = 0; unsigned int mmxc2_tmp = 0; unsigned int mmxc3_tmp = 0; unsigned int mmxcU_tmp = 0; unsigned int mmxcL_tmp = 0; // // main loop // // // initialization of output wait(3); while(1) { if (mmx_valid.read() == true) { mmxa_tmp = mmxa.read(); mmxb_tmp = mmxb.read(); mmxa0_tmp = (mmxa_tmp & 0x000000ff) ; mmxb0_tmp = (mmxb_tmp & 0x000000ff) ; mmxa1_tmp = (mmxa_tmp & 0x0000ff00) >> 8 ; mmxb1_tmp = (mmxb_tmp & 0x0000ff00) >> 8 ; mmxa2_tmp = (mmxa_tmp & 0x00ff0000) >> 16 ; mmxb2_tmp = (mmxb_tmp & 0x00ff0000) >> 16 ; mmxa3_tmp = (mmxa_tmp & 0xff000000) >> 24 ; mmxb3_tmp = (mmxb_tmp & 0xff000000) >> 24 ; opcode_tmp = opcode.read(); dest_tmp = dest.read(); // output MUX switch (opcode_tmp) { case 0: // Stall opcode_encode = "STALL"; // dout_tmp = dout_tmp; // keeps its value wait(); break; case 3: // add opcode_encode = "PADD"; mmxc3_tmp = mmxa3_tmp + mmxb3_tmp; mmxc2_tmp = mmxa2_tmp + mmxb2_tmp; mmxc1_tmp = mmxa1_tmp + mmxb1_tmp; mmxc0_tmp = mmxa0_tmp + mmxb0_tmp; mmxc3_tmp = (mmxc3_tmp << 24) & 0xff000000; mmxc2_tmp = (mmxc2_tmp << 16) & 0x00ff0000; mmxc1_tmp = (mmxc1_tmp << 8) & 0x0000ff00; dout_tmp = mmxc0_tmp | mmxc1_tmp | mmxc2_tmp | mmxc3_tmp; wait(); break; case 4: // add with saturation opcode_encode = "PADDS"; mmxc3_tmp = mmxa3_tmp + mmxb3_tmp; mmxc2_tmp = mmxa2_tmp + mmxb2_tmp; mmxc1_tmp = mmxa1_tmp + mmxb1_tmp; mmxc0_tmp = mmxa0_tmp + mmxb0_tmp; if (mmxc3_tmp >= 256) mmxc3_tmp = 0xff; if (mmxc2_tmp >= 256) mmxc2_tmp = 0xff; if (mmxc1_tmp >= 256) mmxc1_tmp = 0xff; if (mmxc0_tmp >= 256) mmxc0_tmp = 0xff; mmxc3_tmp = (mmxc3_tmp << 24) & 0xff000000; mmxc2_tmp = (mmxc2_tmp << 16) & 0x00ff0000; mmxc1_tmp = (mmxc1_tmp << 8) & 0x0000ff00; dout_tmp = mmxc0_tmp | mmxc1_tmp | mmxc2_tmp | mmxc3_tmp; wait(); break; case 5: // sub opcode_encode = "PSUB"; mmxc3_tmp = mmxa3_tmp - mmxb3_tmp; mmxc2_tmp = mmxa2_tmp - mmxb2_tmp; mmxc1_tmp = mmxa1_tmp - mmxb1_tmp; mmxc0_tmp = mmxa0_tmp - mmxb0_tmp; mmxc3_tmp = (mmxc3_tmp << 24) & 0xff000000; mmxc2_tmp = (mmxc2_tmp << 16) & 0x00ff0000; mmxc1_tmp = (mmxc1_tmp << 8) & 0x0000ff00; dout_tmp = mmxc0_tmp | mmxc1_tmp | mmxc2_tmp | mmxc3_tmp; wait(); break; case 6: // sub with saturation opcode_encode = "PSUBS"; mmxc3_tmp = mmxa3_tmp - mmxb3_tmp; mmxc2_tmp = mmxa2_tmp - mmxb2_tmp; mmxc1_tmp = mmxa1_tmp - mmxb1_tmp; mmxc0_tmp = mmxa0_tmp - mmxb0_tmp; if (mmxb3_tmp > mmxa3_tmp) mmxc3_tmp = 0x00; if (mmxb2_tmp > mmxa2_tmp) mmxc2_tmp = 0x00; if (mmxb1_tmp > mmxa1_tmp) mmxc1_tmp = 0x00; if (mmxb0_tmp > mmxa0_tmp) mmxc0_tmp = 0x00; mmxc3_tmp = (mmxc3_tmp << 24) & 0xff000000; mmxc2_tmp = (mmxc2_tmp << 16) & 0x00ff0000; mmxc1_tmp = (mmxc1_tmp << 8) & 0x0000ff00; dout_tmp = mmxc0_tmp | mmxc1_tmp | mmxc2_tmp | mmxc3_tmp; wait(); break; case 7: // packed multiply add with saturation // a3*b3+a2*b2 , a1*b1+a0*b0 opcode_encode = "PMADD"; mmxc3_tmp = mmxa3_tmp * mmxb3_tmp; mmxc2_tmp = mmxa2_tmp * mmxb2_tmp; mmxc1_tmp = mmxa1_tmp * mmxb1_tmp; mmxc0_tmp = mmxa0_tmp * mmxb0_tmp; if (mmxc3_tmp >= 256) mmxc3_tmp = 0xff; if (mmxc2_tmp >= 256) mmxc2_tmp = 0xff; if (mmxc1_tmp >= 256) mmxc1_tmp = 0xff; if (mmxc0_tmp >= 256) mmxc0_tmp = 0xff; mmxcU_tmp = mmxc3_tmp + mmxc2_tmp; mmxcL_tmp = mmxc1_tmp + mmxc0_tmp; if (mmxcU_tmp >= 256) mmxcU_tmp = 0xff; if (mmxcL_tmp >= 256) mmxcL_tmp = 0xff; mmxcU_tmp = (mmxcU_tmp << 16) ; dout_tmp = mmxcU_tmp | mmxcL_tmp; wait(); break; case 8: // packed b1 (16bit) b0(16bit) and a1(16 bit) a0(16 bit) // to B1(8bit) B0(8bit) A1(8bit) A0(8bit) opcode_encode = "PACK"; mmxc3_tmp = mmxb2_tmp << 24; mmxc2_tmp = mmxb0_tmp << 16; mmxc1_tmp = mmxa2_tmp << 8; mmxc0_tmp = mmxa0_tmp ; dout_tmp = mmxc3_tmp | mmxc2_tmp | mmxc1_tmp | mmxc0_tmp; wait(); break; case 9: // mmx chroma keying // A =green != green green !=green // B =green green green green //Res=0xff 00 ff 00 opcode_encode = "MMXCK"; if (mmxa3_tmp == mmxb3_tmp) mmxc3_tmp = 0xff; else mmxc3_tmp = 0x00; if (mmxa2_tmp == mmxb2_tmp) mmxc2_tmp = 0xff; else mmxc2_tmp = 0x00; if (mmxa1_tmp == mmxb1_tmp) mmxc1_tmp = 0xff; else mmxc1_tmp = 0x00; if (mmxa0_tmp == mmxb0_tmp) mmxc0_tmp = 0xff; else mmxc0_tmp = 0x00; mmxc3_tmp = mmxc3_tmp << 24; mmxc2_tmp = mmxc2_tmp << 16; mmxc1_tmp = mmxc1_tmp << 8; // mmxc0_tmp = mmxc0_tmp ; // keeps its value dout_tmp = mmxc3_tmp | mmxc2_tmp | mmxc1_tmp | mmxc0_tmp; wait(); break; default: opcode_encode = "INVALID"; printf("MMX: Bad Opcode %d.\n",opcode_tmp); wait(); break; } mmxdout.write(dout_tmp); mmxout_valid.write(true); mmxdestout.write(dest_tmp); printf("\t\t\t\t\t\t\t-------------------------------\n"); cout.setf(ios::hex,ios::basefield); cout << "\t\t\t\t\t\t\tMMX :" << " op= " << opcode_encode << " A=0x " << mmxa_tmp << " B=0x " << mmxb_tmp << endl; cout << "\t\t\t\t\t\t\tMMX :" << " C=0x " << dout_tmp << "-> R" << dest_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; printf("\t\t\t\t\t\t\t-------------------------------\n"); wait(); mmxout_valid.write(false); wait(); } else { wait(); } } } systemc-2.3.4/examples/sysc/risc_cpu/pic.cpp0000644000175000017500000000376214342422106020762 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** pic.cpp -- Programmable Interrupt Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "pic.h" void pic::entry(){ if (ireq0.read() == true) { intreq.write(true); vectno.write(0); } else if (ireq1.read() == true) { intreq.write(true); vectno.write(1); } else if (ireq2.read() == true) { intreq.write(true); vectno.write(2); } else if (ireq3.read() == true) { intreq.write(true); vectno.write(2); } else { } if ((intack_cpu.read() == true) && (cs.read() == true)) { intreq.write(false); } } // EOF systemc-2.3.4/examples/sysc/risc_cpu/assembler.pl0000755000175000017500000001543014342422106022013 0ustar carstencarsten#!/usr/local/bin/perl #/****************************************************************************** # 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. # #******************************************************************************/ #/****************************************************************************** # # assembler.pl -- Simple Assembler in Perl # # Original Author: Martin Wang. Synopsys, Inc. (mwang@synopsys.com) # #******************************************************************************/ # #/****************************************************************************** # # MODIFICATION LOG - modifiers, enter your name, affliation and # changes you are making here: # # Modifier Name & Affiliation: # Description of Modification: # # #******************************************************************************/ # #/*************************************************************************** # # Copyright (c) 1998-1999 Synopsys, Inc. # ALL RIGHTS RESERVED # #*****************************************************************************/ # #Change the above line for your perl if ($ARGV[1] eq "-code") { $CODEGEN = 1; }else { $CODEGEN = 0; } #print "Input source name = $ARGV[0]\n"; $pc = 5; $filename = $ARGV[0]; open(FP,"$filename"); printf ("0x00000000\n"); printf ("0x00000000\n"); printf ("0x00000000\n"); printf ("0x00000000\n"); printf ("0x00000000\n"); while(){ chop($_); $_ =~ s/\s+/ /g; ($opcode, $destC, $sourceA, $sourceB) = split(/ /,$_); $destC =~ s/R//g; $sourceA =~ s/R//g; $sourceB =~ s/R//g; if ($opcode =~ /\badd\b/) { printf ("0x01"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmod\b/) { printf ("0x0e"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\baddi\b/) { printf ("0x02"); printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\baddc\b/) { printf ("0x03"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bsub\b/) { printf ("0x04"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bsubi\b/) { printf ("0x05"); printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bsubc\b/) { printf ("0x06"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmul\b/) { printf ("0x07"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bdiv\b/) { printf ("0x08"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bnand\b/) { printf ("0x09"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\band\b/) { printf ("0x0a"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bor\b/) { printf ("0x0b"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bxor\b/) { printf ("0x0c"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bnot\b/) { printf ("0x0d"); printf ("%01x%01x0000",$destC, $sourceA); } if ($opcode =~ /\blw\b/) { printf ("0x4d"); printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bsw\b/) { printf ("0x4e"); printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmov\b/) { printf ("0x0f"); printf ("%01x%01x%01x000",$destC, $sourceA, 0); } if ($opcode =~ /\bmovi\b/) { printf ("0xf1"); printf ("%01x%05x",$destC, $sourceA); } if ($opcode =~ /\bbeq\b/) { printf ("0x10"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bbne\b/) { printf ("0x11"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bbgt\b/) { printf ("0x12"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bbge\b/) { printf ("0x13"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bblt\b/) { printf ("0x14"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bble\b/) { printf ("0x15"); $sourceB = 0x0000ffff & $sourceB; printf ("%01x%01x%04x",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bj\b/) { printf ("0x16"); $sourceB = 0x0000ffff & $sourceB; printf ("%06x",$destC); } if ($opcode =~ /\bfadd\b/) { printf ("0x29"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bfsub\b/) { printf ("0x2a"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bfmul\b/) { printf ("0x2b"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bfdiv\b/) { printf ("0x2c"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmmxadd\b/) { printf ("0x31"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmmxadds\b/) { printf ("0x32"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmmxsub\b/) { printf ("0x33"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmmxsubs\b/) { printf ("0x34"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bpmadd\b/) { printf ("0x35"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bpack\b/) { printf ("0x36"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bmmxck\b/) { printf ("0x37"); printf ("%01x%01x%01x000",$destC, $sourceA, $sourceB); } if ($opcode =~ /\bldpid\b/) { printf ("0xf0"); printf ("%06x",$destC); } if ($opcode =~ /\bflush\b/) { printf ("0xe0000000"); } if ($CODEGEN) { printf ("\n"); } else { printf("\t/* %s * pc = 0x%x=%d/\n",$_, $pc, $pc); } $pc ++; if ($CODEGEN) { printf ("0x00000000\n"); } else { printf ("0x00000000"); printf("\t\t\t\t\t/* REGISTER DUMP * pc = %d/\n", $pc); } $pc ++; } printf ("0xffffffff\n"); systemc-2.3.4/examples/sysc/risc_cpu/printout.img0000644000175000017500000000261614342422106022062 0ustar carstencarsten0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0xf160000a /* movi R6, 10 * pc = 0x5=5/ 0x00000000 /* REGISTER DUMP * pc = 6/ 0xf160000a /* movi R6, 10 * pc = 0x7=7/ 0x00000000 /* REGISTER DUMP * pc = 8/ 0xf160000a /* movi R6, 10 * pc = 0x9=9/ 0x00000000 /* REGISTER DUMP * pc = 10/ 0xf160000a /* movi R6, 10 * pc = 0xb=11/ 0x00000000 /* REGISTER DUMP * pc = 12/ 0xf160000a /* movi R6, 10 * pc = 0xd=13/ 0x00000000 /* REGISTER DUMP * pc = 14/ 0xf160000a /* movi R6, 10 * pc = 0xf=15/ 0x00000000 /* REGISTER DUMP * pc = 16/ 0xf1500005 /* movi R5, 5 * pc = 0x11=17/ 0x00000000 /* REGISTER DUMP * pc = 18/ 0x0f550000 /* mov R5, R5 * pc = 0x13=19/ 0x00000000 /* REGISTER DUMP * pc = 20/ 0x0f550000 /* mov R5, R5 * pc = 0x15=21/ 0x00000000 /* REGISTER DUMP * pc = 22/ 0x0f550000 /* mov R5, R5 * pc = 0x17=23/ 0x00000000 /* REGISTER DUMP * pc = 24/ 0x0f550000 /* mov R5, R5 * pc = 0x19=25/ 0x00000000 /* REGISTER DUMP * pc = 26/ 0x0f550000 /* mov R5, R5 * pc = 0x1b=27/ 0x00000000 /* REGISTER DUMP * pc = 28/ 0x02550001 /* addi R5, R5, 1 * pc = 0x1d=29/ 0x00000000 /* REGISTER DUMP * pc = 30/ 0x1156fffa /* bne R5, R6, -6 * pc = 0x1f=31/ 0x00000000 /* REGISTER DUMP * pc = 32/ 0x01123000 /* add R1, R2, R3 * pc = 0x21=33/ 0x00000000 /* REGISTER DUMP * pc = 34/ 0x01234000 /* add R2, R3, R4 * pc = 0x23=35/ 0x00000000 /* REGISTER DUMP * pc = 36/ 0xffffffff systemc-2.3.4/examples/sysc/risc_cpu/test.am0000644000175000017500000000625614342422106021002 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: risc_cpu ## %C%: risc_cpu examples_TESTS += risc_cpu/test risc_cpu_test_CPPFLAGS = \ $(AM_CPPFLAGS) risc_cpu_test_SOURCES = \ $(risc_cpu_H_FILES) \ $(risc_cpu_CXX_FILES) examples_BUILD += \ $(risc_cpu_BUILD) examples_CLEAN += \ risc_cpu/run.log \ risc_cpu/expected_trimmed.log \ risc_cpu/run_trimmed.log \ risc_cpu/diff.log examples_FILES += \ $(risc_cpu_H_FILES) \ $(risc_cpu_CXX_FILES) \ $(risc_cpu_BUILD) \ $(risc_cpu_EXTRA) examples_DIRS += risc_cpu ## example-specific details risc_cpu_H_FILES = \ risc_cpu/bios.h \ risc_cpu/dcache.h \ risc_cpu/decode.h \ risc_cpu/directive.h \ risc_cpu/exec.h \ risc_cpu/fetch.h \ risc_cpu/floating.h \ risc_cpu/icache.h \ risc_cpu/mmxu.h \ risc_cpu/paging.h \ risc_cpu/pic.h risc_cpu_CXX_FILES = \ risc_cpu/bios.cpp \ risc_cpu/dcache.cpp \ risc_cpu/decode.cpp \ risc_cpu/exec.cpp \ risc_cpu/fetch.cpp \ risc_cpu/floating.cpp \ risc_cpu/icache.cpp \ risc_cpu/main.cpp \ risc_cpu/mmxu.cpp \ risc_cpu/paging.cpp \ risc_cpu/pic.cpp risc_cpu_BUILD = \ risc_cpu/bios.img \ risc_cpu/dcache.img \ risc_cpu/icache.img \ risc_cpu/printout.img \ risc_cpu/program.img \ risc_cpu/register.img risc_cpu_EXTRA = \ risc_cpu/assembler.pl \ risc_cpu/abc.asm \ risc_cpu/test.asm \ risc_cpu/test1.asm \ risc_cpu/README \ risc_cpu/README_TYPESCRIPT \ risc_cpu/risc_cpu.sln \ risc_cpu/risc_cpu.vcxproj \ risc_cpu/CMakeLists.txt \ risc_cpu/Makefile #risc_cpu_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/risc_cpu/icache.img0000644000175000017500000000064214342422106021407 0ustar carstencarsten0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0xf160000a 0x00000000 0xf160000a 0x00000000 0xf160000a 0x00000000 0xf160000a 0x00000000 0xf160000a 0x00000000 0xf160000a 0x00000000 0xf1500005 0x00000000 0x0f550000 0x00000000 0x0f550000 0x00000000 0x0f550000 0x00000000 0x0f550000 0x00000000 0x0f550000 0x00000000 0x02550001 0x00000000 0x1156fffa 0x00000000 0x01123000 0x00000000 0x01234000 0x00000000 0xffffffff systemc-2.3.4/examples/sysc/risc_cpu/register.img0000644000175000017500000000060014342422106022011 0ustar carstencarsten0x00000000 0x00000001 0xfff000e2 0xffffffff 0x00000004 0x00000005 0x00000006 0xfcf0fdef 0x00000008 0x00000009 0x00000010 0x0000ff31 0x0000ff12 0x00000013 0x00000014 0x00000015 0x00000016 0x00fe0117 0x00fe0118 0x00fe0119 0x00fe0220 0x00fe0321 0x00fe0322 0x00ff0423 0x00ff0524 0x00ff0625 0x00ff0726 0x00ff0727 0x00f70728 0x00000029 0x00000030 0x00000031 systemc-2.3.4/examples/sysc/risc_cpu/paging.h0000644000175000017500000000530614342422106021115 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** paging.h -- Instruction Paging Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct paging : sc_module { sc_in paging_din; // input data sc_in paging_csin; // chip select sc_in paging_wein; // write enable sc_in logical_address; // logical address sc_in icache_din; // data from BIOS/icache sc_in icache_validin; // data valid bit sc_in icache_stall; // stall IFU if busy sc_out paging_dout; // output data sc_out paging_csout; // output cs to cache/BIOS sc_out paging_weout; // write enable to cache/BIOS sc_out physical_address; // physical address sc_out dataout; // dataout from memory sc_out data_valid; // data valid sc_out stall_ifu; // stall IFU if busy sc_in_clk CLK; signed int pid_reg; //CPU process ID register SC_CTOR(paging) { SC_CTHREAD(entry, CLK.pos()); pid_reg = 0; } void entry(); }; // EOF systemc-2.3.4/examples/sysc/risc_cpu/pic.h0000644000175000017500000000445314342422106020425 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** pic.h -- Programmable Interrupt Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct pic : sc_module { sc_in ireq0; // interrupt request 0 sc_in ireq1; // interrupt request 1 sc_in ireq2; // interrupt request 2 sc_in ireq3; // interrupt request 3 sc_in cs; // chip select sc_in rd_wr; // read or write sc_in intack_cpu; // interrupt acknowledge from CPU sc_out intreq; // interrupt request to CPU sc_out intack; // interrupt acknowledge to devices sc_out vectno; // vector number //Constructor SC_CTOR(pic) { SC_METHOD(entry); dont_initialize(); sensitive << ireq0 << ireq1 << ireq2 << ireq3 ; } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/fetch.cpp0000644000175000017500000001360214342422106021272 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fetch.cpp -- Instruction Fetch Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "fetch.h" #include "directive.h" void fetch::entry() { unsigned addr_tmp=0; unsigned datai_tmp=0; unsigned lock_tmp = 0; addr_tmp = 1; // Now booting from default values reset.write(true); ram_cs.write(true); ram_we.write(false); address.write(addr_tmp); wait(memory_latency); // For data to appear do { wait(); } while ( !((bios_valid == true) || (icache_valid == true)) ); if (stall_fetch.read() == true) { datai_tmp = 0; } else { datai_tmp = ramdata.read(); } cout.setf(ios::hex,ios::basefield); cout << "-----------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "-----------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); program_counter.write(addr_tmp); ram_cs.write(false); wait(); instruction_valid.write(false); addr_tmp++; wait(); while (true) { if (addr_tmp == 5) { reset.write(false); } if (interrupt.read() == true) { ram_cs.write(true); addr_tmp = int_vectno.read(); ram_we.write(false); wait(memory_latency); datai_tmp = ramdata.read(); printf("IF ALERT: **INTERRUPT**\n"); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); ram_cs.write(false); interrupt_ack.write(true); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); interrupt_ack.write(false); wait(); } if (branch_valid.read() == true) { printf("IFU ALERT: **BRANCH**\n"); lock_tmp ++; ram_cs.write(true); addr_tmp = branch_address.read(); ram_we.write(false); wait(memory_latency); do { wait(); } while ( !((bios_valid == true) || (icache_valid == true)) ); datai_tmp = ramdata.read(); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); ram_cs.write(false); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); wait(); } else { lock_tmp = 0; ram_cs.write(true); address.write(addr_tmp); ram_we.write(false); wait(memory_latency); // For data to appear do { wait(); } while ( !((bios_valid == true) || (icache_valid == true)) ); datai_tmp = ramdata.read(); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); program_counter.write(addr_tmp); branch_clear.write(false); ram_cs.write(false); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); wait(); } if (lock_tmp == 1) { branch_clear.write(true); wait(); } /* Unless you wanted to write to your instruction cache. Usually Instruction cache is read only. // Write memory location first chip_select.write(true); write_enable.write(true); address.write(addr); instruction_write.write(datao); printf("fetch: Data Written = %x at address %x\n", datao, addr); wait(memory_latency); // To make all the outputs appear at the interface // some process functionality not shown here during which chip // chip select is deasserted and bus is tristated chip_select.write(false); instruction_write.write(0); wait(); */ } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/fetch.h0000644000175000017500000000621414342422106020740 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fetch.h -- Instruction Fetch Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct fetch : sc_module { sc_in ramdata; // instruction from RAM sc_in branch_address; // branch target address sc_in next_pc; // pc ++ sc_in branch_valid; // branch_valid sc_in stall_fetch; // STALL_FETCH sc_in interrupt; // interrrupt sc_in int_vectno; // interrupt vector number sc_in bios_valid; // BIOS input valid sc_in icache_valid; // Icache input valid sc_in pred_fetch; // branch prediction fetch sc_in pred_branch_address; // branch target address sc_in pred_branch_valid; // branch prediction fetch sc_out ram_cs; // RAM chip select sc_out ram_we; // RAM write enable for SMC sc_out address; // address send to RAM sc_out smc_instruction; // for self-modifying code sc_out instruction; // instruction send to ID sc_out instruction_valid; // inst valid sc_out program_counter; // program counter sc_out interrupt_ack; // interrupt acknowledge sc_out branch_clear; // clear outstanding branch sc_out pred_fetch_valid; // branch prediction fetch sc_out reset; // reset sc_in_clk CLK; // Parameter int memory_latency; // just a dummy for syntax void init_param(int given_delay_cycles) { memory_latency = given_delay_cycles; } //Constructor SC_CTOR(fetch) { SC_CTHREAD(entry, CLK.pos()); } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/README_TYPESCRIPT0000644000175000017500000007114114342422106022145 0ustar carstencarsten SystemC (TM) Version 1.0 --- Sep 16 1999 14:12:20 ALL RIGHTS RESERVED Copyright (c) 1988-1999 by Synopsys, Inc. ///////////////////////////////////////////////////////////////////////// // This code is written at SYNOPSYS, Inc. ///////////////////////////////////////////////////////////////////////// // Module : main of CPU Model // Author : Martin Wang // Company : SYNOPSYS, Inc. // Purpose : This is a simple CPU modeling using SystemC. // Instruction Set Architecure defined by Martin Wang. // // SystemC (TM) Copyright (c) 1988-1999 by Synopsys, Inc. // ///////////////////////////////////////////////////////////////////////// // IN THIS MACHINE Integer is 4 bytes. // IN THIS MACHINE Floating is 4 bytes. // IN THIS MACHINE Double is 8 bytes. // // // .,,uod8B8bou,,. // ..,uod8BBBBBBBBBBBBBBBBRPFT?l!i:. // ,=m8BBBBBBBBBBBBBBBRPFT?!|||||||||||||| // !...:!TVBBBRPFT||||||||||!!^^"" |||| // !.......:!?|||||!!^^""' |||| // !.........|||| ### # # |||| // !.........|||| ### # # # # |||| // !.........|||| # # # # # |||| // !.........|||| # # # # # |||| // !.........|||| # ## # # |||| // !.........|||| # # ### |||| // `.........|||| # # # ,|||| // .;.......|||| ### _.-!!||||| // .,uodWBBBBb.....|||| _.-!!|||||||||!:' // !YBBBBBBBBBBBBBBb..!|||:..-!!|||||||!iof68BBBBBb.... // !..YBBBBBBBBBBBBBBb!!||||||||!iof68BBBBBBRPFT?!:: `. // !....YBBBBBBBBBBBBBBbaaitf68BBBBBBRPFT?!::::::::: `. // !......YBBBBBBBBBBBBBBBBBBBRPFT?!::::::;:!^"`;::: `. // !........YBBBBBBBBBBRPFT?!::::::::::^''...::::::; iBBbo. // `..........YBRPFT?!::::::::::::::::::::::::;iof68bo. WBBBBbo. // `..........:::::::::::::::::::::::;iof688888888888b. `YBBBP^' // `........::88::::::::::::;iof688888888888888888888b. ` // `......::81:::::;iof688888888888888888888888888888b. // `....:::;iof688888888888888888888888888888888899fT! // `..::!8888888888888888888888888888888899fT|!^"' // `' !!988888888888888888888888899fT|!^"' // `!!8888888888888888899fT|!^"' // `!988888888899fT|!^"' // `!9899fT|!^"' // `!^"' // // ///////////////////////////////////////////////////////////////////////// ** ALERT ** ID: initialize Architectural Registers ** ALERT ** BIOS: initialize BIOS ** ALERT ** DCU: initialize Data Cache ----------------------- IFU : mem=0xf000001 IFU : pc= 1 at CSIM 5 ----------------------- ------------------------------- ID: R0=R0(=0) : at CSIM 7 ------------------------------- ------------------------------- ALU : op= 3 A= 0 B= 0 ALU : R= 0-> R0 at CSIM 9 ------------------------------- ------------------------------- ID: R0=0x0(0) fr ALU at CSIM 10 ------------------------------- ------------------------ IFU : mem=0xf000002 IFU : pc= 2 at CSIM 12 ------------------------ ------------------------------- ID: R0=R0(=0) : at CSIM 14 ------------------------------- ------------------------------- ALU : op= 3 A= 0 B= 0 ALU : R= 0-> R0 at CSIM 16 ------------------------------- ------------------------------- ID: R0=0x0(0) fr ALU at CSIM 17 ------------------------------- ------------------------ IFU : mem=0xf000003 IFU : pc= 3 at CSIM 19 ------------------------ ------------------------------- ID: R0=R0(=0) : at CSIM 21 ------------------------------- ------------------------------- ALU : op= 3 A= 0 B= 0 ALU : R= 0-> R0 at CSIM 23 ------------------------------- ------------------------------- ID: R0=0x0(0) fr ALU at CSIM 24 ------------------------------- ------------------------ IFU : mem=0xf000004 IFU : pc= 4 at CSIM 26 ------------------------ ------------------------------- ID: R0=R0(=0) : at CSIM 28 ------------------------------- ------------------------------- ALU : op= 3 A= 0 B= 0 ALU : R= 0-> R0 at CSIM 30 ------------------------------- ICU ALERT: ********************************************************************* : *****************************AFTER RESET***************************** ICU ALERT: ********************************************************************* ------------------------------- ID: R0=0x0(0) fr ALU at CSIM 31 ------------------------------- ------------------------ IFU : mem=0xf160000a IFU : pc= 5 at CSIM 33 ------------------------ ------------------------------- ID: R6=10 at CSIM 35 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 37 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 38 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 6 at CSIM 40 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 42 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf160000a IFU : pc= 7 at CSIM 47 ------------------------ ------------------------------- ID: R6=10 at CSIM 49 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 51 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 52 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 8 at CSIM 54 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 56 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf160000a IFU : pc= 9 at CSIM 61 ------------------------ ------------------------------- ID: R6=10 at CSIM 63 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 65 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 66 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= a at CSIM 68 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 70 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf160000a IFU : pc= b at CSIM 75 ------------------------ ------------------------------- ID: R6=10 at CSIM 77 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 79 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 80 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= c at CSIM 82 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 84 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf160000a IFU : pc= d at CSIM 89 ------------------------ ------------------------------- ID: R6=10 at CSIM 91 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 93 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 94 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= e at CSIM 96 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 98 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf160000a IFU : pc= f at CSIM 103 ------------------------ ------------------------------- ID: R6=10 at CSIM 105 ------------------------------- ------------------------------- ALU : op= 3 A= 10 B= 0 ALU : R= 10-> R6 at CSIM 107 ------------------------------- ------------------------------- ID: R6=0xa(10) fr ALU at CSIM 108 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 10 at CSIM 110 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 112 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf1500005 IFU : pc= 11 at CSIM 117 ------------------------ ------------------------------- ID: R5=5 at CSIM 119 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 121 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 122 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 12 at CSIM 124 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 126 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf550000 IFU : pc= 13 at CSIM 131 ------------------------ ------------------------------- ID: R5=R5(=5) : at CSIM 133 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 135 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 136 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 14 at CSIM 138 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 140 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf550000 IFU : pc= 15 at CSIM 145 ------------------------ ------------------------------- ID: R5=R5(=5) : at CSIM 147 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 149 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 150 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 16 at CSIM 152 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 154 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf550000 IFU : pc= 17 at CSIM 159 ------------------------ ------------------------------- ID: R5=R5(=5) : at CSIM 161 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 163 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 164 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 18 at CSIM 166 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 168 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf550000 IFU : pc= 19 at CSIM 173 ------------------------ ------------------------------- ID: R5=R5(=5) : at CSIM 175 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 177 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 178 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 1a at CSIM 180 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 182 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xf550000 IFU : pc= 1b at CSIM 187 ------------------------ ------------------------------- ID: R5=R5(=5) : at CSIM 189 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 0 ALU : R= 5-> R5 at CSIM 191 ------------------------------- ------------------------------- ID: R5=0x5(5) fr ALU at CSIM 192 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 1c at CSIM 194 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 196 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000005) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0x2550001 IFU : pc= 1d at CSIM 201 ------------------------ ------------------------------- ID: R5= R5(=5)+1 : at CSIM 203 ------------------------------- ------------------------------- ALU : op= 3 A= 5 B= 1 ALU : R= 6-> R5 at CSIM 205 ------------------------------- ------------------------------- ID: R5=0x6(6) fr ALU at CSIM 206 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 1e at CSIM 208 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 210 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0x1156fffa IFU : pc= 1f at CSIM 215 ------------------------ ------------------------------- ID: bne R5(=6), R6(=10), pc+=(-6). ID: at CSIM 217 ------------------------------- ------------------------------- ALU : op= 3 A= 0 B= 0 ALU : R= 0-> R0 at CSIM 219 ------------------------------- ------------------------------- ID: R0=0x0(0) fr ALU at CSIM 220 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 20 at CSIM 222 ------------------------ IFU ALERT: **BRANCH** ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 224 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0x0 IFU : pc= 20 at CSIM 229 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 231 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= IFU ALERT: **BRANCH** ------------------------ IFU : mem=0x0 IFU : pc= 20 at CSIM 237 ------------------------ ------------------------------- ID: clear branch at CSIM 238 ------------------------------- ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 239 ******************************* REG :================================================================== R 0(00000000) R 1(00000001) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0x1123000 IFU : pc= 21 at CSIM 244 ------------------------ ------------------------------- ID: R1= R2(=-1048350)+R3(=-1) : at CSIM 246 ------------------------------- ------------------------------- ALU : op= 3 A= -1048350 B= -1 ALU : R= -1048351-> R1 at CSIM 248 ------------------------------- ------------------------------- ID: R1=0xfff000e1(-1048351) fr ALU at CSIM 249 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 22 at CSIM 251 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 253 ******************************* REG :================================================================== R 0(00000000) R 1(fff000e1) R 2(fff000e2) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0x1234000 IFU : pc= 23 at CSIM 258 ------------------------ ------------------------------- ID: R2= R3(=-1)+R4(=4) : at CSIM 260 ------------------------------- ------------------------------- ALU : op= 3 A= -1 B= 4 ALU : R= 3-> R2 at CSIM 262 ------------------------------- ------------------------------- ID: R2=0x3(3) fr ALU at CSIM 263 ------------------------------- ------------------------ IFU : mem=0x0 IFU : pc= 24 at CSIM 265 ------------------------ ------------------------------- ******************************* ID: REGISTERS DUMP at CSIM 267 ******************************* REG :================================================================== R 0(00000000) R 1(fff000e1) R 2(00000003) R 3(ffffffff) R 4(00000004) R 5(00000006) R 6(0000000a) R 7(fcf0fdef) R 8(00000008) R 9(00000009) R10(00000010) R11(0000ff31) R12(0000ff12) R13(00000013) R14(00000014) R15(00000015) R16(00000016) R17(00fe0117) R18(00fe0118) R19(00fe0119) R20(00fe0220) R21(00fe0321) R22(00fe0322) R23(00ff0423) R24(00ff0524) R25(00ff0625) R26(00ff0726) R27(00ff0727) R28(00f70728) R29(00000029) R30(00000030) R31(00000031) ======================================================================= ------------------------ IFU : mem=0xffffffff IFU : pc= 25 at CSIM 272 ------------------------ ------------------------------- ID: - SHUTDOWN - at CSIM 274 ID: - PLEASE WAIT ...... - ------------------------------- //////////////////////////////////////////////////////////////////////////////// SystemC: simulation stopped by user. script done on Thu Sep 16 15:40:09 1999 systemc-2.3.4/examples/sysc/risc_cpu/bios.cpp0000644000175000017500000000471514342422106021142 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** bios.cpp -- System Bios. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "bios.h" #include "directive.h" void bios::entry() { unsigned address; while (true) { do { wait(); } while ( !(cs == true) ); address = addr.read(); if (address < BOOT_LENGTH) { // in BOOTING STAGE if (we.read() == true) { // Write operation wait(wait_cycles-1); imemory[address] = datain.read(); } else { // Read operation if (wait_cycles > 2) { wait(wait_cycles-2); // Introduce delay needed } dataout.write(imemory[address]); if (PRINT_BIOS) { printf("------------------------\n"); printf("BIOS: fetching mem[%d]\n", address); printf("BIOS: (%0x)", imemory[address]); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; printf("------------------------\n"); } bios_valid.write(true); wait(); bios_valid.write(false); wait(); } } else { bios_valid.write(false); wait(); } } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/README0000644000175000017500000001417514342422106020363 0ustar carstencarsten/////////////////////////////////////////////////////////////// // This code is written at SYNOPSYS, Inc. /////////////////////////////////////////////////////////////// /*************************************************************************** Copyright (c) 1998-1999 Synopsys, Inc. ALL RIGHTS RESERVED *****************************************************************************/ // Module : README // Filename : $Source: /Users/acg/CVSROOT/systemc-2.3/examples/sysc/risc_cpu/README,v $ // Author : Martin Wang // Revision : $Revision: 1.1.1.1 $ // Date : $Date: 2006/12/15 20:20:04 $ // Company : SYNOPSYS, Inc. // Purpose : This is a README file for risc_cpu using SystemC. // Instruction Set Architecure defined by Martin Wang. // Contact : mwang@synopsys.com /////////////////////////////////////////////////////////////// // Modification History // // $Log: README,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.1.1.1 2005/12/19 23:16:42 acg // First check in of SystemC 2.1 into its own archive. // // Revision 1.2 2005/04/04 00:19:37 acg // Changes for directory name of sysc rather than systemc. // // Revision 1.1.1.1 2003/10/01 21:50:43 acg // Initial use of CVS. // /////////////////////////////////////////////////////////////// // This example demonstrates a simple RISC CPU design. // This is a simulation only example using Synopsys's // SystemC(TM) C++ class library. This example // was tested on Solaris 2.5 using gcc. // // Several text files were used to initialize memory data // bios = system bios data // icache = initial instruction cache // dcache = initial data cache // register = initial register values // abc.asm = a sample program // // A simple assembler named assembler.pl which was written in PERL. // Usage: assembler.pl -code > icache.img // Usage: assembler.pl > printout.img (for viewing only) // // Steps: // // NOTE: ALL COMMAND LISTED ARE UNIX COMMANDS. // // 1) set up the enviroment for SystemC. // // 2) based on abc.asm , write your own assembly language program, named // // 3) assembler.pl abc.asm -code > icache.img // // 4) gmake // // 5) run the executable demo.x // // Here is some details: // //First let me briefly describe the micro-architecture of this RISC CPU model. //The CPU itself is modeled using SystemC. The CPU reads in assembly program and //execute it and write the result back to registers/data memory. The instruction //set is defined based on commercial RISC processor together with MMX-like //instruction for DSP program. It consists of >39 instructions (arithmetic, //logical, branch, floating point, SIMD(MMX-like)). // //For Hardware/software partitioning, user can either write their algorithm //in assembly program, or use YACC to convert it to this CPU's instruction //set. Then run it through the CPU, and you can measure how many cycles it //takes and user can alter the memory latency or CPU behavior to be more //realistic to get a better estimate. Say, IDCT is the algorithm considered. //User can then write a hardware IDCT model using SystemC, and determine //what is the complexity and cost if IDCT is going to be implemented in hardware. //Then maybe some part of IDCT can be hardware, some can be software. In either //cases, SystemC is a useful tool in hardware/software partitioning. // //Furthermore, this example can be also interpreted as ISS (instruction set //simulator), software developer can use this model to test their software //early in the development cycle before the silicon chip come back from //fabrication/manufacturing. // //Finally, in order to compile the example you have to execute 'make'. Please //note that the file Makefile.defs contains the location of the SystemC //class library, which might be different for you, depending on your //installation. Once the compilation is finished, you will find an //executable 'demo.x'. // //The CPU example structure looks like this: // //.____________________________________________________. //| Hardware Side | //| ._______. .________. .___________________. | //| | | | | +-|Integer Execution |-- | //| | Fetch |--| Decode |---| `-------------------' | | //| ._______. .________. | .___________________. | | //| | | +-|Floating Point Exe |-+ | //| .___|___. .___|____. | `-------------------' | | //| | | | | | ._________________. | | //| |Icache | | Dcache | +-|MMXlike Execution|---+ | //| ._______. .________. `-----------------' | | //| ^ |--------------------------------. | //._____|______________________________________________. // | // | // .---------------------------------. //._______________________________________|____________. //| Software Side (Develop for your market|segments) | //| ._________________________. | | //| | Assembly code: | | | //| | lw R5, R5, 1 | . | //| | addi R5, R5 | %assembler.pl foo.asm >| //| | fadd R3, R11, R11 | -code > icache | //| | bne R5, R6, 5 | | //| | mmxadds R13, R11, R11| ^ | //| | sw R13, R0, 10 | | | //| ._________________________. _ _ _ _ _>| | //.____________________________________________________. // // //Hope this shows some concepts of using C++ for hardware modeling. // //The materials on this directory(the "Example") are provided by Synopsys Inc. //as a service to its customers and may be used for informational purposes only. //The work and intellectual property presented in this example is considered //propriety to Synopsys Inc. Synopsys Inc.'s trademarks maybe used publicly with //permission only from Synopsys Inc. Use of Synopsys's trademarks in advertising //and promotion of Synopsys products requires proper acknowledgement. //All other brands and names are property of their respective owners. // /////////////////////////////////////////////////////////////// systemc-2.3.4/examples/sysc/risc_cpu/bios.img0000644000175000017500000000010714342422106021123 0ustar carstencarsten0x0f000000 0x0f000001 0x0f000002 0x0f000003 0x0f000004 0x0f000005 systemc-2.3.4/examples/sysc/risc_cpu/test1.asm0000644000175000017500000000160514342422106021237 0ustar carstencarstenldpid 0 add R1, R1, R3 addi R1, R3, 14 fadd R3, R2, R2 fmul R10, R11, R11 sub R4, R5, R6 movi R5, 10 movi Re, 0 subi R4, R5, 18 mul R1, R1, R4 addi R4, R6, 14 nand R10, R13, R15 addi Re, Re, 1 movi R11, 10 beq R5, Re, 1 lw R11, R11, 1 and R10, R13, R15 mmxadds R13, R11, R11 mmxsub R9, R10, R3 mov R13, R13 sub R4, R5, R6 beq R4, R4, 2 not R4, R6 nand R10, R13, R15 mmxadds R13, R11, R11 and R11, R14, R15 mmxsub R9, R10, R3 mul R1, R10, R1 fadd R3, R2, R2 movi R11, 10 fmul R10, R11, R11 beq R4, R4, 2 xor R13, R14, R1 div R1, R1, R3 pmadd R3, R11, R14 mmxck R1, R1, R4 movi R11, 8 movi R12, 4 fdiv R13, R11, R12 sw R13, R0, 10 sub R3, R3, R11 mod R4, R5, R5 pack R11, R13, R15 lw R11, R0, 5 and R10, R13, R15 mmxadds R13, R11, R11 mmxsub R9, R10, R3 mov R13, R13 sub R4, R5, R6 nand R10, R13, R15 mmxadds R13, R11, R11 and R11, R14, R15 mov R1, R3 systemc-2.3.4/examples/sysc/risc_cpu/abc.asm0000644000175000017500000000175714342422106020734 0ustar carstencarstenldpid 0 movi R6, 10 movi R5, 8 mov R5, R5 addi R5, R5, 1 bne R5, R6, -5 add R1, R2, R3 add R2, R3, R4 ldpid 0 add R1, R1, R3 addi R1, R3, 14 fadd R3, R2, R2 fmul R10, R11, R11 sub R4, R5, R6 movi R5, 2 movi R6, 0 subi R4, R5, 18 mul R1, R1, R4 addi R4, R6, 14 nand R10, R13, R15 addi R6, R6, 1 movi R11, 10 beq R5, R6, 5 lw R11, R11, 1 and R10, R13, R15 mmxadds R13, R11, R11 mmxsub R9, R10, R3 mov R13, R13 sub R4, R5, R6 beq R4, R4, 2 not R4, R6 nand R10, R13, R15 mmxadds R13, R11, R11 and R11, R14, R15 mmxsub R9, R10, R3 mul R1, R10, R1 fadd R3, R2, R2 movi R11, 10 fmul R10, R11, R11 beq R4, R4, 2 xor R13, R14, R1 div R1, R1, R3 pmadd R3, R11, R14 mmxck R1, R1, R4 movi R11, 8 movi R12, 4 fdiv R13, R11, R12 sw R13, R0, 10 sub R3, R3, R11 mod R4, R5, R5 pack R11, R13, R15 lw R11, R0, 5 and R10, R13, R15 mmxadds R13, R11, R11 mmxsub R9, R10, R3 mov R13, R13 sub R4, R5, R6 nand R10, R13, R15 mmxadds R13, R11, R11 and R11, R14, R15 mov R1, R3 systemc-2.3.4/examples/sysc/risc_cpu/directive.h0000644000175000017500000000337414342422106021631 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** directive.h -- Debug directive Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ //#define DEBUG true #define TRACE false #define PRINT_IFU true #define PRINT_ID true #define PRINT_PU false #define PRINT_BPU true #define PRINT_FPU true #define PRINT_DEBUG true #define PRINT_ICU false #define PRINT_MMU false #define PRINT_BIOS false systemc-2.3.4/examples/sysc/risc_cpu/decode.cpp0000644000175000017500000011702514342422106021430 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** decode.cpp -- Instruction Decode Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include // for definition on value 's MAX #include "systemc.h" #include "decode.h" #include "directive.h" void decode::entry() { unsigned int instr_tmp = 0; unsigned int opcode_tmp = 0; unsigned int regA_tmp = 0; unsigned int regB_tmp = 0; unsigned int regC_tmp = 0; unsigned int imm_tmp = 0; unsigned int offset_tmp = 0; signed int label_tmp = 0; unsigned int longlabel_tmp = 0; signed int srcA_tmp = 0; signed int srcB_tmp = 0; signed int srcC_tmp = 0; int i; bool branch_direction_tmp = 0; branch_valid.write(false); decode_valid.write(false); float_valid.write(false); mmx_valid.write(false); wait(2); while (true) { if (destreg_write.read() == true) { cpu_reg[destreg_write_src.read()] = alu_dataout.read(); cout << "\t\t\t-------------------------------" << endl; printf("\t\t\tID: R%d=0x%x(%d) fr ALU", destreg_write_src.read(), alu_dataout.read(),alu_dataout.read()); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; } if (dram_rd_valid.read() == true) { cpu_reg[dram_write_src.read()] = dram_dataout.read(); cout << "\t\t\t-------------------------------" << endl; printf("\t\t\tID: R%d=0x%x(%d) fr MemLd", dram_write_src.read(), dram_dataout.read(), dram_dataout.read()); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; } if (fpu_valid.read() == true) { cpu_reg[fpu_destout.read()] = fpu_dout.read(); cout << "\t\t\t-------------------------------" << endl; printf("\t\t\tID: R%d=0x%x fr MMX", fpu_destout.read(), fpu_dout.read()); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; } if ((instruction_valid.read() == true)) { pc_reg = pc.read(); if (clear_branch.read() == true) { cout << "\t\t\t-------------------------------" << endl; printf("\t\t\tID: clear branch"); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; branch_valid.write(false); } instr_tmp = instruction.read(); opcode_tmp = (instr_tmp & 0xff000000) >> 24; regC_tmp = (instr_tmp & 0x00f00000) >> 20; regA_tmp = (instr_tmp & 0x000f0000) >> 16; regB_tmp = (instr_tmp & 0x0000f000) >> 12; imm_tmp = (instr_tmp & 0x0000ffff); offset_tmp = (instr_tmp & 0x00000fff); label_tmp = (instr_tmp & 0x0000ffff); longlabel_tmp = (instr_tmp & 0x00ffffff); branch_direction_tmp = (instr_tmp & 0x00008000) >> 15; if (branch_direction_tmp) { // handle backward branch label_tmp = - (0xffff - label_tmp + 1) ; } //printf("opcode = %d regC = %d regA = %d regB = %d\n",opcode_tmp, regC_tmp, regA_tmp, regB_tmp); srcA_tmp = cpu_reg[regA_tmp]; srcB_tmp = cpu_reg[regB_tmp]; srcC_tmp = cpu_reg[regC_tmp]; wait(); cout << "\t\t\t-------------------------------" << endl; /****************************************************************************** unsigned int lastreg_tmp = regC_tmp; if (regA_tmp == lastreg_tmp){ forward_A.write(true); forward_B.write(false); } else if (regB_tmp == lastreg_tmp){ forward_A.write(false); forward_B.write(true); } else { forward_A.write(false); forward_B.write(false); } *********************************************************************************/ switch(opcode_tmp) { case 0x0: // halt printf("\n\n\t\t\t*******************************\n"); printf("\t\t\tID: REGISTERS DUMP"); cout << " at CSIM " << sc_time_stamp() << endl; printf("\t\t\t*******************************\n"); printf("REG :==================================================================\n"); for(i =0; i<32; i++){ printf(" R%2d(%08x) ",i, cpu_reg[i]); if ((i==3) || (i== 11) || (i==19) || (i== 27) ||(i==7) || (i==15) || (i==23) || (i==31)){ printf("\n"); } } printf("=======================================================================\n\n"); wait(); wait(); break; case 0x01: // add R1, R2, R3 printf("\t\t\tID: R%d= R%d(=%d)+R%d(=%d)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(3); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x02: // addi R1, R2, #value printf("\t\t\tID: R%d= R%d(=%d)+%d", regC_tmp, regA_tmp, srcA_tmp, imm_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(imm_tmp); alu_src.write(regC_tmp); alu_op.write(3); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x03: // addc R1, R2, R3 + Carrybit printf("\t\t\tID: R%d= R%d(=%d)+R%d(=%d)+C", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(1); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x04: // sub R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%d)-R%d(=%d)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(4); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x05: // subi R1, R2, #value printf("\t\t\tID: R%d=R%d(=%d)-%d", regC_tmp, regA_tmp, srcA_tmp, imm_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(imm_tmp); alu_src.write(regC_tmp); alu_op.write(4); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x06: // subc R1, R2, R3 - Carrybit printf("\t\t\tID: R%d=R%d(=%d)-R%d(=%d)-C", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(2); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x07: // mul R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%d)*R%d(=%d)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(5); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x08: // div R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%d)/R%d(=%d)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(6); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x09: // nand R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%x) nand R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(7); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x0a: // and R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%x) and R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(8); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x0b: // or R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%x) or R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(9); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x0c: // xor R1, R2, R3 printf("\t\t\tID: R%d=R%d(=%x) xor R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(10); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x0d: // NOT R1, R2 printf("\t\t\tID: R%d= NOT R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(0); alu_src.write(regC_tmp); alu_op.write(11); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x0e: // modulo R1 = R2 mod R3 printf("\t\t\tID: R%d= R%d(=%x) mod R%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(14); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x4d: // lw R1, R2, offset printf("\t\t\tID: R%d<=mem[R%d=(%d)+%d]", regC_tmp, regA_tmp, srcA_tmp, offset_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; mem_access.write(true); mem_write.write(false); alu_src.write(regC_tmp); offset_tmp = offset_tmp + srcA_tmp; mem_address.write(offset_tmp); wait(); mem_access.write(false); wait(); break; case 0x4e: // sw R1, R2, offset printf("\t\t\tID: R%d=>mem[R%d(=%d) + %d]", regC_tmp, regA_tmp, srcA_tmp, offset_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; mem_access.write(true); mem_write.write(true); offset_tmp = offset_tmp + srcA_tmp; mem_address.write(offset_tmp); wait(); mem_access.write(false); mem_write.write(false); wait(); break; case 0x0f: // mov R1, R2 printf("\t\t\tID: R%d=R%d(=%d)", regC_tmp, regA_tmp, srcA_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(0); alu_src.write(regC_tmp); alu_op.write(3); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0x10: // beq R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp == srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: beq R%d(=%d), R%d(=%d), pc+=(%d).\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp, label_tmp); } else { printf("\t\t\tID: beq R%d(=%d) != R%d(=%d),pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x11: // bne R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp != srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: bne R%d(=%d), R%d(=%d), pc+=(%d).\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp, label_tmp); } else { printf("\t\t\tID: bne R%d(=%d) = R%d(=%d),pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x12: // bgt R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp > srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: bgt R%d(=%d)>R%d(=%d), pc+=(%d).\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp, label_tmp); } else { printf("\t\t\tID: bgt R%d(=%d) <= R%d(=%d),pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x13: // bge R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp >= srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: bge R%d(=%d)>=R%d(=%d), pc+=(%d).\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp, label_tmp); } else { printf("\t\t\tID: bge R%d(=%d) < R%d(=%d),pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x14: // blt R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp < srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: blt R%d(=%d)= R%d(=%d), pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x15: // ble R1, R2, label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); if (srcC_tmp <= srcA_tmp) { branch_target_address.write(pc_reg + label_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: ble R%d(=%d)<=R%d(=%d), pc+=(%d).\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp, label_tmp); } else { printf("\t\t\tID: ble R%d(=%d)>R%d(=%d), pc++.\n", regC_tmp, srcC_tmp, regA_tmp, srcA_tmp); } cout << "\t\t\tID: at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x16: // j label src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(3); decode_valid.write(true); branch_target_address.write(longlabel_tmp); br_instruction_address.write(instr_tmp); branch_valid.write(true); printf("\t\t\tID: pc jump to => (%d).", longlabel_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); branch_target_address.write(pc_reg + 1); decode_valid.write(false); wait(); break; case 0x17: // jal label for procedure call printf("\t\t\tID: j pc(%d) and sp <- pc", longlabel_tmp); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); wait(); break; case 0x18: // jr printf("\t\t\tID: jr and pc <- sp\n"); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; wait(); wait(); break; case 0x29: // fadd R1, R2, R3 printf("\t\t\tID: FR%d=FR%d(=%x)+FR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(3); float_valid.write(true); wait(); float_valid.write(false); wait(); break; case 0x2a: // fsub R1, R2, R3 printf("\t\t\tID: FR%d=FR%d(=%x)-FR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(4); float_valid.write(true); wait(); float_valid.write(false); wait(); break; case 0x2b: // fmul R1, R2, R3 printf("\t\t\tID: FR%d=FR%d(=%x)*FR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(5); float_valid.write(true); wait(); float_valid.write(false); wait(); break; case 0x2c: // fdiv R1, R2, R3 printf("\t\t\tID: FR%d=FR%d(=%x)/FR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(6); float_valid.write(true); wait(); float_valid.write(false); wait(); break; case 0x31: // mmxadd R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x)+MR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(3); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x32: // mmxadds R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x)+MR%d(=%x) Sat", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(4); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x33: // mmxsub R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x)-MR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(5); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x34: // mmxsubs R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x)-MR%d(=%x) Sat", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(6); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x35: // pmadd R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x) ,MR%d(=%x) PMADD", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(7); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x36: // pack R1, R2, R3 printf("\t\t\tID: MR%d=MR%d(=%x) pack MR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(8); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0x37: // mmxck R1, R2, R3 MMX Chroma Keying printf("\t\t\tID: MR%d=MR%d(=%x) mmxck MR%d(=%x)", regC_tmp, regA_tmp, srcA_tmp, regB_tmp, srcB_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(srcA_tmp); src_B.write(srcB_tmp); alu_src.write(regC_tmp); alu_op.write(9); mmx_valid.write(true); wait(); mmx_valid.write(false); wait(); break; case 0xe0: // flush register printf("\t\t\tID: flush all registers"); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(0); for (i = 0; i< 32; i++) { cpu_reg[i] = 0; } wait(); wait(); break; case 0xf0: // ldpid process_number printf("\t\t\tID: ld pid =%d", longlabel_tmp); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(0); src_B.write(0); alu_src.write(0); alu_op.write(0); pid_valid.write(true); decode_valid.write(false); float_valid.write(false); mmx_valid.write(false); pid_data.write(longlabel_tmp); wait(); pid_valid.write(false); wait(); break; case 0xf1: // movi R1, #value printf("\t\t\tID: R%d=%d", regC_tmp, imm_tmp); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t-------------------------------" << endl; src_A.write(imm_tmp); src_B.write(0); alu_src.write(regC_tmp); alu_op.write(3); decode_valid.write(true); wait(); decode_valid.write(false); wait(); break; case 0xff: // QUIT printf("\t\t\tID: - SHUTDOWN - "); cout << "at CSIM " << sc_time_stamp() << endl; decode_valid.write(false); float_valid.write(false); mmx_valid.write(false); wait(); printf("\t\t\tID: - PLEASE WAIT ...... - \n"); cout << "\t\t\t-------------------------------" << endl; sc_stop(); printf("\n\n\n////////////////////////////////////////////////////////////////////////////////\n"); wait(); wait(); break; default : printf("\t\t\tID: INVALID OPCODE"); cout << " \n\t\t\t : at CSIM " << sc_time_stamp() << endl; wait(); break; } next_pc.write(true); wait(); } else { next_pc.write(true); wait(); } } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/bios.h0000644000175000017500000000547414342422106020612 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** bios.h -- System Bios Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #define BOOT_LENGTH 5 struct bios : sc_module { sc_in datain; // modified instruction sc_in cs; // chip select sc_in we; // write enable for SMC sc_in addr; // physical address sc_out dataout; // ram data out sc_out bios_valid; // out valid sc_out stall_fetch; // stall fetch if output not valid sc_in_clk CLK; // Parameter unsigned *imemory; // BIOS program data memory unsigned *itagmemory; // program tag memory (NOT USED) int wait_cycles; // Cycle # it takes to access memory void init_param(int given_delay_cycles) { wait_cycles = given_delay_cycles; } //Constructor SC_CTOR(bios) { SC_CTHREAD(entry, CLK.pos()); // initialize instruction imemory from external file FILE *fp = fopen("bios.img","r"); int size=0; unsigned mem_word; imemory = new unsigned[4000]; itagmemory = new unsigned[4000]; printf("** ALERT ** BIOS: initialize BIOS\n"); for (size = 0; size < 4000; size++) { // initialize bad data imemory[size] = 0xffffffff; itagmemory[size] = 0xffffffff; } size = 0; while (fscanf(fp,"%x\n", &mem_word) != EOF) { imemory[size] = mem_word; itagmemory[size] = size; size++; } } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/exec.h0000644000175000017500000000502614342422106020573 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** exec.h -- Integer Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct exec : sc_module { sc_in reset; // reset not used. sc_in in_valid; // input valid sc_in opcode; // opcode from ID sc_in negate; // not implemented sc_in add1; // not implemented sc_in shift_sel; // not implemented sc_in dina; // operand A sc_in dinb; // operand B sc_in forward_A; // data forwarding A valid sc_in forward_B; // data forwarding B valid sc_in dest; // destination register number sc_out C; // Carry bit sc_out V; // Overflow bit sc_out Z; // Zero bit sc_out dout; // output data sc_out out_valid; // output valid sc_out destout; // write to which registers? sc_in_clk CLK; SC_CTOR(exec) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; // EOF systemc-2.3.4/examples/sysc/risc_cpu/test.asm0000644000175000017500000000031314342422106021151 0ustar carstencarstenmovi R6, 10 movi R6, 10 movi R6, 10 movi R6, 10 movi R6, 10 movi R6, 10 movi R5, 5 mov R5, R5 mov R5, R5 mov R5, R5 mov R5, R5 mov R5, R5 addi R5, R5, 1 bne R5, R6, -6 add R1, R2, R3 add R2, R3, R4 systemc-2.3.4/examples/sysc/risc_cpu/decode.h0000644000175000017500000001122214342422106021065 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** decode.h -- Instruction Decode Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct decode : sc_module { sc_in resetin; // input reset sc_in instruction; // fetched instruction sc_in pred_instruction; // fetched instruction sc_in instruction_valid; // input valid sc_in pred_inst_valid; // input valid sc_in destreg_write; // register write enable sc_in destreg_write_src; // which register to write? sc_in alu_dataout; // data from ALU sc_in dram_dataout; // data from Dcache sc_in dram_rd_valid; // Dcache read data valid sc_in dram_write_src; // Dcache data write to which reg sc_in fpu_dout; // data from FPU sc_in fpu_valid; // FPU data valid sc_in fpu_destout; // write to which register sc_in clear_branch; // clear outstanding branch sc_in display_done; // display to monitor done sc_in pc; // program counter from IFU sc_in pred_on; // branch prediction is on sc_out br_instruction_address; // branch invoke instruction sc_out next_pc; // next pc ++ ? sc_out branch_valid; // branch valid signal sc_out branch_target_address; // branch target address sc_out mem_access; // memory access valid sc_out mem_address; // memory physical address sc_out alu_op; // ALU/FPU/MMU Opcode sc_out mem_write; // memory write enable sc_out alu_src; // destination register number sc_out reg_write; // not implemented sc_out src_A; // operand A sc_out src_B; // operand B sc_out forward_A; // data forwarding to operand A sc_out forward_B; // data forwarding to operand B sc_out stall_fetch; // stall fetch due to branch sc_out decode_valid; // decoder output valid sc_out float_valid; // enable FPU sc_out mmx_valid; // enable MMU sc_out pid_valid; // load process ID sc_out pid_data; // process ID value sc_in_clk CLK; signed int cpu_reg[32]; //CPU register signed int vcpu_reg[32]; //virtual CPU register bool cpu_reg_lock[32]; //lock architectural state register unsigned int pc_reg; //pc register unsigned int jalpc_reg; //jump back register //Constructor SC_CTOR(decode) { SC_CTHREAD(entry, CLK.pos()); FILE *fp = fopen("register.img","r"); int size=0; unsigned mem_word; printf("** ALERT ** ID: initialize Architectural Registers\n"); while (fscanf(fp,"%x", &mem_word) != EOF) { cpu_reg[size] = mem_word; size++; } pc_reg = 0; jalpc_reg = 0; for (int j =0; j<32; j++) vcpu_reg[j] = 0; for (int k =0; k<32; k++) cpu_reg_lock[k] = 0; } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/dcache.h0000644000175000017500000000601314342422106021053 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** dcache.h -- Data Cache Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct dcache : sc_module { sc_in datain; // input data sc_in statein; // input state bit MESI(=3210) sc_in cs; // chip select sc_in we; // write enable sc_in addr; // address sc_in dest; // write back to which register sc_out destout; // write back to which register sc_out dataout; // dataram data out sc_out out_valid; // output valid sc_out stateout; // state output sc_in_clk CLK; // Parameter unsigned *dmemory; // data memory unsigned *dsmemory; // data state memory unsigned *dtagmemory; // tag memory int wait_cycles; // cycles # it takes to access dmemory void init_param(int given_delay_cycles) { wait_cycles = given_delay_cycles; } //Constructor SC_CTOR(dcache) { SC_CTHREAD(entry, CLK.pos()); // initialize instruction dmemory from external file FILE *fp = fopen("dcache.img","r"); int size=0; int i=0; unsigned mem_word; dmemory = new unsigned[4000]; dsmemory = new unsigned[4000]; dtagmemory = new unsigned[4000]; printf("** ALERT ** DCU: initialize Data Cache\n"); while (fscanf(fp,"%x", &mem_word) != EOF) { dmemory[size] = mem_word; dsmemory[size] = 0; dtagmemory[size] = size; size++; } for (i=size; i<4000; i++) { dtagmemory[i] = 0xdeadbeef; dmemory[i] = 0xdeadbeef; dsmemory[i] = 0; } } // Process functionality in member function below void entry(); }; systemc-2.3.4/examples/sysc/risc_cpu/CMakeLists.txt0000644000175000017500000000640014342422106022233 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/risc_cpu/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### # TODO: Fix multiple driver issue in risc_cpu example. # TODO: Fix segfault when risc_cpu is not started from the current directory. add_executable (risc_cpu main.cpp directive.h bios.h bios.cpp paging.h paging.cpp icache.h icache.cpp fetch.h fetch.cpp decode.h decode.cpp exec.h exec.cpp mmxu.h mmxu.cpp floating.h floating.cpp dcache.h dcache.cpp pic.h pic.cpp) target_link_libraries (risc_cpu SystemC::systemc) set (risc_cpu_EXTRAS README README_TYPESCRIPT abc.asm assembler.pl bios.img dcache.img icache.img printout.img program.img register.img test.asm test1.asm) foreach (risc_cpu_EXTRA ${risc_cpu_EXTRAS}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/${risc_cpu_EXTRA} ${CMAKE_CURRENT_BINARY_DIR}/${risc_cpu_EXTRA} COPYONLY) endforeach (risc_cpu_EXTRA ${risc_cpu_EXTRAS}) configure_and_add_test (risc_cpu) systemc-2.3.4/examples/sysc/risc_cpu/icache.cpp0000644000175000017500000000705414342422106021421 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** icache.cpp -- Instruction Cache Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Gene Bushuyev, Synopsys, Inc. Description of Modification: - bug - read/write outside of allocated memory Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "icache.h" #include "directive.h" void icache::entry() { unsigned int address; while (true) { do { wait(); } while ( !(cs == true) ); address = addr.read(); if (address == BOOT_LENGTH) { printf("ICU ALERT: *********************************************************************\n"); printf(" : *****************************AFTER RESET*****************************\n"); printf("ICU ALERT: *********************************************************************\n"); } if (address >= BOOT_LENGTH) { if (ld_valid.read() == true) { pid = ld_data.read(); printf("------------------------\n"); printf("ICU: PID = [%d]", pid); cout << " at CSIM " << sc_time_stamp() << endl; printf("------------------------\n"); wait(); wait(); } if (we.read() == true) { // Write operation wait(); if (address < MAX_CODE_LENGTH) icmemory[address] = datain.read(); else printf("ICU ALERT: **MEMORY OUT OF RANGE**\n"); wait(); } else { // Read operation wait(); // Introduce delay needed if (address >= MAX_CODE_LENGTH) { dataout.write(0xffffffff); printf("ICU ALERT: **MEMORY OUT OF RANGE**\n"); } else dataout.write(icmemory[address]); icache_valid.write(true); if (PRINT_ICU) { printf("------------------------\n"); printf("ICU: fetching mem[%d]\n", address); if (address < MAX_CODE_LENGTH) printf("ICU: (%0x)", icmemory[address]); cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; printf("------------------------\n"); } wait(); icache_valid.write(false); wait(); } } } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/dcache.img0000644000175000017500000000055014342422106021400 0ustar carstencarsten0x00000001 0x00000002 0x00000003 0x00000004 0x00000005 0x00000006 0x00000007 0x00000008 0x00000009 0x00000010 0x00000011 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016 0x00000017 0x00000018 0x00000019 0x00000020 0x00000021 0x00000022 0x00000023 0x00000024 0x00000025 0x00000026 0x00000027 0x00000028 0x00000029 0x00000030 systemc-2.3.4/examples/sysc/risc_cpu/risc_cpu.vcxproj0000644000175000017500000003106314342422106022722 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {7E89CFF9-22EE-45E4-942B-100C34D8AD72} risc_cpu Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/risc_cpu/dcache.cpp0000644000175000017500000000621514342422106021412 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** dcache.cpp -- Data Cache Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "dcache.h" #include "directive.h" void dcache::entry() { unsigned int address; // address to DataCache unsigned int dest_tmp = 0; while (true) { do { wait(); } while ( !(cs == true) ); dest_tmp = dest.read(); address = addr.read(); if (we.read() == true) { // Write operation wait(); out_valid.write(false); dmemory[address] = datain.read(); dsmemory[address] = statein.read(); dtagmemory[address] = addr.read(); cout << "\t\t\t\t\t\t\t-------------------------------" << endl; printf("\t\t\t\t\t\t\tDCU :St %x->mem[%d]", dmemory[address], address); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t\t\t\t\t-------------------------------" << endl; wait(); } else { // Read operation wait(); dataout.write(dmemory[address]); stateout.write(dsmemory[address]); destout.write(dest_tmp); out_valid.write(true); cout << "\t\t\t\t\t\t\t-------------------------------" << endl; printf("\t\t\t\t\t\t\tDCU :ld %d<-mem[%d]->R%d\n", dmemory[address], address, dest_tmp); printf("\t\t\t\t\t\t\tDCU :Tag = 0x%x", dtagmemory[address]); if (dsmemory[address] == 3) { printf(" (M)"); } else if (dsmemory[address] == 2) { printf(" (E)"); } else if (dsmemory[address] == 1) { printf(" (S)"); } else if (dsmemory[address] == 0) { printf(" (I)"); } else printf(" (X)"); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t\t\t\t\t-------------------------------" << endl; wait(); out_valid.write(false); wait(); } } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/mmxu.h0000644000175000017500000000416014342422106020633 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** mmxu.h -- MMX-Like Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct mmxu : sc_module { sc_in mmx_valid; // MMX unit enable sc_in opcode; // opcode sc_in mmxa; // operand A sc_in mmxb; // operand B sc_in dest; // Destination register number sc_out mmxdout; // MMX output sc_out mmxout_valid; // MMX output valid sc_out mmxdestout; // destination number sc_in_clk CLK; // can make it asynchronous process to speed up simulation SC_CTOR(mmxu) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; // EOF systemc-2.3.4/examples/sysc/risc_cpu/paging.cpp0000644000175000017500000000534314342422106021451 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** paging.cpp -- Instruction Paging Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "paging.h" #include "directive.h" void paging::entry() { int address=0; int dataout_tmp =0; while (true) { do { wait(); } while ( !(paging_csin == true) ); address = logical_address.read(); if (address >= 5) { if (paging_wein.read() == true) { // Write operation paging_dout.write(paging_din.read()); paging_csout.write(true); paging_weout.write(true); physical_address.write(logical_address.read()); wait(); paging_csout.write(false); paging_weout.write(false); } else { // Read operation paging_csout.write(true); paging_weout.write(false); physical_address.write(logical_address.read()); wait(); do { wait(); } while ( !(icache_validin == true) ); dataout_tmp = icache_din.read(); if (PRINT_PU){ cout << "-----------------------" << endl; printf( "PAGE : mem=%x\n",dataout_tmp); cout << "PAGE : " ; cout << " at CSIM " << sc_time_stamp() << endl; cout << "-----------------------" << endl; } dataout.write(icache_din.read()); data_valid.write(true); paging_csout.write(false); wait(); data_valid.write(false); wait(); } } } } // end of entry function systemc-2.3.4/examples/sysc/risc_cpu/floating.cpp0000644000175000017500000001457214342422106022013 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** floating.cpp -- Floating Point Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "floating.h" #include "directive.h" void floating::entry(){ int opcode_tmp = 0; signed int dout_tmp = 0; unsigned int dest_tmp = 0; unsigned int fpua_sign_tmp; unsigned int fpua_exponent_tmp; unsigned int fpua_significand_tmp; unsigned int fpub_sign_tmp; unsigned int fpub_exponent_tmp; unsigned int fpub_significand_tmp; const char * opcode_encode=""; unsigned int fpua_tmp; unsigned int fpub_tmp; int exponent_diff_tmp = 0; unsigned int significant_result = 0; unsigned int overflow_sign_tmp = 0; unsigned int result_exp_tmp = 0; unsigned int result_sign_tmp = 0; // // main loop // // // current implementation only worked if both operand have same sign bits // overflow is ignored. // initialization of output wait(3); while(true) { do { wait(); } while ( !(in_valid == true) ); dest_tmp = dest.read(); opcode_tmp = opcode.read(); fpua_tmp = floata.read(); fpub_tmp = floatb.read(); fpua_sign_tmp = (fpua_tmp & 0x80000000) >> 31 ; fpub_sign_tmp = (fpub_tmp & 0x80000000) >> 31 ; fpua_exponent_tmp = (fpua_tmp & 0x7f800000) >> 23 ; fpub_exponent_tmp = (fpub_tmp & 0x7f800000) >> 23 ; fpua_significand_tmp = (fpua_tmp & 0x007fffff) ; fpub_significand_tmp = (fpub_tmp & 0x007fffff) ; exponent_diff_tmp = int(fpua_exponent_tmp) - int(fpub_exponent_tmp); if (PRINT_FPU) { printf("\t\t\t\t\t\t\t-------------------------------\n"); printf("\t\t\t\t\t\t\tFPU: A s=0x%x, exp=0x%x, mant=0x%x\n",fpua_sign_tmp, fpua_exponent_tmp, fpua_significand_tmp); printf("\t\t\t\t\t\t\t : B s=0x%x, exp=0x%x, mant=0x%x\n",fpub_sign_tmp, fpub_exponent_tmp, fpub_significand_tmp); printf("\t\t\t\t\t\t\t : exponent difference = %d\n",exponent_diff_tmp); printf("\t\t\t\t\t\t\t-------------------------------\n"); } if (exponent_diff_tmp > 0) { //printf("shift significant B to Right\n"); fpub_significand_tmp = fpub_significand_tmp >> exponent_diff_tmp ; fpub_exponent_tmp = fpua_exponent_tmp; } else { //printf("shift significant A to Right\n"); fpua_significand_tmp = fpua_significand_tmp >> exponent_diff_tmp ; fpua_exponent_tmp = fpub_exponent_tmp; } wait(); if (PRINT_FPU) { printf("\t\t\t\t\t\t\t-------------------------------\n"); printf("\t\t\t\t\t\t\tFPU: After Alignment\n"); printf("\t\t\t\t\t\t\tFPU: A s=0x%x, exp=0x%x, mant=0x%x\n",fpua_sign_tmp, fpua_exponent_tmp, fpua_significand_tmp); printf("\t\t\t\t\t\t\t : B s=0x%x, exp=0x%x, mant=0x%x\n",fpub_sign_tmp, fpub_exponent_tmp, fpub_significand_tmp); printf("\t\t\t\t\t\t\t-------------------------------\n"); } // output MUX switch (opcode_tmp) { case 0: // Stall opcode_encode = "STALL"; // dout_tmp = dout_tmp; // keeps its value wait(); break; case 3: // add opcode_encode = "FADD"; significant_result = int(fpua_significand_tmp) + int(fpub_significand_tmp); wait(); break; case 4: // sub opcode_encode = "FSUB"; significant_result = int(fpua_significand_tmp) - int(fpub_significand_tmp); wait(); break; case 5: // mul opcode_encode = "FMUL"; significant_result = int(fpua_significand_tmp) * int(fpub_significand_tmp); fpub_exponent_tmp *= 2; // exponent is doubled in value wait(); break; case 6: // div opcode_encode = "FDIV"; significant_result = int(fpua_significand_tmp) / int(fpub_significand_tmp); wait(); break; default: printf("\t\t\t\t\t\t\t-------------------------------\n"); printf("\t\t\t\t\t\t\tFPU: Bad Opcode %d.\n",opcode_tmp); printf("\t\t\t\t\t\t\t-------------------------------\n"); wait(); break; } overflow_sign_tmp = (significant_result & 0xff800000) >> 23; dout_tmp = (significant_result << overflow_sign_tmp) & 0x007fffff ; result_exp_tmp = fpub_exponent_tmp + overflow_sign_tmp; dout_tmp = dout_tmp | ((result_exp_tmp << 23) & 0x7f800000) ; result_sign_tmp = fpua_sign_tmp; dout_tmp = dout_tmp | ((result_sign_tmp << 31) & 0x80000000) ; printf("\t\t\t\t\t\t\t-------------------------------\n"); printf("\t\t\t\t\t\t\tFPU: Result Sign=0x%x.\n",result_sign_tmp); printf("\t\t\t\t\t\t\t : Result Mantissa=0x%x.\n",significant_result); printf("\t\t\t\t\t\t\t : Result Exponent=0x%x.\n",result_exp_tmp); printf("\t\t\t\t\t\t\t : Overflow Mantissa=0x%x.\n",overflow_sign_tmp); cout << "\t\t\t\t\t\t\t : " << opcode_encode; printf(" FPU Output =0x%x.\n",dout_tmp); cout <<"\t\t\t\t\t\t\t : at CSIM " << sc_time_stamp() << endl; printf("\t\t\t\t\t\t\t-------------------------------\n"); fdout.write(dout_tmp); fout_valid.write(true); fdestout.write(dest_tmp); wait(); fout_valid.write(false); wait(); } } systemc-2.3.4/examples/sysc/risc_cpu/floating.h0000644000175000017500000000407614342422106021456 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** floating.h -- Floating Execution Unit. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ struct floating : sc_module { sc_in in_valid; // input valid bit sc_in opcode; // opcode sc_in floata; // operand A sc_in floatb; // operand B sc_in dest; // write to which register sc_out fdout; // FPU output sc_out fout_valid; // output valid sc_out fdestout; // write to which register sc_in_clk CLK; SC_CTOR(floating) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; // EOF systemc-2.3.4/examples/sysc/risc_cpu/main.cpp0000644000175000017500000004012314342422106021123 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main -- This is a simple CPU modeling using SystemC. Architecure defined by Martin Wang. You can initialize register by modifying file named register, and so is bios, and dacache. Original Author: Martin Wang, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "directive.h" #include "systemc.h" #include "bios.h" #include "paging.h" #include "icache.h" #include "fetch.h" #include "decode.h" #include "exec.h" #include "mmxu.h" #include "floating.h" #include "dcache.h" #include "pic.h" #include #include #include //#include #include int sc_main(int, char *[]) { // Silence the following deprecation warning: // Info: (I804) /IEEE_Std_1666/deprecated: positional binding // using << or , is deprecated, use () instead. sc_report_handler::set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); static const sc_writer_policy mw = SC_MANY_WRITERS; // ************************ ICACHE *********************************** // ICACHE = ram_cs // ICACHE = ram_we // ICACHE = addr // ICACHE = ram_datain // ICACHE = ram_dataout // ICACHE = ld_valid = pid_valid // ICACHE = ld_data = pid_data sc_signal icache_valid("ICACHE_VALID") ; // ************************ BIOS *********************************** sc_signal ram_cs("RAM_CS") ; sc_signal ram_we("RAM_WE") ; sc_signal addr("Address") ; sc_signal ram_datain("RAM_DATAIN") ; sc_signal ram_dataout("RAM_DATAOUT") ; sc_signal bios_valid("BIOS_VALID") ; const int delay_cycles = 2; // ************************ Paging *********************************** // Paging paging_din = ram_datain // Paging paging_csin = ram_cs // Paging paging_wein = ram_we // Paging logical_address = addr sc_signal icache_din("ICACHE_DIN") ; sc_signal icache_validin("ICACHE_VALIDIN") ; sc_signal icache_stall("ICACHE_STALL") ; sc_signal paging_dout("PAGING_DOUT") ; sc_signal paging_csout("PAGING_CSOUT") ; sc_signal paging_weout("PAGING_WEOUT") ; sc_signal physical_address("PHYSICAL_ADDRESS") ; // Paging dataout = ram_dataout // Paging data_valid = icache_valid // Paging stall_ifu = stall_fetch // ************************ Fetch *********************************** // IFU ramdata = ram_dataout sc_signal branch_target_address("BRANCH_TARGET_ADDRESS") ; sc_signal next_pc("NEXT_PC") ; sc_signal branch_valid("BRANCH_VALID") ; sc_signal stall_fetch("STALL_FETCH") ; sc_signal pred_fetch("PRED_FETCH") ; // IFU ram_valid = bios_valid // IFU ram_cs = ram_cs // IFU ram_we = ram_we // IFU address = addr // IFU smc_instrction = ram_datain // IFU pred_branch_address = pred_branch_address // IFU pred_branch_valid = pred_branch_valid sc_signal instruction("INSTRUCTION") ; sc_signal instruction_valid("INSTRUCTION_VALID") ; sc_signal program_counter("PROGRAM_COUNTER") ; sc_signal branch_clear("BRANCH_CLEAR") ; sc_signal pred_fetch_valid("PRED_FETCH_VALID") ; sc_signal reset("RESET") ; // ************************ Branch *********************************** // BPU: fetch_inst = instruction // BPU: fetch_pc = program_counter // BPU: fetch_valid = instruction_valid // BPU: branch_inst_addr = branch_instruction_address // BPU: branch_target_address = branch_target_address // BPU: branch_valid = branch_valid sc_signal pred_branch_address("PRED_BRANCH_ADDRESS"); sc_signal pred_branch_valid("PRED_BRANCH_VALID") ; sc_signal pred_tellid("PRED_TELLID") ; sc_signal pred_instruction("PRED_INSTRUCTION") ; sc_signal pred_inst_valid("PRED_INST_VALID") ; sc_signal pred_inst_pc("PRED_INST_PC"); // ************************ Decode *********************************** // ID instruction = instruction // ID instruction = instruction_valid // ID destreg_write = out_valid // ID destreg_write_src = destout // ID clear_branch = branch_clear // ID pc = program_counter sc_signal pred_on("PRED_ON") ; sc_signal branch_instruction_address("BR_INSTRUCTION_ADDRESS"); // ID alu_dataout = dout from EXEC sc_signal dram_dataout("DRAM_DATAOUT") ; sc_signal dram_rd_valid("DRAM_RD_VALID") ; sc_signal dram_write_src("DRAM_WRITE_SRC"); // ID next_pc = next_pc // ID branch_valid = branch_valid // ID branch_target_address = branch_target_address sc_signal mem_access("MEM_ACCESS") ; sc_signal mem_address("MEM_ADDRESS") ; sc_signal alu_op("ALU_OP") ; sc_signal mem_write("MEM_WRITE") ; sc_signal alu_src("ALU_SRC") ; sc_signal reg_write("REG_WRITE") ; sc_signal src_A("SRC_A") ; sc_signal src_B("SRC_B") ; sc_signal forward_A("FORWARD_A") ; sc_signal forward_B("FORWARD_B") ; // ID stall_fetch = stall_fetch sc_signal decode_valid("DECODE_VALID") ; sc_signal float_valid("FLOAT_VALID") ; sc_signal mmx_valid("MMX_VALID") ; sc_signal pid_valid("PID_VALID") ; sc_signal pid_data("PID_DATA") ; // ************************ DCACHE *********************************** sc_signal mmic_datain("MMIC_DATAIN") ; /* DCU: datain */ sc_signal mmic_statein("MMIC_STATEIN") ;/* DCU: statein */ sc_signal mmic_cs("MMIC_CS") ; /* DCU: cs */ sc_signal mmic_we("MMIC_WE") ; /* DCU: we */ sc_signal mmic_addr("MMIC_ADDR") ; /* DCU: addr */ sc_signal mmic_dest("MMIC_DEST") ; /* DCU: dest */ sc_signal mmic_destout("MMIC_DESTOUT") ;/* DCU: destout */ sc_signal mmic_dataout("MMIC_DATAOUT") ;/* DCU: dataout */ sc_signal mmic_out_valid("MMIC_OUT_VALID") ;/* DCU: out_valid*/ sc_signal mmic_stateout("MMIC_STATEOUT") ;/* DCU: stateout */ // ************************ Execute *********************************** // EXEC in_valid = decode_valid sc_signal in_valid("IN_VALID") ; // EXEC opcode = alu_op sc_signal negate("NEGATE") ; sc_signal add1("ADD1") ; sc_signal shift_sel("SHIFT_SEL") ; // EXEC dina = src_A // EXEC dinb = src_B // EXEC dest = alu_src sc_signal c("C") ; sc_signal v("V") ; sc_signal z("Z") ; sc_signal dout("DOUT") ; sc_signal out_valid("OUTPUT_VALID") ; sc_signal destout("DESTOUT") ; // ************************ Floating point ****************************** // FPU in_valid = float_valid // FPU opcode = alu_op // FPU floata = src_A // FPU floatb = src_B // FPU dest = alu_src sc_signal fdout("FDOUT") ; sc_signal fout_valid("FOUT_VALID") ; sc_signal fdestout("FDESTOUT") ; // ************************ PIC ***************************************** sc_signal ireq0("IREQ0") ; sc_signal ireq1("IREQ1") ; sc_signal ireq2("IREQ2") ; sc_signal ireq3("IREQ3") ; // PIC cs = interrupt_ack // PIC intack_cpu = interrupt_ack sc_signal rd_wr("RD_WR") ; sc_signal intreq("INTREQ") ; sc_signal vectno("VECTNO") ; sc_signal intack("INTACK") ; sc_signal intack_cpu("INTACK_CPU") ; // ************************ MMX *********************************** // MMX mmx_valid = mmx_valid // MMX opcode = alu_op // MMX mmxa = src_A // MMX mmxb = src_B // MMX dest = dest // MMX mmxdout = fdout // MMX mmxout_valid = fpu_valid // MMX mmxdestout = fpu_destout // ************************ DSP ***************************************** sc_signal dsp_in1("DPS_IN1"); sc_signal dsp_out1("DSP_OUT1"); sc_signal dsp_data_valid("DSP_DATA_VALID"); sc_signal dsp_input_valid("DSP_INPUT_VALID"); sc_signal dsp_data_requested("DSP_DATA_REQUESTED"); //////////////////////////////////////////////////////////////////////////// // MAIN PROGRAM //////////////////////////////////////////////////////////////////////////// sc_clock clk("Clock", 1, SC_NS, 0.5, 0.0, SC_NS); printf("/////////////////////////////////////////////////////////////////////////\n"); printf("// This code is written at SYNOPSYS, Inc.\n"); printf("/////////////////////////////////////////////////////////////////////////\n"); printf("// Module : main of CPU Model\n"); printf("// Author : Martin Wang\n"); printf("// Company : SYNOPSYS, Inc.\n"); printf("// Purpose : This is a simple CPU modeling using SystemC.\n"); printf("// Instruction Set Architecure defined by Martin Wang.\n"); printf("// \n"); printf("// SystemC (TM) Copyright (c) 1988-2014 by Synopsys, Inc. \n"); printf("// \n"); printf("/////////////////////////////////////////////////////////////////////////\n"); cout << "// IN THIS MACHINE Integer is " << sizeof (int) << " bytes.\n"; cout << "// IN THIS MACHINE Floating is " << sizeof (float) << " bytes.\n"; cout << "// IN THIS MACHINE Double is " << sizeof (double) << " bytes.\n"; printf("// \n"); printf("// \n"); printf("// .,,uod8B8bou,,.\n"); printf("// ..,uod8BBBBBBBBBBBBBBBBRPFT?l!i:.\n"); printf("// ,=m8BBBBBBBBBBBBBBBRPFT?!||||||||||||||\n"); printf("// !...:!TVBBBRPFT||||||||||!!^^\"\" ||||\n"); printf("// !.......:!?|||||!!^^\"\"' ||||\n"); printf("// !.........|||| ### # # ||||\n"); printf("// !.........|||| ### # # # # ||||\n"); printf("// !.........|||| # # # # # ||||\n"); printf("// !.........|||| # # # # # ||||\n"); printf("// !.........|||| # ## # # ||||\n"); printf("// !.........|||| # # ### ||||\n"); printf("// `.........|||| # # # ,||||\n"); printf("// .;.......|||| ### _.-!!|||||\n"); printf("// .,uodWBBBBb.....|||| _.-!!|||||||||!:'\n"); printf("// !YBBBBBBBBBBBBBBb..!|||:..-!!|||||||!iof68BBBBBb....\n"); printf("// !..YBBBBBBBBBBBBBBb!!||||||||!iof68BBBBBBRPFT?!:: `.\n"); printf("// !....YBBBBBBBBBBBBBBbaaitf68BBBBBBRPFT?!::::::::: `.\n"); printf("// !......YBBBBBBBBBBBBBBBBBBBRPFT?!::::::;:!^\"`;::: `.\n"); printf("// !........YBBBBBBBBBBRPFT?!::::::::::^''...::::::; iBBbo.\n"); printf("// `..........YBRPFT?!::::::::::::::::::::::::;iof68bo. WBBBBbo.\n"); printf("// `..........:::::::::::::::::::::::;iof688888888888b. `YBBBP^'\n"); printf("// `........::88::::::::::::;iof688888888888888888888b. `\n"); printf("// `......::81:::::;iof688888888888888888888888888888b.\n"); printf("// `....:::;iof688888888888888888888888888888888899fT!\n"); printf("// `..::!8888888888888888888888888888888899fT|!^\"'\n"); printf("// `' !!988888888888888888888888899fT|!^\"'\n"); printf("// `!!8888888888888888899fT|!^\"'\n"); printf("// `!988888888899fT|!^\"'\n"); printf("// `!9899fT|!^\"'\n"); printf("// `!^\"'\n"); printf("// \n"); printf("// \n"); printf("/////////////////////////////////////////////////////////////////////////\n\n\n"); fetch IFU("FETCH_BLOCK"); IFU.init_param(delay_cycles); IFU << ram_dataout << branch_target_address << next_pc << branch_valid << stall_fetch << intreq << vectno << bios_valid << icache_valid << pred_fetch << pred_branch_address << pred_branch_valid << ram_cs << ram_we << addr << ram_datain << instruction << instruction_valid << program_counter << intack_cpu << branch_clear << pred_fetch_valid << reset << clk; decode IDU("DECODE_BLOCK"); IDU << reset << instruction << pred_instruction << instruction_valid << pred_inst_valid << out_valid << destout << dout << dram_dataout << dram_rd_valid << destout << fdout << fout_valid << fdestout << branch_clear << dsp_data_valid << program_counter << pred_on << branch_instruction_address << next_pc << branch_valid << branch_target_address << mem_access << mem_address << alu_op << mem_write << alu_src << reg_write << src_A << src_B << forward_A << forward_B << stall_fetch << decode_valid << float_valid << mmx_valid << pid_valid << pid_data << clk; exec IEU("EXEC_BLOCK"); IEU << reset << decode_valid << alu_op << negate << add1 << shift_sel << src_A << src_B << forward_A << forward_B << alu_src << c << v << z << dout << out_valid << destout << clk; floating FPU("FLOAT_BLOCK"); // order dependent FPU << float_valid << alu_op << src_A << src_B << alu_src << fdout << fout_valid << fdestout << clk; mmxu MMXU("MMX_BLOCK"); MMXU << mmx_valid << alu_op << src_A << src_B << alu_src << fdout << fout_valid << fdestout << clk; bios BIOS("BIOS_BLOCK"); BIOS.init_param(delay_cycles); BIOS.datain(ram_datain); // order independent BIOS.cs(ram_cs); BIOS.we(ram_we); BIOS.addr(addr); BIOS.dataout(ram_dataout); BIOS.bios_valid(bios_valid); BIOS.stall_fetch(stall_fetch); BIOS.CLK(clk); paging PAGING("PAGING_BLOCK"); PAGING << ram_datain << ram_cs << ram_we << addr << icache_din << icache_validin << icache_stall << paging_dout << paging_csout << paging_weout << physical_address << ram_dataout << icache_valid << stall_fetch << clk ; icache ICACHE("ICACHE_BLOCK"); ICACHE.init_param(delay_cycles); ICACHE << paging_dout << paging_csout << paging_weout << physical_address << pid_valid << pid_data << icache_din << icache_validin << icache_stall << clk; dcache DCACHE("DCACHE_BLOCK"); DCACHE.init_param(delay_cycles); DCACHE << mmic_datain << mmic_statein << mmic_cs << mmic_we << mmic_addr << mmic_dest << mmic_destout << mmic_dataout << mmic_out_valid << mmic_stateout << clk; pic APIC("PIC_BLOCK"); APIC << ireq0 << ireq1 << ireq2 << ireq3 <1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.3/simple_async ## %C%: 2_3_simple_async # example requires async-update support if ! DISABLE_ASYNC_UPDATES examples_TESTS += 2.3/simple_async/test 2_3_simple_async_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_3_simple_async_test_SOURCES = \ $(2_3_simple_async_H_FILES) \ $(2_3_simple_async_CXX_FILES) examples_BUILD += \ $(2_3_simple_async_BUILD) examples_CLEAN += \ 2.3/simple_async/run.log \ 2.3/simple_async/expected_trimmed.log \ 2.3/simple_async/run_trimmed.log \ 2.3/simple_async/diff.log examples_FILES += \ $(2_3_simple_async_H_FILES) \ $(2_3_simple_async_CXX_FILES) \ $(2_3_simple_async_BUILD) \ $(2_3_simple_async_EXTRA) examples_DIRS += 2.3/simple_async ## example-specific details 2_3_simple_async_test_CPPFLAGS += \ -I $(srcdir)/2.3/simple_async/../include 2_3_simple_async_H_FILES = \ 2.3/simple_async/async_event.h 2_3_simple_async_CXX_FILES = \ 2.3/simple_async/main.cpp 2_3_simple_async_BUILD = \ 2.3/simple_async/golden.log 2_3_simple_async_EXTRA = \ 2.3/simple_async/simple_async.sln \ 2.3/simple_async/simple_async.vcxproj \ 2.3/simple_async/CMakeLists.txt \ 2.3/simple_async/Makefile #2_3_simple_async_FILTER = endif # ! DISABLE_ASYNC_UPDATES ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.3/simple_async/simple_async.vcxproj0000644000175000017500000002760314342422106024767 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {B2C51629-4AF6-48D0-B54C-378F55C63302} simple_async Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.3/simple_async/async_event.h0000644000175000017500000000376314342422106023354 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* * thread_safe_event.h * * Copyright (C) 2017, GreenSocs Ltd. * * Developped by Mark Burton mark@greensocs.com */ #ifndef ASYNC_EVENT_H_INCLUDED_ #define ASYNC_EVENT_H_INCLUDED_ #include class async_event : public sc_core::sc_prim_channel { sc_core::sc_time m_delay; sc_core::sc_event m_event; public: async_event(const char* name = sc_core::sc_gen_unique_name("async_event")) : sc_core::sc_prim_channel(name) , m_event((std::string(this->basename())+"_event").c_str()) { // register this channel as "suspending", to not end the simulation // when we're running out of internal events async_attach_suspending(); } // THREADSAFE METHOD: void notify(sc_core::sc_time delay = SC_ZERO_TIME) { m_delay = delay; async_request_update(); } // only allow waiting for the event operator const sc_event&() const { return m_event; } protected: void update(void) { // we're in the update phase of the SystemC kernel (thread) m_event.notify(m_delay); } }; #endif // ASYNC_EVENT_H_INCLUDED_ systemc-2.3.4/examples/sysc/2.3/simple_async/CMakeLists.txt0000644000175000017500000000354614342422106023424 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.3/simple_async/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (simple_async main.cpp async_event.h) target_link_libraries (simple_async SystemC::systemc) configure_and_add_test (simple_async) systemc-2.3.4/examples/sysc/2.3/simple_async/simple_async.sln0000644000175000017500000000230214342422106024055 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_async", "simple_async.vcxproj", "{B2C51629-4AF6-48D0-B54C-378F55C63302}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|Win32.ActiveCfg = Debug|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|Win32.Build.0 = Debug|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|x64.ActiveCfg = Debug|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Debug|x64.Build.0 = Debug|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|Win32.ActiveCfg = Release|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|Win32.Build.0 = Release|Win32 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|x64.ActiveCfg = Release|x64 {B2C51629-4AF6-48D0-B54C-378F55C63302}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.3/simple_async/main.cpp0000644000175000017500000000546314342422106022314 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** * simple example of async events * * Copyright (C) 2017, GreenSocs Ltd. * * Developped by Mark Burton mark@greensocs.com * *****************************************************************************/ #include "systemc.h" #include "async_event.h" #if SC_CPLUSPLUS >= 201103L // this version properly uses separate host threads. // Without host threads, the example simply notifys the async event // directly from the constructor #include #include #endif SC_MODULE(watchDog) { async_event when; bool barked; public: SC_CTOR(watchDog) : barked(false) { SC_METHOD(call_stop); sensitive << when; dont_initialize(); } #if SC_CPLUSPLUS >= 201103L // C++11 threading support ~watchDog() { m_thread.join(); } private: std::thread m_thread; void start_of_simulation() { m_thread=std::thread( [this] { this->process(); } ); } void process() { std::this_thread::sleep_for(std::chrono::seconds(1)); // asynchronous notification from a separate thread when.notify(sc_time(10,SC_NS)); } #else void start_of_simulation() { // no threading support, notifiy directly when.notify(sc_time(10,SC_NS)); } #endif // C++11 threading support private: void call_stop() { cout << "Asked to stop at time " << sc_time_stamp() << endl; barked=true; sc_stop(); } void end_of_simulation() { sc_assert(barked==true); cout << "The dog barks before the end of simulation" << endl; } }; SC_MODULE(activity) { SC_CTOR(activity) { SC_THREAD(busy); } void busy() { cout << "I'm busy!"<1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.3/sc_ttd ## %C%: 2_3_sc_ttd examples_TESTS += 2.3/sc_ttd/test 2_3_sc_ttd_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_3_sc_ttd_test_SOURCES = \ $(2_3_sc_ttd_H_FILES) \ $(2_3_sc_ttd_CXX_FILES) examples_BUILD += \ $(2_3_sc_ttd_BUILD) examples_CLEAN += \ 2.3/sc_ttd/run.log \ 2.3/sc_ttd/expected_trimmed.log \ 2.3/sc_ttd/run_trimmed.log \ 2.3/sc_ttd/diff.log examples_FILES += \ $(2_3_sc_ttd_H_FILES) \ $(2_3_sc_ttd_CXX_FILES) \ $(2_3_sc_ttd_BUILD) \ $(2_3_sc_ttd_EXTRA) examples_DIRS += 2.3/sc_ttd ## example-specific details 2_3_sc_ttd_test_CPPFLAGS += \ -I $(srcdir)/2.3/sc_ttd/../include 2_3_sc_ttd_H_FILES = \ 2.3/sc_ttd/../include/sc_ttd.h 2_3_sc_ttd_CXX_FILES = \ 2.3/sc_ttd/main.cpp 2_3_sc_ttd_BUILD = \ 2.3/sc_ttd/golden.log 2_3_sc_ttd_EXTRA = \ 2.3/sc_ttd/sc_ttd.sln \ 2.3/sc_ttd/sc_ttd.vcxproj \ 2.3/sc_ttd/CMakeLists.txt \ 2.3/sc_ttd/Makefile #2_3_sc_ttd_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.3/sc_ttd/sc_ttd.vcxproj0000644000175000017500000002747014342422106022355 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E} sc_ttd Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.3/sc_ttd/CMakeLists.txt0000644000175000017500000000361314342422106022211 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.3/sc_ttd/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (sc_ttd main.cpp ../include/sc_ttd.h) target_include_directories (sc_ttd PRIVATE ../include) target_link_libraries (sc_ttd SystemC::systemc) configure_and_add_test (sc_ttd) systemc-2.3.4/examples/sysc/2.3/sc_ttd/main.cpp0000644000175000017500000001006414342422106021077 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- This example shows the use of the sc_ttd classes to demonstrate a communication channel that uses a toggle-toggle handshake. Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ // $Log: main.cpp,v $ // Revision 1.2 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.1 2011/06/14 21:25:39 acg // Andy Goodrich: moved examples from 2.2.1 potential release. // // Revision 1.1 2010/08/20 14:14:10 acg // Andy Goodrich: new example using a toggle-toggle handshake for communication. // #include "systemc.h" #include #include "sc_ttd.h" SC_MODULE(DUT) { SC_CTOR(DUT) { SC_CTHREAD(thread,m_clk.pos()); reset_signal_is(m_reset, false); } void thread() { sc_uint<8> data[10]; m_input.reset(); m_output.reset(); wait(); for (;;) { for ( int outer_i = 0; outer_i < 10; outer_i++ ) { for ( int inner_i = 0; inner_i < outer_i; inner_i++ ) { data[inner_i] = m_input.read(); cout << " " << std::setw(3) << data[inner_i] << " " << sc_time_stamp() << endl; } for ( int inner_i = 0; inner_i < outer_i; inner_i++ ) { m_output = data[inner_i]; } } } } sc_in m_clk; sc_ttd >::in m_input; sc_ttd >::out m_output; sc_in m_reset; }; SC_MODULE(TB) { SC_CTOR(TB) { SC_CTHREAD(consumer,m_clk.pos()); reset_signal_is(m_reset, false); SC_CTHREAD(producer,m_clk.pos()); reset_signal_is(m_reset, false); } void consumer() { sc_uint<8> data; m_from_dut.reset(); wait(); for ( int i = 0; i < 40; i++ ) { data = m_from_dut.read(); cout << " " << std::setw(3) << data << " " << sc_time_stamp() << endl; } sc_stop(); } void producer() { sc_uint<8> data; m_to_dut.reset(); wait(); for ( int i = 0;; i++ ) { cout << " " << std::setw(3) << i << " " << sc_time_stamp() << endl; data = i; m_to_dut = data; if ( i && (i % 6 == 0) ) wait(i); } } sc_in m_clk; sc_ttd >::in m_from_dut; sc_in m_reset; sc_ttd >::out m_to_dut; }; int sc_main(int, char* []) { sc_clock clock; DUT dut("dut"); sc_ttd > dut_to_tb; sc_signal reset; TB tb("tb"); sc_ttd > tb_to_dut; dut.m_clk(clock); dut.m_reset(reset); dut.m_input(tb_to_dut); dut.m_output(dut_to_tb); tb.m_clk(clock); tb.m_reset(reset); tb.m_from_dut(dut_to_tb); tb.m_to_dut(tb_to_dut); cout << "producer dut consumer " << endl; reset = false; sc_start(1, SC_NS); reset = true; sc_start(); cout << "Program completed" << endl; return 0; } systemc-2.3.4/examples/sysc/2.3/sc_ttd/golden.log0000644000175000017500000000740714342422106021431 0ustar carstencarstenproducer dut consumer 0 1 ns 1 2 ns 0 3 ns 2 4 ns 1 5 ns 0 5 ns 3 6 ns 2 7 ns 4 8 ns 1 9 ns 3 11 ns 2 11 ns 5 12 ns 4 13 ns 6 14 ns 5 15 ns 3 17 ns 4 19 ns 6 21 ns 5 21 ns 7 22 ns 8 23 ns 7 24 ns 9 25 ns 8 26 ns 10 27 ns 9 28 ns 11 29 ns 6 30 ns 7 32 ns 8 34 ns 10 36 ns 9 36 ns 12 37 ns 11 38 ns 12 40 ns 13 51 ns 14 52 ns 13 53 ns 15 54 ns 14 55 ns 16 56 ns 10 57 ns 11 59 ns 12 61 ns 13 63 ns 15 65 ns 14 65 ns 17 66 ns 16 67 ns 18 68 ns 17 69 ns 18 71 ns 19 88 ns 20 89 ns 19 90 ns 21 91 ns 20 92 ns 22 93 ns 15 94 ns 16 96 ns 17 98 ns 18 100 ns 19 102 ns 21 104 ns 20 104 ns 23 105 ns 22 106 ns 24 107 ns 23 108 ns 24 110 ns 25 133 ns 26 134 ns 25 135 ns 27 136 ns 26 137 ns 28 138 ns 27 139 ns 29 140 ns 21 141 ns 22 143 ns 23 145 ns 24 147 ns 25 149 ns 26 151 ns 28 153 ns 27 153 ns 30 154 ns 29 155 ns 30 157 ns 31 186 ns 32 187 ns 31 188 ns 33 189 ns 32 190 ns 34 191 ns 33 192 ns 35 193 ns 34 194 ns 36 195 ns 35 196 ns 28 198 ns 29 200 ns 30 202 ns 31 204 ns 32 206 ns 33 208 ns 34 210 ns 36 212 ns 35 212 ns 37 233 ns 38 234 ns 37 235 ns 39 236 ns 38 237 ns 40 238 ns 39 239 ns 41 240 ns 40 241 ns 42 242 ns 41 243 ns 42 245 ns 43 286 ns 44 287 ns 43 288 ns 45 289 ns 44 290 ns 46 291 ns 36 292 ns 37 294 ns 38 296 ns 39 298 ns Info: /OSCI/SystemC: Simulation stopped by user. Program completed systemc-2.3.4/examples/sysc/2.3/sc_ttd/sc_ttd.sln0000644000175000017500000000226614342422106021452 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_ttd", "sc_ttd.vcxproj", "{4A6AD027-9C4C-42BD-A5CE-C7BED609690E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|Win32.ActiveCfg = Debug|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|Win32.Build.0 = Debug|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|x64.ActiveCfg = Debug|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Debug|x64.Build.0 = Debug|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|Win32.ActiveCfg = Release|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|Win32.Build.0 = Release|Win32 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|x64.ActiveCfg = Release|x64 {4A6AD027-9C4C-42BD-A5CE-C7BED609690E}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.3/sc_ttd/Makefile0000644000175000017500000000025714342422106021112 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = sc_ttd OBJS = main.o INCDIR = -I ../include include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/2.3/include/0000755000175000017500000000000014342422106017611 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.3/include/sc_ttd.h0000644000175000017500000002214314342422106021244 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #if !defined(sc_ttd_h_included) #define sc_ttd_h_included // This header file contains classes implementing a channel, in port, and // out port that may be used to transfer data via a "toggle-toggle" protocol. // The toggle-toggle protocol uses two bits to specify the state of the channel, // a read toggle, and a write toggle. The protocol has the following // characteristics: // (1) If the toggle values are not equal then there is data available in // the channel. // (2) When reading or writing the channel it is not necessary to wait // for an acknowledgment from the other side of the channel, one need // only toggle the appropriate toggle value. At the next clock edge the // change in toggle will be visible to the other side of the channel. // (3) A read can be accomplished in a single clock if data is available // (the toggle values differ.) // (4) A write can be accomplished in a single clock if the channel is // empty (the toggle values are the same.) // (5) A call to the reset() method of the read and write ports is // necessary to place the channel in its initial state. // (6) There is no "burst" mode when transferring data. Back to back writes // will always have a one clock "bubble" since the handshake must be // toggled. This differs from a ready-valid handshake, where leaving // ready and valid asserted allow the transfer of data on every clock. // +============================================================================ // | sc_ttd_export_in - EXPORT OF INPUT INTERFACE FOR A COMMUNICATION // | CHANNEL WITH A TOGGLE-TOGGLE HANDSHAKE // | // | This class provides the interface necessary for binding an input for a // | data transfer channel that is controlled using a toggle-toggle handshake. // | // +============================================================================ template class sc_ttd_export_in { public: sc_ttd_export_in(const char* name=sc_gen_unique_name("sc_ttd_export_in")) : m_data( (std::string(name)+"m_data").c_str() ), m_read_toggle( (std::string(name)+"m_read_toggle").c_str() ), m_write_toggle( (std::string(name)+"m_write_toggle").c_str() ) {} public: sc_export > m_data; // data to transfer. sc_export > m_read_toggle; // toggle for read side. sc_export > m_write_toggle; // toggle for write side. }; // +============================================================================ // | sc_ttd_export_out - EXPORT OF OUTPUT SIGNALS FOR A COMMUNICATION // | CHANNEL WITH A TOGGLE-TOGGLE HANDSHAKE // | // | This class provides the interface necessary for binding an output for a // | data transfer channel that is controlled using a toggle-toggle handshake. // | // +============================================================================ template class sc_ttd_export_out { public: sc_ttd_export_out(const char* name=sc_gen_unique_name("sc_ttd_export_out")): m_data( (std::string(name)+"m_data").c_str() ), m_read_toggle( (std::string(name)+"m_read_toggle").c_str() ), m_write_toggle( (std::string(name)+"m_write_toggle").c_str() ) {} public: sc_export > m_data; // data to transfer. sc_export > m_read_toggle; // toggle for read side. sc_export > m_write_toggle; // toggle for write side. }; // +============================================================================ // | sc_ttd_in - PORT TO READ VALUES FROM AN sc_ttd CHANNEL // | // | This class provides the interface to read signals from an sc_ttd channel. // +============================================================================ template class sc_ttd_in { public: // constructor: sc_ttd_in( const char* name=sc_gen_unique_name("sc_ttd_in") ) : m_data( (std::string(name)+"_data").c_str() ), m_read_toggle( (std::string(name)+"_ready").c_str() ), m_write_toggle( (std::string(name)+"_valid").c_str() ) { } public: // channel binding method and operator: template inline void bind( CHANNEL& channel ) { m_data(channel.m_data); m_read_toggle(channel.m_read_toggle); m_write_toggle(channel.m_write_toggle); } template inline void operator () ( CHANNEL& channel ) { bind(channel); } public: // channel access methods and operators: inline bool nb_can_read() { return m_write_toggle.read() != m_read_toggle.read(); } inline bool nb_read( D& data ) { data = m_data; if ( m_write_toggle.read() != m_read_toggle.read() ) { m_read_toggle = !m_read_toggle; return true; } else { return false; } } inline void reset() { m_read_toggle = false; } inline D read() { do { ::wait(); } while (m_write_toggle.read() == m_read_toggle.read()); m_read_toggle = !m_read_toggle; return m_data.read(); } inline operator D () { return read(); } protected: // channel connections: sc_in m_data; // data to be transferred. sc_out m_read_toggle; // toggle for the read side of the channel. sc_in m_write_toggle; // toggle for the write side of the channel. }; // +============================================================================ // | sc_ttd_out - PORT TO WRITE VALUES TO AN sc_ttd CHANNEL // | // | This class provides the interface to write values to an sc_ttd channel. // +============================================================================ template class sc_ttd_out { public: // constructor: sc_ttd_out( const char* name=sc_gen_unique_name("sc_ttd_out") ) : m_data( (std::string(name)+"_data").c_str() ), m_read_toggle( (std::string(name)+"_ready").c_str() ), m_write_toggle( (std::string(name)+"_valid").c_str() ) { } public: // channel binding method and operator: template inline void bind( CHANNEL& channel ) { m_data(channel.m_data); m_read_toggle(channel.m_read_toggle); m_write_toggle(channel.m_write_toggle); } template inline void operator () ( CHANNEL& channel ) { bind(channel); } public: // channel access methods and operators: inline bool nb_can_write() { return m_write_toggle.read() == m_read_toggle.read(); } inline bool nb_write( const D& data ) { if ( m_write_toggle.read() == m_read_toggle.read() ) { m_data = data; m_write_toggle = !m_write_toggle; return true; } else { return false; } } inline void reset() { m_write_toggle = false; } inline void write( const D& data ) { do { ::wait(); } while (m_write_toggle.read() != m_read_toggle.read()); m_data = data; m_write_toggle = !m_write_toggle; } inline const D& operator = ( const D& data ) { write( data ); return data; } protected: // channel connections: sc_out m_data; // data to be transferred. sc_in m_read_toggle; // toggle for the read side of the channel. sc_out m_write_toggle; // toggle for write side of the channel. }; // +============================================================================ // | sc_ttd - COMMUNICATION CHANNEL WITH A TOGGLE-TOGGLE HANDSHAKE // | // | This class provides the signals necessary for a data transfer channel // | that is controlled using a toggle-toggle handshake. // | // +============================================================================ template class sc_ttd { public: typedef sc_ttd channel; // channel. typedef sc_ttd_in in; // input port. typedef sc_ttd_out out; // output port. public: sc_signal m_data; // data to be transferred. sc_signal m_read_toggle; // toggle for read side of the channel. sc_signal m_write_toggle; // toggle for write side of the channel. }; #endif // !defined(sc_ttd_h_included) systemc-2.3.4/examples/sysc/2.3/include/sc_rvd.h0000644000175000017500000002144314342422106021246 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #if !defined(sc_rvd_h_included) #define sc_rvd_h_included // This header file contains classes implementing a channel, in port, and // out port that may be used to transfer data via a "ready-valid" protocol. // The ready-valid protocol uses two bits to specify the state of the channel, // a ready assertion for the read side of the channel, and a valid assertion // for the write side of the channel. The protocol has the following // characteristics: // (1) If the valid signal is true there is data available in the channel, // if the ready signal is true the read side of the channel is ready // to read data. // (2) Data transfers on clocks where the ready and valid signals are // both asserted. // (3) When writing data to the channel it is necessary to wait for the // ready signal to be asserted before the valid signal can be deasserted. // (4) When reading data from the channel it is necessary to wait for // valid signal to be asserted before data can be transferred, and // the ready signal deasserted. // (5) A call to the reset() method of the read and write ports is // necessary to place the channel in its initial state. // (6) There is always a one clock "bubble" on the first data transfer // in a sequence. However, multiple values can be transferred, one // value per clock after that by having the read and write sides // leave their handshake signals asserted. When the transfer is // complete the signals should be deasserted. // +============================================================================ // | sc_rvd_export_in - EXPORT OF INPUT INTERFACE FOR A COMMUNICATION // | CHANNEL WITH A TOGGLE-TOGGLE HANDSHAKE // | // | This class provides the interface necessary for binding an input for a // | data transfer channel that is controlled using a ready-valid handshake. // | // +============================================================================ template class sc_rvd_export_in { public: sc_rvd_export_in(const char* name=sc_gen_unique_name("sc_rvd_export_in")) : m_data( (std::string(name)+"m_data").c_str() ), m_ready( (std::string(name)+"m_ready").c_str() ), m_valid( (std::string(name)+"m_valid").c_str() ) {} public: sc_export > m_data; // data to transfer. sc_export > m_ready; // valid signal. sc_export > m_valid; // ready signal. }; // +============================================================================ // | sc_rvd_export_out - EXPORT OF INTERFACE SIGNALS FOR A COMMUNICATION // | CHANNEL WITH A TOGGLE-TOGGLE HANDSHAKE // | // | This class provides the interface necessary for binding an output for a // | data transfer channel that is controlled using a ready-valid handshake. // | // +============================================================================ template class sc_rvd_export_out { public: sc_rvd_export_out(const char* name=sc_gen_unique_name("sc_rvd_export_out")): m_data( (std::string(name)+"m_data").c_str() ), m_ready( (std::string(name)+"m_ready").c_str() ), m_valid( (std::string(name)+"m_valid").c_str() ) {} public: sc_export > m_data; // data to transfer. sc_export > m_ready; // valid signal. sc_export > m_valid; // ready signal. }; // +============================================================================ // | sc_rvd_in - PORT TO READ VALUES FROM AN sc_rvd CHANNEL // | // | This class provides the interface to read values from an sc_rvd channel. // +============================================================================ template class sc_rvd_in { public: // constructor: sc_rvd_in( const char* name=sc_gen_unique_name("sc_rvd_in") ) : m_data( (std::string(name)+"_data").c_str() ), m_ready( (std::string(name)+"_ready").c_str() ), m_valid( (std::string(name)+"_valid").c_str() ) { } public: // channel binding method and operator: template inline void bind( CHANNEL& channel ) { m_data(channel.m_data); m_ready(channel.m_ready); m_valid(channel.m_valid); } template inline void operator () ( CHANNEL& channel ) { bind(channel); } public: // channel access methods and operators: inline bool nb_can_read() { return m_valid.read(); } inline bool nb_read( D& data ) { data = m_data; if ( m_valid.read() == true ) { m_ready = true; return true; } else { return false; } } inline void reset() { m_ready = false; } inline D read() { m_ready = true; do { ::wait(); } while ( m_valid.read() == false ); m_ready = false; return m_data.read(); } inline operator D () { return read(); } protected: // channel connections: sc_in m_data; // data to be transferred. sc_out m_ready; // true if this port is ready to read a value. sc_in m_valid; // true if m_data has a value to be read. }; // +============================================================================ // | sc_rvd_out - PORT TO WRITE VALUES TO AN sc_rvd CHANNEL // | // | This class provides the interface to write values to an sc_rvd channel. // +============================================================================ template class sc_rvd_out { public: // constructor: sc_rvd_out( const char* name=sc_gen_unique_name("sc_rvd_out") ) : m_data( (std::string(name)+"_data").c_str() ), m_ready( (std::string(name)+"_ready").c_str() ), m_valid( (std::string(name)+"_valid").c_str() ) { } public: // channel binding method and operator: template inline void bind( CHANNEL& channel ) { m_data(channel.m_data); m_ready(channel.m_ready); m_valid(channel.m_valid); } template inline void operator () ( CHANNEL& channel ) { bind(channel); } public: // channel access methods and operators: inline bool nb_can_write() { return m_valid.read() == false || m_ready.read() == true; } inline bool nb_write( const D& data ) { if ( m_ready.read() == true ) { m_data = data; m_valid = true; return true; } else { return false; } } inline void reset() { m_valid = false; } inline void write( const D& data ) { m_data = data; m_valid = true; do { ::wait(); } while ( m_ready.read() == false ); m_valid = false; } inline const D& operator = ( const D& data ) { write( data ); return data; } protected: // channel connections: sc_out m_data; // data to be transferred. sc_in m_ready; // true if this port is ready to read a value. sc_out m_valid; // true if m_data has a value to be read. }; // +============================================================================ // | sc_rvd - COMMUNICATION CHANNEL WITH A READY-VALID HANDSHAKE // | // | This class provides the signals necessary for a data transfer channel // | that is controlled using a ready-valid handshake. // | // +============================================================================ template class sc_rvd { public: typedef sc_rvd channel; // channel. typedef sc_rvd_in in; // input port. typedef sc_rvd_out out; // output port. public: sc_signal m_data; // data to be transferred. sc_signal m_ready; // true if the channel reader if ready for data. sc_signal m_valid; // true if the channel writer has provided data. }; #endif // !defined(sc_rvd_h_included) systemc-2.3.4/examples/sysc/2.3/sc_rvd/0000755000175000017500000000000014342422106017446 5ustar carstencarstensystemc-2.3.4/examples/sysc/2.3/sc_rvd/test.am0000644000175000017500000000521014342422106020742 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: 2.3/sc_rvd ## %C%: 2_3_sc_rvd examples_TESTS += 2.3/sc_rvd/test 2_3_sc_rvd_test_CPPFLAGS = \ $(AM_CPPFLAGS) 2_3_sc_rvd_test_SOURCES = \ $(2_3_sc_rvd_H_FILES) \ $(2_3_sc_rvd_CXX_FILES) examples_BUILD += \ $(2_3_sc_rvd_BUILD) examples_CLEAN += \ 2.3/sc_rvd/run.log \ 2.3/sc_rvd/expected_trimmed.log \ 2.3/sc_rvd/run_trimmed.log \ 2.3/sc_rvd/diff.log examples_FILES += \ $(2_3_sc_rvd_H_FILES) \ $(2_3_sc_rvd_CXX_FILES) \ $(2_3_sc_rvd_BUILD) \ $(2_3_sc_rvd_EXTRA) examples_DIRS += 2.3/sc_rvd ## example-specific details 2_3_sc_rvd_test_CPPFLAGS += \ -I $(srcdir)/2.3/sc_rvd/../include 2_3_sc_rvd_H_FILES = \ 2.3/sc_rvd/../include/sc_rvd.h 2_3_sc_rvd_CXX_FILES = \ 2.3/sc_rvd/main.cpp 2_3_sc_rvd_BUILD = \ 2.3/sc_rvd/golden.log 2_3_sc_rvd_EXTRA = \ 2.3/sc_rvd/sc_rvd.sln \ 2.3/sc_rvd/sc_rvd.vcxproj \ 2.3/sc_rvd/CMakeLists.txt \ 2.3/sc_rvd/Makefile #2_3_sc_rvd_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/2.3/sc_rvd/sc_rvd.vcxproj0000644000175000017500000002747014342422106022355 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851} sc_rvd Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;../include%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/2.3/sc_rvd/CMakeLists.txt0000644000175000017500000000361314342422106022211 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/2.3/sc_rvd/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (sc_rvd main.cpp ../include/sc_rvd.h) target_include_directories (sc_rvd PRIVATE ../include) target_link_libraries (sc_rvd SystemC::systemc) configure_and_add_test (sc_rvd) systemc-2.3.4/examples/sysc/2.3/sc_rvd/main.cpp0000644000175000017500000001006114342422106021074 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp -- This example shows the use of the sc_rvd classes to demonstrate a communication channel that uses a ready-valid handshake. Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ // $Log: main.cpp,v $ // Revision 1.2 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.1 2011/06/14 21:25:39 acg // Andy Goodrich: moved examples from 2.2.1 potential release. // // Revision 1.1 2010/08/20 14:14:01 acg // Andy Goodrich: new example using a ready-valid handshake for communication. // #include "systemc.h" #include #include "sc_rvd.h" SC_MODULE(DUT) { SC_CTOR(DUT) { SC_CTHREAD(thread,m_clk.pos()); reset_signal_is(m_reset, false); } void thread() { sc_uint<8> data[10]; m_input.reset(); m_output.reset(); wait(); for (;;) { for ( int outer_i = 0; outer_i < 10; outer_i++ ) { for ( int inner_i = 0; inner_i < outer_i; inner_i++ ) { data[inner_i] = m_input.read(); cout << " " << std::setw(3) << data[inner_i] << " " << sc_time_stamp() << endl; } for ( int inner_i = 0; inner_i < outer_i; inner_i++ ) { m_output = data[inner_i]; } } } } sc_in m_clk; sc_rvd >::in m_input; sc_rvd >::out m_output; sc_in m_reset; }; SC_MODULE(TB) { SC_CTOR(TB) { SC_CTHREAD(consumer,m_clk.pos()); reset_signal_is(m_reset, false); SC_CTHREAD(producer,m_clk.pos()); reset_signal_is(m_reset, false); } void consumer() { sc_uint<8> data; m_from_dut.reset(); wait(); for ( int i = 0; i < 40; i++ ) { data = m_from_dut.read(); cout << " " << std::setw(3) << data << " " << sc_time_stamp() << endl; } sc_stop(); } void producer() { sc_uint<8> data; m_to_dut.reset(); wait(); for ( int i = 0;; i++ ) { cout << " " << std::setw(3) << i << " " << sc_time_stamp() << endl; data = i; m_to_dut = data; if ( i && (i % 6 == 0) ) wait(i); } } sc_in m_clk; sc_rvd >::in m_from_dut; sc_in m_reset; sc_rvd >::out m_to_dut; }; int sc_main(int , char* []) { sc_clock clock; DUT dut("dut"); sc_rvd > dut_to_tb; sc_signal reset; TB tb("tb"); sc_rvd > tb_to_dut; dut.m_clk(clock); dut.m_reset(reset); dut.m_input(tb_to_dut); dut.m_output(dut_to_tb); tb.m_clk(clock); tb.m_reset(reset); tb.m_from_dut(dut_to_tb); tb.m_to_dut(tb_to_dut); cout << "producer dut consumer " << endl; reset = false; sc_start(1, SC_NS); reset = true; sc_start(); cout << "Program completed" << endl; return 0; } systemc-2.3.4/examples/sysc/2.3/sc_rvd/golden.log0000644000175000017500000000733514342422106021431 0ustar carstencarstenproducer dut consumer 0 1 ns 0 2 ns 1 2 ns 0 3 ns 1 4 ns 2 4 ns 2 5 ns 3 5 ns 1 6 ns 2 7 ns 3 8 ns 4 8 ns 4 9 ns 5 9 ns 5 10 ns 6 10 ns 3 11 ns 4 12 ns 5 13 ns 6 14 ns 7 20 ns 7 21 ns 8 21 ns 8 22 ns 9 22 ns 9 23 ns 10 23 ns 6 24 ns 7 25 ns 8 26 ns 9 27 ns 10 28 ns 11 28 ns 11 29 ns 12 29 ns 12 30 ns 13 42 ns 13 43 ns 14 43 ns 14 44 ns 15 44 ns 10 45 ns 11 46 ns 12 47 ns 13 48 ns 14 49 ns 15 50 ns 16 50 ns 16 51 ns 17 51 ns 17 52 ns 18 52 ns 18 53 ns 19 71 ns 19 72 ns 20 72 ns 20 73 ns 21 73 ns 15 74 ns 16 75 ns 17 76 ns 18 77 ns 19 78 ns 20 79 ns 21 80 ns 22 80 ns 22 81 ns 23 81 ns 23 82 ns 24 82 ns 24 83 ns 25 107 ns 25 108 ns 26 108 ns 26 109 ns 27 109 ns 27 110 ns 28 110 ns 21 111 ns 22 112 ns 23 113 ns 24 114 ns 25 115 ns 26 116 ns 27 117 ns 28 118 ns 29 118 ns 29 119 ns 30 119 ns 30 120 ns 31 150 ns 31 151 ns 32 151 ns 32 152 ns 33 152 ns 33 153 ns 34 153 ns 34 154 ns 35 154 ns 35 155 ns 36 155 ns 28 156 ns 29 157 ns 30 158 ns 31 159 ns 32 160 ns 33 161 ns 34 162 ns 35 163 ns 36 164 ns 37 200 ns 37 201 ns 38 201 ns 38 202 ns 39 202 ns 39 203 ns 40 203 ns 40 204 ns 41 204 ns 41 205 ns 42 205 ns 42 206 ns 43 248 ns 43 249 ns 44 249 ns 44 250 ns 45 250 ns 36 251 ns 37 252 ns 38 253 ns 39 254 ns Info: /OSCI/SystemC: Simulation stopped by user. Program completed systemc-2.3.4/examples/sysc/2.3/sc_rvd/sc_rvd.sln0000644000175000017500000000226614342422106021452 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_rvd", "sc_rvd.vcxproj", "{5DA7B653-E73E-4C68-BEF6-382A605B0851}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|Win32.ActiveCfg = Debug|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|Win32.Build.0 = Debug|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|x64.ActiveCfg = Debug|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Debug|x64.Build.0 = Debug|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|Win32.ActiveCfg = Release|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|Win32.Build.0 = Release|Win32 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|x64.ActiveCfg = Release|x64 {5DA7B653-E73E-4C68-BEF6-382A605B0851}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/2.3/sc_rvd/Makefile0000644000175000017500000000025714342422106021112 0ustar carstencarstenSYSTEMC_HOME ?= ../../../.. include ../../../build-unix/Makefile.config PROJECT = sc_rvd OBJS = main.o INCDIR = -I ../include include ../../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/pkt_switch/0000755000175000017500000000000014342422106020043 5ustar carstencarstensystemc-2.3.4/examples/sysc/pkt_switch/receiver.cpp0000644000175000017500000000437414342422106022363 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** receiver.cpp - This is the implementation file for the asynchronous process "receiver". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "receiver.h" void receiver:: entry() { pkt temp_val; // Ignore the first packet arriving on start-on if (first == 1) {first = 0;} else { temp_val = pkt_in.read(); cout << " .........................." << endl; cout << " New Packet Received" << endl; cout << " Receiver ID: " << (int)sink_id.read() + 1 << endl; cout << " Packet Value: " << (int)temp_val.data << endl; cout << " Sender ID: " << (int)temp_val.id + 1 << endl; cout << " .........................." << endl; } } systemc-2.3.4/examples/sysc/pkt_switch/receiver.h0000644000175000017500000000364114342422106022024 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** receiver.h - This is the interface file for the asynchronous process "receiver". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef RECEIVER_H_INCLUDED #define RECEIVER_H_INCLUDED #include "systemc.h" #include "pkt.h" struct receiver: sc_module { sc_in pkt_in; sc_in > sink_id; int first; SC_CTOR(receiver) { SC_METHOD(entry); dont_initialize(); sensitive << pkt_in; first = 1; } void entry(); }; #endif // RECEIVER_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/test.am0000644000175000017500000000561414342422106021347 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: pkt_switch ## %C%: pkt_switch examples_TESTS += pkt_switch/test pkt_switch_test_CPPFLAGS = \ $(AM_CPPFLAGS) pkt_switch_test_SOURCES = \ $(pkt_switch_H_FILES) \ $(pkt_switch_CXX_FILES) examples_BUILD += \ $(pkt_switch_BUILD) examples_CLEAN += \ pkt_switch/run.log \ pkt_switch/expected_trimmed.log \ pkt_switch/run_trimmed.log \ pkt_switch/diff.log examples_FILES += \ $(pkt_switch_H_FILES) \ $(pkt_switch_CXX_FILES) \ $(pkt_switch_BUILD) \ $(pkt_switch_EXTRA) examples_DIRS += pkt_switch ## example-specific details pkt_switch_H_FILES = \ pkt_switch/fifo.h \ pkt_switch/pkt.h \ pkt_switch/receiver.h \ pkt_switch/sender.h \ pkt_switch/switch.h \ pkt_switch/switch_clk.h \ pkt_switch/switch_reg.h pkt_switch_CXX_FILES = \ pkt_switch/fifo.cpp \ pkt_switch/main.cpp \ pkt_switch/receiver.cpp \ pkt_switch/sender.cpp \ pkt_switch/switch.cpp \ pkt_switch/switch_clk.cpp # output is randomized across runs #pkt_switch_BUILD = \ # pkt_switch/golden.log pkt_switch_EXTRA = \ pkt_switch/pkt_switch.sln \ pkt_switch/pkt_switch.vcxproj \ pkt_switch/CMakeLists.txt \ pkt_switch/Makefile \ pkt_switch/README #pkt_switch_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/pkt_switch/pkt_switch.vcxproj0000644000175000017500000003035214342422106023642 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4} pkt_switch Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4244;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4244;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4244;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4244;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/pkt_switch/README0000644000175000017500000001025014342422106020721 0ustar carstencarsten========================================================================= README for MULTICAST HELIX PACKET SWITCH ========================================================================= Overview: ========= This example demonstrates a 4x4 multicast helix packet switch. This example was developed and tested on Solaris2.5. The switch uses a self routing ring of shift registers to transfer cells from one port to another in a pipelined fashion, resolving output contention and efficiently handling multicast cells. Input and output ports have fifo buffers of depth four each. This is a simplified model. Following is a block diagram of the switch: +-----------------------------------------------------------+ | fifo fifo | | +-------+ +-------+ | IN0 |--->| | | | |-----------+ +---------| | | | |<-----| IN2 | +-------+ | | +-------+ | | fifo | | fifo | | +-------+ | | +-------+ | OUT0 |<---| | | | |<-------+ | | +----->| | | | |----->| OUT2 | +-------+ | V V | +-------+ | | +-----+ +-----+ | | | R0 |<-----| R2 | | | +-----+ +-----+ | | | Shift Reg ^ | | v Ring | | | +-----+ +-----+ | | | R1 |----->| R3 | | | +-----+ +-----+ | | fifo ^ | ^ | fifo | | +-------+ | | | | +-------+ | IN1 |--->| | | | |--------+ | | +---->| | | | |<------| IN3 | +-------+ | | +-------+ | | fifo | | fifo | | +-------+ | | +-------+ | OUT1 |<---| | | | |<---------+ +--------| | | | |------>| OUT3 | +-------+ +-------+ | | | +-----------------------------------------------------------+ Input and ouput signals are 16-bit packets with the following structure: I<-ad(4)->I<-id(4)->I<---data(8)--->I +-----------------------------------+ | | | | | | | | | | | | | | | | | | | +-----------------------------------+ Input and output ports are of signals of type pkt. For instance: ... sc_in in0; ... where pkt is a user defined structure in SystemC: struct pkt { sc_int<8> data; sc_int<4> id; bool dest0; bool dest1; bool dest2; bool dest3; inline bool operator == (const pkt& rhs) const { return (rhs.data == data && rhs.id == id && rhs.dest0 == dest0 && rhs.dest1 == dest1 && rhs.dest2 == dest2 && rhs.dest3 == dest3); } } Each input port is connected to a sender process. Each output port is connected to a receiver process. The sender and receiver processes are given distinguish id numbers during instantiations. A sender process, writes a random value to data, and sends it to one or more of the four receivers. Each packet also contains a sender id field. Sender processes send packets at random intervals, varying from 1 to 4 units of it's clock. A receiver process is activated whenever a packet arrives. It then displays the contents of the packet and the receiver id. Simulation: ========== Executable can be built using the gmake command. Please make sure that the variable "SYSTEMC" within the file Makefile.defs points to your installation of SystemC. The simulation run displays the sequence in which the packets are sent and received along with the contents of the packets. At the end of the simulation, a report is displayed which shows the total no. of packets received, packets dropped and percentage of packets dropped. It may be a good idea to direct the simulation outputs to a file and then can view the simulation results in that file. The performance(% packets dropped) depends upon a number of factors: - the traffic - fifo buffer size - speed of the switch, relative to the activity rates on the input ports systemc-2.3.4/examples/sysc/pkt_switch/pkt.h0000644000175000017500000000502314342422106021012 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** pkt.h - This file defines a SystemC structure "pkt". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef PKT_H_INCLUDED #define PKT_H_INCLUDED #include "systemc.h" struct pkt { sc_int<8> data; sc_int<4> id; bool dest0; bool dest1; bool dest2; bool dest3; inline bool operator == (const pkt& rhs) const { return (rhs.data == data && rhs.id == id && rhs.dest0 == dest0 && rhs.dest1 == dest1 && rhs.dest2 == dest2 && rhs.dest3 == dest3); } }; inline ostream& operator << ( ostream& os, const pkt& /* a */ ) { os << "streaming of struct pkt not implemented"; return os; } inline void #if defined(SC_API_VERSION_STRING) sc_trace( sc_trace_file* tf, const pkt& a, const std::string& name ) #else sc_trace( sc_trace_file* tf, const pkt& a, const sc_string& name ) #endif { sc_trace( tf, a.data, name + ".data" ); sc_trace( tf, a.id, name + ".id" ); sc_trace( tf, a.dest0, name + ".dest0" ); sc_trace( tf, a.dest1, name + ".dest1" ); sc_trace( tf, a.dest2, name + ".dest2" ); sc_trace( tf, a.dest3, name + ".dest3" ); } #endif // PKT_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/sender.h0000644000175000017500000000353514342422106021502 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sender.h - This is the interface file for the synchronous process "sender". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef SENDER_H_INCLUDED #define SENDER_H_INCLUDED #include "systemc.h" #include "pkt.h" struct sender: sc_module { sc_out pkt_out; sc_in > source_id; sc_in_clk CLK; SC_CTOR(sender) { SC_CTHREAD(entry, CLK.pos()); } void entry(); }; #endif // SENDER_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/switch_clk.h0000644000175000017500000000365214342422106022354 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** switch_clk.h - This is the interface file for the synchronous process "switch_clk". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef SWITCH_CLK_H_INCLUDED #define SWITCH_CLK_H_INCLUDED #include "systemc.h" struct switch_clk: sc_module { sc_out switch_cntrl; sc_in_clk CLK; SC_CTOR(switch_clk) { SC_METHOD(entry); dont_initialize(); sensitive << CLK.pos(); } void entry(); }; #endif // SWITCH_CLK_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/fifo.cpp0000644000175000017500000000373614342422106021503 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fifo.cpp - This is the functionality file for the SystemC structure "fifo". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #undef SC_INCLUDE_FX #include "fifo.h" void fifo::pkt_in(const pkt& data_pkt) { regs[pntr++] = data_pkt; empty = false; if (pntr == 4) full = true; } pkt fifo::pkt_out() { pkt temp; temp = regs[0]; if (--pntr == 0) empty = true; else { regs[0] = regs[1]; regs[1] = regs[2]; regs[2] = regs[3]; full = false; } return(temp); } systemc-2.3.4/examples/sysc/pkt_switch/pkt_switch.sln0000644000175000017500000000227614342422106022747 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkt_switch", "pkt_switch.vcxproj", "{8851E829-5B71-4744-BE45-1592FFCBF1F4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|Win32.ActiveCfg = Debug|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|Win32.Build.0 = Debug|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|x64.ActiveCfg = Debug|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Debug|x64.Build.0 = Debug|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|Win32.ActiveCfg = Release|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|Win32.Build.0 = Release|Win32 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|x64.ActiveCfg = Release|x64 {8851E829-5B71-4744-BE45-1592FFCBF1F4}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/pkt_switch/CMakeLists.txt0000644000175000017500000000441714342422106022611 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/pkt_switch/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (pkt_switch main.cpp pkt.h fifo.h fifo.cpp sender.h sender.cpp switch_clk.h switch_clk.cpp switch_reg.h switch.h switch.cpp receiver.h receiver.cpp) target_link_libraries (pkt_switch SystemC::systemc) configure_and_add_test (pkt_switch) systemc-2.3.4/examples/sysc/pkt_switch/switch_reg.h0000644000175000017500000000337614342422106022363 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** switch_reg.h - This file describes a SystemC structure "switch_reg". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef SWITCH_REG_H_INCLUDED #define SWITCH_REG_H_INCLUDED #include "pkt.h" struct switch_reg { pkt val; bool free; // constructor switch_reg() { free = true; } }; #endif // SWITCH_REG_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/switch_clk.cpp0000644000175000017500000000340614342422106022704 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** switch_clk.cpp - This is the implementation file for the synchronous process "switch_clk". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "switch_clk.h" void switch_clk::entry() { static bool var_switch_cntrl = false; { switch_cntrl = var_switch_cntrl; var_switch_cntrl = !var_switch_cntrl; } } systemc-2.3.4/examples/sysc/pkt_switch/switch.h0000644000175000017500000000417214342422106021521 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** switch.h - This is the interface file for the asynchronous process "switch". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef SWITCH_H_INCLUDED #define SWITCH_H_INCLUDED #include "systemc.h" #include "pkt.h" struct mcast_pkt_switch : sc_module { sc_in switch_cntrl; sc_in in0; sc_in in1; sc_in in2; sc_in in3; sc_out out0; sc_out out1; sc_out out2; sc_out out3; SC_CTOR(mcast_pkt_switch) { SC_THREAD(entry); sensitive << in0; sensitive << in1; sensitive << in2; sensitive << in3; sensitive << switch_cntrl.pos(); } void entry(); }; #endif // SWITCH_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/main.cpp0000644000175000017500000001003614342422106021473 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** main.cpp - This file instantiates all processes and ties them together with signals. Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "pkt.h" #include "switch_clk.h" #include "sender.h" #include "receiver.h" #include "switch.h" int sc_main(int, char *[]) { sc_signal pkt_in0; sc_signal pkt_in1; sc_signal pkt_in2; sc_signal pkt_in3; sc_signal pkt_out0; sc_signal pkt_out1; sc_signal pkt_out2; sc_signal pkt_out3; sc_signal > id0, id1, id2, id3; sc_signal switch_cntrl; sc_clock clock1("CLOCK1", 75, SC_NS, 0.5, 0.0, SC_NS); sc_clock clock2("CLOCK2", 30, SC_NS, 0.5, 10.0, SC_NS); // Module instiatiations follow // Note that modules can be connected by hooking up ports // to signals by name or by using a positional notation sender sender0("SENDER0"); // hooking up signals to ports by name sender0.pkt_out(pkt_in0); sender0.source_id(id0); sender0.CLK(clock1); sender sender1("SENDER1"); // hooking up signals to ports by position sender1(pkt_in1, id1, clock1); sender sender2("SENDER2"); // hooking up signals to ports by name sender2.pkt_out(pkt_in2); sender2.source_id(id2); sender2.CLK(clock1); sender sender3("SENDER3"); // hooking up signals to ports by position sender3( pkt_in3, id3, clock1 ); switch_clk switch_clk1("SWITCH_CLK"); // hooking up signals to ports by name switch_clk1.switch_cntrl(switch_cntrl); switch_clk1.CLK(clock2); mcast_pkt_switch switch1("SWITCH"); // hooking up signals to ports by name switch1.switch_cntrl(switch_cntrl); switch1.in0(pkt_in0); switch1.in1(pkt_in1); switch1.in2(pkt_in2); switch1.in3(pkt_in3); switch1.out0(pkt_out0); switch1.out1(pkt_out1); switch1.out2(pkt_out2); switch1.out3(pkt_out3); receiver receiver0("RECEIVER0"); // hooking up signals to ports by name receiver0.pkt_in(pkt_out0); receiver0.sink_id(id0); receiver receiver1("RECEIVER1"); // hooking up signals to ports by position receiver1( pkt_out1, id1 ); receiver receiver2("RECEIVER2"); // hooking up signals to ports by name receiver2.pkt_in(pkt_out2); receiver2.sink_id(id2); receiver receiver3("RECEIVER3"); // hooking up signals to ports by position receiver3( pkt_out3, id3 ); sc_start(0, SC_NS); #ifndef __SUNPRO_CC id0.write(0); id1.write(1); id2.write(2); id3.write(3); #else // you cannot do that with SC5.0 // since it doesn't support member templates id0.write(sc_int<4>(0)); id0.write(sc_int<4>(1)); id0.write(sc_int<4>(2)); id0.write(sc_int<4>(3)); #endif sc_start(); return 0; } systemc-2.3.4/examples/sysc/pkt_switch/sender.cpp0000644000175000017500000000537614342422106022042 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sender.cpp - This is the implementation file for the synchronous process "sender". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include #include "sender.h" void sender:: entry() { pkt pkt_data; sc_uint<4> dest; srand((unsigned)time(NULL)); wait(8); while(true) { /////generate an 8-bit random value for data////////// pkt_data.data = rand()%255; ////stamp the sender's id pkt_data.id = source_id.read(); /////send it to 1 or more(<=4) destinations////////////// dest = rand()%15 + 1; pkt_data.dest0 = dest[0]; pkt_data.dest1 = dest[1]; pkt_data.dest2 = dest[2]; pkt_data.dest3 = dest[3]; pkt_out.write(pkt_data); cout << ".........................." << endl; cout << "New Packet Sent" << endl; cout << "Destination Addresses: "; if (dest[0]) cout << 1 << " " ; if (dest[1]) cout << 2 << " "; if (dest[2]) cout << 3 << " "; if (dest[3]) cout << 4 << " "; cout << endl; cout << "Packet Value: " << (int)pkt_data.data << endl; cout << "Sender ID: " << (int)source_id.read() + 1 << endl; cout << ".........................." << endl; wait(); /////wait for 1 to 3 clock periods///////////////////// wait(1+(rand()%3)); } } systemc-2.3.4/examples/sysc/pkt_switch/switch.cpp0000644000175000017500000001457614342422106022065 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** switch.cpp - This is the implementation file for the asynchronous process "switch". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "systemc.h" #include "pkt.h" #include "switch.h" #include "fifo.h" #include "switch_reg.h" #define SIM_NUM 500 void mcast_pkt_switch :: entry() { wait(); // declarations switch_reg R0; switch_reg R1; switch_reg R2; switch_reg R3; switch_reg temp; int sim_count; int pkt_count; int drop_count; fifo q0_in; fifo q1_in; fifo q2_in; fifo q3_in; fifo q0_out; fifo q1_out; fifo q2_out; fifo q3_out; // FILE *result; // initialization pkt_count = 0; drop_count = 0; sim_count = 0; q0_in.pntr = 0; q1_in.pntr = 0; q2_in.pntr = 0; q3_in.pntr = 0; q0_out.pntr = 0; q1_out.pntr = 0; q2_out.pntr = 0; q3_out.pntr = 0; q0_in.full = false; q1_in.full = false; q2_in.full = false; q3_in.full = false; q0_in.empty = true; q1_in.empty = true; q2_in.empty = true; q3_in.empty = true; q0_out.full = false; q1_out.full = false; q2_out.full = false; q3_out.full = false; q0_out.empty = true; q1_out.empty = true; q2_out.empty = true; q3_out.empty = true; R0.free = true; R1.free = true; R2.free = true; R3.free = true; // result = fopen("result","w"); cout << endl; cout << "-------------------------------------------------------------------------------" << endl; cout << endl << " 4x4 Multicast Helix Packet Switch Simulation" << endl; cout << "-------------------------------------------------------------------------------" << endl; cout << " This is the simulation of a 4x4 non-blocking multicast helix packet switch. " << endl; cout << " The switch uses a self-routing ring of shift registers to transfer cells " << endl; cout << " from one port to another in a pipelined fashion, resolving output contention " << endl; cout << " and handling multicast switch efficiently." << endl << endl; wait(); // functionality while( sim_count++ < SIM_NUM ) { wait(); /////read input packets////////////////////////////////// if (in0.event()) { pkt_count++; if (q0_in.full == true) drop_count++; else q0_in.pkt_in(in0.read()); }; if (in1.event()) { pkt_count++; if (q1_in.full == true) drop_count++; else q1_in.pkt_in(in1.read()); }; if (in2.event()) { pkt_count++; if (q2_in.full == true) drop_count++; else q2_in.pkt_in(in2.read()); }; if (in3.event()) { pkt_count++; if (q3_in.full == true) drop_count++; else q3_in.pkt_in(in3.read()); }; /////move the packets from fifo to shift register ring///// if((!q0_in.empty) && R0.free) { R0.val = q0_in.pkt_out(); R0.free = false; } if((!q1_in.empty) && R1.free) { R1.val = q1_in.pkt_out(); R1.free = false; } if((!q2_in.empty) && R2.free) { R2.val = q2_in.pkt_out(); R2.free = false; } if((!q3_in.empty) && R3.free) { R3.val = q3_in.pkt_out(); R3.free = false; } if((bool)switch_cntrl && switch_cntrl.event()) { /////shift the channel registers ///////////////////////// temp = R0; R0 = R1; R1 = R2; R2 = R3; R3 = temp; /////write the register values to output fifos//////////// if ((!R0.free) && (R0.val.dest0) && (!q0_out.full)) { q0_out.pkt_in(R0.val); R0.val.dest0 = false; if (!(R0.val.dest0|R0.val.dest1|R0.val.dest2|R0.val.dest3)) R0.free = true; } if ((!R1.free) && (R1.val.dest1) && (!q1_out.full)) { q1_out.pkt_in(R1.val); R1.val.dest1 = false; if (!(R1.val.dest0|R1.val.dest1|R1.val.dest2|R1.val.dest3)) R1.free = true; } if ((!R2.free) && (R2.val.dest2) && (!q2_out.full)) { q2_out.pkt_in(R2.val); R2.val.dest2 = false; if (!(R2.val.dest0|R2.val.dest1|R2.val.dest2|R2.val.dest3)) R2.free = true; } if ((!R3.free) && (R3.val.dest3) && (!q3_out.full)) { q3_out.pkt_in(R3.val); R3.val.dest3 = false; if (!(R3.val.dest0|R3.val.dest1|R3.val.dest2|R3.val.dest3)) R3.free = true; } /////write the packets out////////////////////////////////// if (!q0_out.empty) out0.write(q0_out.pkt_out()); if (!q1_out.empty) out1.write(q1_out.pkt_out()); if (!q2_out.empty) out2.write(q2_out.pkt_out()); if (!q3_out.empty) out3.write(q3_out.pkt_out()); } } sc_stop(); cout << endl << endl << "-------------------------------------------------------------------------------" << endl; cout << "End of switch operation..." << endl; cout << "Total number of packets received: " << pkt_count << endl; cout << "Total number of packets dropped: " << drop_count << endl; cout << "Percentage packets dropped: " << drop_count*100/pkt_count << endl; cout << "-------------------------------------------------------------------------------" << endl; } systemc-2.3.4/examples/sysc/pkt_switch/fifo.h0000644000175000017500000000361614342422106021145 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fifo.h - This is the header file for the SystemC structure "fifo". Original Author: Rashmi Goswami, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #ifndef FIFO_H_INCLUDED #define FIFO_H_INCLUDED #include "systemc.h" #include "pkt.h" struct fifo { pkt regs[4]; bool full; bool empty; sc_uint<3> pntr; // constructor fifo() { full = false; empty = true; pntr = 0; } // methods void pkt_in(const pkt& data_pkt); pkt pkt_out(); }; #endif // FIFO_H_INCLUDED systemc-2.3.4/examples/sysc/pkt_switch/Makefile0000644000175000017500000000023614342422106021504 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT = pkt_switch SRCS = $(wildcard *.cpp) OBJS = $(SRCS:.cpp=.o) include ../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/CMakeLists.txt0000644000175000017500000000472314342422106020432 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE) set(TEST_FOLDER "examples/sysc" CACHE INTERNAL "" FORCE) add_subdirectory (2.1/dpipe) add_subdirectory (2.1/forkjoin) add_subdirectory (2.1/reset_signal_is) add_subdirectory (2.1/sc_export) add_subdirectory (2.1/sc_report) add_subdirectory (2.1/scx_barrier) add_subdirectory (2.1/scx_mutex_w_policy) add_subdirectory (2.1/specialized_signals) add_subdirectory (2.3/sc_rvd) add_subdirectory (2.3/sc_ttd) add_subdirectory (2.3/simple_async) add_subdirectory (fft/fft_flpt) add_subdirectory (fft/fft_fxpt) add_subdirectory (fir) add_subdirectory (pipe) add_subdirectory (pkt_switch) add_subdirectory (risc_cpu) add_subdirectory (rsa) add_subdirectory (simple_bus) add_subdirectory (simple_fifo) add_subdirectory (simple_perf) systemc-2.3.4/examples/sysc/rsa/0000755000175000017500000000000014342422106016451 5ustar carstencarstensystemc-2.3.4/examples/sysc/rsa/rsa.sln0000644000175000017500000000226014342422106017754 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rsa", "rsa.vcxproj", "{99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|Win32.ActiveCfg = Debug|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|Win32.Build.0 = Debug|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|x64.ActiveCfg = Debug|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Debug|x64.Build.0 = Debug|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|Win32.ActiveCfg = Release|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|Win32.Build.0 = Release|Win32 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|x64.ActiveCfg = Release|x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/rsa/test.am0000644000175000017500000000461314342422106017753 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: rsa ## %C%: rsa examples_TESTS += rsa/test rsa_test_CPPFLAGS = \ $(AM_CPPFLAGS) rsa_test_SOURCES = \ $(rsa_H_FILES) \ $(rsa_CXX_FILES) examples_BUILD += \ $(rsa_BUILD) examples_CLEAN += \ rsa/run.log \ rsa/expected_trimmed.log \ rsa/run_trimmed.log \ rsa/diff.log examples_FILES += \ $(rsa_H_FILES) \ $(rsa_CXX_FILES) \ $(rsa_BUILD) \ $(rsa_EXTRA) examples_DIRS += rsa ## example-specific details rsa_H_FILES = rsa_CXX_FILES = \ rsa/rsa.cpp # output is randomized across runs #rsa_BUILD = \ # rsa/golden.log rsa_EXTRA = \ rsa/rsa.sln \ rsa/rsa.vcxproj \ rsa/CMakeLists.txt \ rsa/Makefile \ rsa/README #rsa_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/rsa/rsa.vcxproj0000644000175000017500000002740014342422106020656 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {99D7F4F7-B5B9-486E-B0B3-00E0F553B26C} rsa Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/rsa/README0000644000175000017500000000403014342422106017326 0ustar carstencarsten README for the RSA example: =================================================================== rsa.cpp is an implementation of the RSA public-key cipher. The implementation is based on the one given in the book Cormen et al., Inroduction to Algorithms, McGRAW Hill, 1991. I'll refer to this book as CLR because of its authors. The purpose of this implementation is to show the usage of arbitrary precision types of SystemC. That is, these types in SystemC can be used to implement algorithmic examples regarding arbitrary precision integers. The algorithms used are not the most efficient ones; however, they are intended for explanatory purposes, so they are simple to understand and perform their job correctly. Some background knowledge: A prime number p > 1 is an integer that has only two divisiors, 1 and p itself. For example, 2, 3, 5, 7, and 11 are all primes. If p is not a prime number, it is called a composite number. If we are given two primes p and q, it is easy to find their product p * q; however, if we are given a number m which happens to be the product of two primes p and q that we do not know, it is very difficult to find p and q if m is very large, i.e., it is very difficult to factor m. The RSA public-key cryptosystem is based on this fact. Internally, we use the Miller-Rabin randomized primality test to deal with primes. More information can be obtained from pp. 831-836 in CLR, the first edition. Running the appropriate makefile in the rsa directory will create an executable called run.x, which can be executed by typing 'run.x'. The RSA example uses a pseudo-random number generator internally. Such generators need a seed, an integer number, to initialize. A seed can be provided by the user by typing 'run.x ' where is the integer seed. If no seed is given to run.x, the generator will be initialized with a seed obtained from the system using the time() system call. The seed input can be used to repeat an experiment on the RSA example. Original Author: Ali Dasdan, Synopsys, Inc. systemc-2.3.4/examples/sysc/rsa/CMakeLists.txt0000644000175000017500000000345714342422106021222 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/rsa/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (rsa rsa.cpp) target_link_libraries (rsa SystemC::systemc) configure_and_add_test (rsa) systemc-2.3.4/examples/sysc/rsa/rsa.cpp0000644000175000017500000003356714342422106017760 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** rsa.cpp -- An implementation of the RSA public-key cipher. The following implementation is based on the one given in Cormen et al., Inroduction to Algorithms, 1991. I'll refer to this book as CLR because of its authors. This implementation shows the usage of arbitrary precision types of SystemC. That is, these types in SystemC can be used to implement algorithmic examples regarding arbitrary precision integers. The algorithms used are not the most efficient ones; however, they are intended for explanatory purposes, so they are simple and perform their job correctly. Below, NBITS shows the maximum number of bits in n, the variable that is a part of both the public and secret keys, P and S, respectively. NBITS can be made larger at the expense of longer running time. For example, CLR mentions that the RSA cipher uses large primes that contain approximately 100 decimal digits. This means that NBITS should be set to approximately 560. Some background knowledge: A prime number p > 1 is an integer that has only two divisiors, 1 and p itself. For example, 2, 3, 5, 7, and 11 are all primes. If p is not a prime number, it is called a composite number. If we are given two primes p and q, it is easy to find their product p * q; however, if we are given a number m which happens to be the product of two primes p and q that we do not know, it is very difficult to find p and q if m is very large, i.e., it is very difficult to factor m. The RSA public-key cryptosystem is based on this fact. Internally, we use the Miller-Rabin randomized primality test to deal with primes. More information can be obtained from pp. 831-836 in CLR, the first edition. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include #include #include #include // drand48, srand48 #include "systemc.h" #define DEBUG_SYSTEMC // #undef this to disable assertions. // NBITS is the number of bits in n of public and secret keys P and // S. HALF_NBITS is the number of bits in p and q, which are the prime // factors of n. #define NBITS 250 #define HALF_NBITS ( NBITS / 2 ) // +2 is for the format specifier '0b' to make the string binary. #define STR_SIZE ( NBITS + 2 ) #define HALF_STR_SIZE ( HALF_NBITS + 2 ) typedef sc_bigint bigint; // Return the absolute value of x. inline bigint abs_val( const sc_signed& x ) { return ( x < 0 ? -x : x ); } // Initialize the random number generator. If seed == -1, the // generator will be initialized with the system time. If not, it will // be initialized with the given seed. This way, an experiment with // random numbers becomes reproducible. inline long randomize( int seed ) { long in_seed; // time_t is long. in_seed = ( seed <= 0 ? static_cast(time( 0 )) : seed ); #ifndef WIN32 srand48( in_seed ); #else srand( ( unsigned ) in_seed ); #endif return in_seed; } // Flip a coin with probability p. #ifndef WIN32 inline bool flip( double p ) { return ( drand48() < p ); } #else inline bool flip( double p ) { const int MAX_VAL = ( 1 << 15 ); // rand() produces an integer between 0 and 2^15-1, so rand() / // MAX_VAL is a number between 0 and 1, which is required to compare // with p. return ( rand() < ( int ) ( p * MAX_VAL ) ); } #endif // Randomly generate a bit string with nbits bits. str has a length // of nbits + 1. This function is used to generate random messages to // process. inline void rand_bitstr( char *str, int nbits ) { assert( nbits >= 4 ); str[ 0 ] = '0'; str[ 1 ] = 'b'; str[ 2 ] = '0'; // Sign for positive numbers. for ( int i = 3; i < nbits; ++i ) str[ i ] = ( flip( 0.5 ) == true ? '1' : '0' ); str[ nbits ] = '\0'; } // Generate "111..111" with nbits bits for masking. // str has a length of nbits + 1. inline void max_bitstr( char *str, int nbits ) { assert( nbits >= 4 ); str[ 0 ] = '0'; str[ 1 ] = 'b'; str[ 2 ] = '0'; // Sign for positive numbers. for ( int i = 3; i < nbits; ++i ) str[ i ] = '1'; str[ nbits ] = '\0'; } // Return a positive remainder. inline bigint ret_pos( const bigint& x, const bigint& n ) { if ( x < 0 ) return x + n; return x; } // Compute the greatest common divisor ( gcd ) of a and b. This is // Euclid's algorithm. This algorithm is at least 2,300 years old! The // non-recursive version of this algorithm is not as elegant. bigint gcd( const bigint& a, const bigint& b ) { if ( b == 0 ) return a; return gcd( b, a % b ); } // Compute d, x, and y such that d = gcd( a, b ) = ax + by. x and y can // be zero or negative. This algorithm is also Euclid's algorithm but // it is extended to also find x and y. Recall that the existence of x // and y is guaranteed by Euclid's algorithm. void euclid( const bigint& a, const bigint& b, bigint& d, bigint& x, bigint& y ) { if ( b != 0 ) { euclid( b, a % b, d, x, y ); bigint tmp = x; x = y; y = tmp - ( a / b ) * y; } else { d = a; x = 1; y = 0; } } // Return d = a^b % n, where ^ represents exponentiation. inline bigint modular_exp( const bigint& a, const bigint& b, const bigint& n ) { bigint d = 1; for ( int i = b.length() - 1; i >= 0; --i ) { d = ( d * d ) % n; if ( b[ i ] ) d = ( d * a ) % n; } return ret_pos( d, n ); } // Return the multiplicative inverse of a, modulo n, when a and n are // relatively prime. Recall that x is a multiplicative inverse of a, // modulo n, if a * x = 1 ( mod n ). inline bigint inverse( const bigint& a, const bigint& n ) { bigint d, x, y; euclid( a, n, d, x, y ); assert( d == 1 ); x %= n; return ret_pos( x, n ); } // Find a small odd integer a that is relatively prime to n. I do not // know an efficient algorithm to do that but the loop below seems to // work; it usually iterates a few times. Recall that a is relatively // prime to n if their only common divisor is 1, i.e., gcd( a, n ) == // 1. inline bigint find_rel_prime( const bigint& n ) { bigint a = 3; while ( true ) { if ( gcd( a, n ) == 1 ) break; a += 2; #ifdef DEBUG_SYSTEMC assert( a < n ); #endif } return a; } // Return true if and only if a is a witness to the compositeness of // n, i.e., a can be used to prove that n is composite. inline bool witness( const bigint& a, const bigint& n ) { bigint n_minus1 = n - 1; bigint x; bigint d = 1; // Compute d = a^( n-1 ) % n. for ( int i = n.length() - 1; i >= 0; --i ) { // Sun's SC5 bug when compiling optimized version // makes the wrong assignment if abs_val() is inlined //x = (sc_signed)d<0?-(sc_signed)d:(sc_signed)d;//abs_val( d ); if(d<0) { x = -d; assert(x==-d); } else { x = d; assert(x==d); } d = ( d * d ) % n; // x is a nontrivial square root of 1 modulo n ==> n is composite. if ( ( abs_val( d ) == 1 ) && ( x != 1 ) && ( x != n_minus1 ) ) return true; if ( n_minus1[ i ] ) d = ( d * a ) % n; } // d = a^( n-1 ) % n != 1 ==> n is composite. if ( abs_val( d ) != 1 ) return true; return false; } // Check to see if n has any small divisors. For small numbers, we do // not have to run the Miller-Rabin primality test. We define "small" // to be less than 1023. You can change it if necessary. inline bool div_test( const bigint& n ) { int limit; if ( n < 1023 ) limit = n.to_int() - 2; else limit = 1023; for ( int i = 3; i <= limit; i += 2 ) { if ( n % i == 0 ) return false; // n is composite. } return true; // n may be prime. } // Return true if n is almost surely prime, return false if n is // definitely composite. This test, called the Miller-Rabin primality // test, errs with probaility at most 2^(-s). CLR suggests s = 50 for // any imaginable application, and s = 3 if we are trying to find // large primes by applying miller_rabin to randomly chosen large // integers. Even though we are doing the latter here, we will still // choose s = 50. The probability of failure is at most // 0.00000000000000088817, a pretty small number. inline bool miller_rabin( const bigint& n ) { if ( n <= 2 ) return false; if ( ! div_test( n ) ) return false; char str[ STR_SIZE + 1 ]; int s = 50; for ( int j = 1; j <= s; ++j ) { // Choose a random number. rand_bitstr( str, STR_SIZE ); // Set a to the chosen number. bigint a = str; // Make sure that a is in [ 1, n - 1 ]. a = ( a % ( n - 1 ) ) + 1; // Check to see if a is a witness. if ( witness( a, n ) ) return false; // n is definitely composite. } return true; // n is almost surely prime. } // Return a randomly generated, large prime number using the // Miller-Rabin primality test. inline bigint find_prime( const bigint& r ) { char p_str[ HALF_STR_SIZE + 1 ]; rand_bitstr( p_str, HALF_STR_SIZE ); p_str[ HALF_STR_SIZE - 1 ] = '1'; // Force p to be an odd number. bigint p = p_str; #ifdef DEBUG_SYSTEMC assert( ( p > 0 ) && ( p % 2 == 1 ) ); #endif // p is randomly determined. Now, we'll look for a prime in the // vicinity of p. By the prime number theorem, executing the // following loop approximately ln ( 2^NBITS ) iterations should // find a prime. #ifdef DEBUG_SYSTEMC // A very large counter to check against infinite loops. sc_bigint niter = 0; #endif while ( ! miller_rabin( p ) ) { p = ( p + 2 ) % r; #ifdef DEBUG_SYSTEMC assert( ++niter > 0 ); #endif } return p; } // Encode or cipher the message in msg using the RSA public key P=( e, n ). inline bigint cipher( const bigint& msg, const bigint& e, const bigint& n ) { return modular_exp( msg, e, n ); } // Dencode or decipher the message in msg using the RSA secret key S=( d, n ). inline bigint decipher( const bigint& msg, const bigint& d, const bigint& n ) { return modular_exp( msg, d, n ); } // The RSA cipher. inline void rsa( int seed ) { // Generate all 1's in r. char r_str[ HALF_STR_SIZE + 1 ]; max_bitstr( r_str, HALF_STR_SIZE ); bigint r = r_str; #ifdef DEBUG_SYSTEMC assert( r > 0 ); #endif // Initialize the random number generator. cout << "\nRandom number generator seed = " << randomize( seed ) << endl; cout << endl; // Find two large primes p and q. bigint p = find_prime( r ); bigint q = find_prime( r ); #ifdef DEBUG_SYSTEMC assert( ( p > 0 ) && ( q > 0 ) ); #endif // Compute n and ( p - 1 ) * ( q - 1 ) = m. bigint n = p * q; bigint m = ( p - 1 ) * ( q - 1 ); #ifdef DEBUG_SYSTEMC assert( ( n > 0 ) && ( m > 0 ) ); #endif // Find a small odd integer e that is relatively prime to m. bigint e = find_rel_prime( m ); #ifdef DEBUG_SYSTEMC assert( e > 0 ); #endif // Find the multiplicative inverse d of e, modulo m. bigint d = inverse( e, m ); #ifdef DEBUG_SYSTEMC assert( d > 0 ); #endif // Output public and secret keys. cout << "RSA public key P: P=( e, n )" << endl; cout << "e = " << e << endl; cout << "n = " << n << endl; cout << endl; cout << "RSA secret key S: S=( d, n )" << endl; cout << "d = " << d << endl; cout << "n = " << n << endl; cout << endl; // Cipher and decipher a randomly generated message msg. char msg_str[ STR_SIZE + 1 ]; rand_bitstr( msg_str, STR_SIZE ); bigint msg = msg_str; msg %= n; // Make sure msg is smaller than n. If larger, this part // will be a block of the input message. #ifdef DEBUG_SYSTEMC assert( msg > 0 ); #endif cout << "Message to be ciphered = " << endl; cout << msg << endl; bigint msg2 = cipher( msg, e, n ); cout << "\nCiphered message = " << endl; cout << msg2 << endl; msg2 = decipher( msg2, d, n ); cout << "\nDeciphered message = " << endl; cout << msg2 << endl; // Make sure that the original message is recovered. if ( msg == msg2 ) { cout << "\nNote that the original message == the deciphered message, " << endl; cout << "showing that this algorithm and implementation work correctly.\n" << endl; } else { // This case is unlikely. cout << "\nNote that the original message != the deciphered message, " << endl; cout << "showing that this implementation works incorrectly.\n" << endl; } return; } int sc_main( int argc, char *argv[] ) { if ( argc <= 1 ) rsa( -1 ); else rsa( atoi( argv[ 1 ] ) ); return 0; } // End of file systemc-2.3.4/examples/sysc/rsa/Makefile0000644000175000017500000000017014342422106020107 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT = rsa OBJS = $(PROJECT).o include ../../build-unix/Makefile.rules systemc-2.3.4/examples/sysc/simple_perf/0000755000175000017500000000000014342422106020171 5ustar carstencarstensystemc-2.3.4/examples/sysc/simple_perf/test.am0000644000175000017500000000516514342422106021476 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## test.am -- ## Included from a Makefile.am to provide example-specific information ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## Generic example setup ## (should be kept in sync among all test.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: simple_perf ## %C%: simple_perf examples_TESTS += simple_perf/test simple_perf_test_CPPFLAGS = \ $(AM_CPPFLAGS) simple_perf_test_SOURCES = \ $(simple_perf_H_FILES) \ $(simple_perf_CXX_FILES) examples_BUILD += \ $(simple_perf_BUILD) examples_CLEAN += \ simple_perf/run.log \ simple_perf/expected_trimmed.log \ simple_perf/run_trimmed.log \ simple_perf/diff.log examples_FILES += \ $(simple_perf_H_FILES) \ $(simple_perf_CXX_FILES) \ $(simple_perf_BUILD) \ $(simple_perf_EXTRA) examples_DIRS += simple_perf ## example-specific details simple_perf_H_FILES = simple_perf_CXX_FILES = \ simple_perf/simple_perf.cpp # output is randomized across runs #simple_perf_BUILD = \ # simple_perf/golden.log simple_perf_EXTRA = \ simple_perf/simple_perf.sln \ simple_perf/simple_perf.vcxproj \ simple_perf/CMakeLists.txt \ simple_perf/Makefile #simple_perf_FILTER = ## Taf! ## :vim:ft=automake: systemc-2.3.4/examples/sysc/simple_perf/simple_perf.sln0000644000175000017500000000230014342422106023207 0ustar carstencarsten Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_perf", "simple_perf.vcxproj", "{23829CD3-C06B-491E-8A0E-264B3A23FA6F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|Win32.ActiveCfg = Debug|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|Win32.Build.0 = Debug|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|x64.ActiveCfg = Debug|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Debug|x64.Build.0 = Debug|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|Win32.ActiveCfg = Release|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|Win32.Build.0 = Release|Win32 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|x64.ActiveCfg = Release|x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal systemc-2.3.4/examples/sysc/simple_perf/simple_perf.vcxproj0000644000175000017500000002742014342422106024120 0ustar carstencarsten Debug Win32 Debug x64 Release Win32 Release x64 {23829CD3-C06B-491E-8A0E-264B3A23FA6F} simple_perf Win32Proj Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)$(IntDir) $(Configuration)\ true $(ProjectDir)$(IntDir) $(Configuration)\ false $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ true $(ProjectDir)$(IntDir) $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(OutDir)$(ProjectName).pdb Console MachineX86 false $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false Console true true MachineX86 X64 Disabled $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;NOGDI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) true $(IntDir)$(ProjectName).pdb Console MachineX64 X64 $(SYSTEMC_HOME)\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Default false true Level3 ProgramDatabase 4267;4996;%(DisableSpecificWarnings) systemc.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName).exe $(SYSTEMC_HOME)\$(MSVC)\SystemC\$(IntDir);%(AdditionalLibraryDirectories) false $(IntDir)$(ProjectName).pdb Console true true MachineX64 systemc-2.3.4/examples/sysc/simple_perf/simple_perf.cpp0000644000175000017500000001647014342422106023212 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** simple_fifo.cpp -- SystemC 2.0 Performance Modeling Example. This example is derived from the design presented within "An Introduction to System Level Modeling in SystemC 2.0" By Stuart Swan, Cadence Design Systems. Available at www.accellera.org The system being modeled has a producer block that sends characters to a consumer block via a fifo. The fifo will suspend the producer or consumer as necessary to insure all characters are reliably delivered. The consumer block will consume exactly one character every 100 ns unless it is suspended waiting for input from the fifo. The producer block produces between one and 19 characters every 1000 ns unless it is suspended waiting to write to the fifo. On average, the producer block produces one character every 100 ns (unless suspended by the fifo) since a random linear distribution is used for the character count. If the fifo size is sufficiently large, the average transfer time per character will approach 100 ns since the producer and consumer will rarely be blocked. However, as the fifo size decreases, the average transfer time will increase because the producer will sometimes be suspended when it writes (due to a full fifo) and the consumer will sometimes be suspended when it reads (due to an empty fifo). The fifo size can be set via a command line argument when running this program. By default, the fifo size is 10. When the design is simulated, one hundred thousand characters are transferred from the producer to the consumer and then performance statistics are displayed. Using this system level model, determine the size of the fifo needed to sustain: A) An average transfer time of 110 ns per character B) An average transfer time of 105 ns per character Hint: The answer to (A) is between 10 and 20. Original Author: Stuart Swan, Cadence Design Systems, 2001-06-18 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include class write_if : virtual public sc_interface { public: virtual void write(char) = 0; virtual void reset() = 0; }; class read_if : virtual public sc_interface { public: virtual void read(char &) = 0; virtual int num_available() = 0; }; class fifo : public sc_channel, public write_if, public read_if { public: fifo(sc_module_name name, int size_) : sc_channel(name), size(size_) { data = new char[size]; num_elements = first = 0; num_read = max_used = average = 0; last_time = SC_ZERO_TIME; } ~fifo() { delete[] data; cout << endl << "Fifo size is: " << size << endl; cout << "Average fifo fill depth: " << double(average) / num_read << endl; cout << "Maximum fifo fill depth: " << max_used << endl; cout << "Average transfer time per character: " << last_time / num_read << endl; cout << "Total characters transferred: " << num_read << endl; cout << "Total time: " << last_time << endl; } void write(char c) { if (num_elements == size) wait(read_event); data[(first + num_elements) % size] = c; ++ num_elements; write_event.notify(); } void read(char &c){ last_time = sc_time_stamp(); if (num_elements == 0) wait(write_event); compute_stats(); c = data[first]; -- num_elements; first = (first + 1) % size; read_event.notify(); } void reset() { num_elements = first = 0; } int num_available() { return num_elements;} private: char *data; int num_elements, first; sc_event write_event, read_event; int size, num_read, max_used, average; sc_time last_time; void compute_stats() { average += num_elements; if (num_elements > max_used) max_used = num_elements; ++num_read; } }; class producer : public sc_module { public: sc_port out; SC_HAS_PROCESS(producer); producer(sc_module_name name) : sc_module(name) { SC_THREAD(main); } void main() { const char *str = "Visit www.accellera.org and see what SystemC can do for you today!\n"; const char *p = str; int total = 100000; while (true) { int i = 1 + int(19.0 * rand() / RAND_MAX); // 1 <= i <= 19 while (--i >= 0) { out->write(*p++); if (!*p) p = str; -- total; } if (total <= 0) break; wait(1000, SC_NS); } } }; class consumer : public sc_module { public: sc_port in; SC_HAS_PROCESS(consumer); consumer(sc_module_name name) : sc_module(name) { SC_THREAD(main); } void main() { char c; while (true) { in->read(c); wait(100, SC_NS); } } }; class top : public sc_module { public: fifo fifo_inst; producer prod_inst; consumer cons_inst; top(sc_module_name name, int size) : sc_module(name) , fifo_inst("Fifo1", size) , prod_inst("Producer1") , cons_inst("Consumer1") { prod_inst.out(fifo_inst); cons_inst.in(fifo_inst); } }; int sc_main (int argc , char *argv[]) { int size = 10; if (argc > 1) size = atoi(argv[1]); if (size < 1) size = 1; if (size > 100000) size = 100000; top top1("Top1", size); sc_start(); return 0; } systemc-2.3.4/examples/sysc/simple_perf/CMakeLists.txt0000644000175000017500000000352714342422106022740 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # examples/sysc/simple_perf/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### add_executable (simple_perf simple_perf.cpp) target_link_libraries (simple_perf SystemC::systemc) configure_and_add_test (simple_perf) systemc-2.3.4/examples/sysc/simple_perf/Makefile0000644000175000017500000000024214342422106021627 0ustar carstencarsteninclude ../../build-unix/Makefile.config PROJECT := simple_perf SRCS := $(wildcard *.cpp) OBJS := $(SRCS:.cpp=.o) include ../../build-unix/Makefile.rules systemc-2.3.4/examples/build-unix/0000755000175000017500000000000014342422106016763 5ustar carstencarstensystemc-2.3.4/examples/build-unix/Makefile.config0000644000175000017500000000432114342422106021667 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.config -- ## ## Original Author: Philipp A. Hartmann, OFFIS ## ## *************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## guess config from environment ## Variable that points to SystemC installation path SYSTEMC_HOME?=../../../.. ## Select the target architecture #TARGET_ARCH = linux ## Select the architecture suffix, if necessary #ARCH_SUFFIX = -$(TARGET_ARCH) ## How to instruct the dynamic linker to locate the SystemC library #LDFLAG_RPATH = -Wl,-rpath= # default compiler flags FLAGS_COMMON = -g -Wall FLAGS_STRICT = -pedantic -Wno-long-long FLAGS_WERROR = -Werror # combined flags #SYSTEMC_CXXFLAGS = $(FLAGS_COMMON) $(FLAGS_STRICT) $(FLAGS_WERROR) # Additional preprocessor symbols #SYSTEMC_DEFINES = # Explicit location of the SystemC headers #SYSTEMC_INC_DIR = $(SYSTEMC_HOME)/include # Explicit location if the SystenC library #SYSTEMC_LIB_DIR = $(SYSTEMC_HOME)/lib$(ARCH_SUFFIX) # Run with valgrind #VALGRIND=valgrind --log-file-exactly=valgrind.log systemc-2.3.4/examples/build-unix/Makefile.rules0000644000175000017500000001214114342422106021553 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.rules -- simple generic SystemC example build rules ## ## Include this file from your own Makefile to obtain a simple build ## environment. You need to set at least the variables ## PROJECT - name of the application ## OBJS - list of required object files ## to make things work. ## ## The environment is assumed to be set up from Makefile.config file and ## the main example Makefile. ## ## Original Author: Philipp A. Hartmann, OFFIS ## ## *************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## *************************************************************************** ## complete config, if not set from Makefile.config ## Variable that points to SystemC installation path ## needs to be set, fallback to SYSTEMC otherwise SYSTEMC_HOME?=$(SYSTEMC) ## Select the TARGET_ARCH needs to be set # TARGET_ARCH ?= linux ## default values for additional setup variables ifneq (,$(strip $(TARGET_ARCH))) ARCH_SUFFIX ?= -$(TARGET_ARCH) endif LDFLAG_RPATH ?= -Wl,-rpath= SYSTEMC_INC_DIR ?= $(SYSTEMC_HOME)/include SYSTEMC_LIB_DIR ?= $(SYSTEMC_HOME)/lib$(ARCH_SUFFIX) SYSTEMC_DEFINES ?= SYSTEMC_CXXFLAGS ?= $(FLAGS_COMMON) $(FLAGS_STRICT) $(FLAGS_WERROR) SYSTEMC_LDFLAGS ?= -L $(SYSTEMC_LIB_DIR) \ $(LDFLAG_RPATH)$(SYSTEMC_LIB_DIR) SYSTEMC_LIBS ?= -lsystemc -lm ## Add 'PTHREADS=1' to command line for a pthreads build ## (should not be needed in most cases) ifdef PTHREADS SYSTEMC_CXXFLAGS += -pthread SYSTEMC_LIBS += -lpthread endif ## *************************************************************************** ## example defaults ## - basic configuration should be set from Makefile.config FILTER ?= cat INCDIR += -I. -I.. -I$(SYSTEMC_INC_DIR) LIBDIR += -L. -L.. CXXFLAGS += $(CFLAGS) $(SYSTEMC_CXXFLAGS) $(INCDIR) $(SYSTEMC_DEFINES) LDFLAGS += $(CFLAGS) $(SYSTEMC_CXXFLAGS) $(LIBDIR) $(SYSTEMC_LDFLAGS) LIBS += $(SYSTEMC_LIBS) $(EXTRA_LIBS) # "real" Makefile needs to set PROJECT ifeq (,$(strip $(PROJECT))) $(error PROJECT not set. Cannot build.) endif # basic check for SystemC directory ifeq (,$(wildcard $(SYSTEMC_HOME)/.)) $(error SYSTEMC_HOME [$(SYSTEMC_HOME)] is not present. \ Please update Makefile.config) endif ifeq (,$(wildcard $(SYSTEMC_INC_DIR)/systemc.h)) $(error systemc.h [$(SYSTEMC_INC_DIR)] not found. \ Please update Makefile.config) endif ifeq (,$(wildcard $(SYSTEMC_LIB_DIR)/libsystemc*)) $(error SystemC library [$(SYSTEMC_LIB_DIR)] not found. \ Please update Makefile.config) endif ## *************************************************************************** ## build rules .SUFFIXES: .cc .cpp .o .x GOLDEN?=$(firstword $(wildcard ../results/expected.log golden.log)) EXEEXT?=.x EXE := $(PROJECT)$(EXEEXT) all: announce build announce: @if test x1 = x$(FLAG_BATCH) ; then \ echo; echo "*** $(PROJECT):"; echo; \ fi check: announce all @if test -f "$(INPUT)" ; then INPUT="< $(INPUT)" ; fi ; \ eval "$(VALGRIND) ./$(EXE) $(ARGS) $${INPUT} > run.log" @cat run.log | grep -v "stopped by user" | \ $(FILTER) | awk '{if($$0!="") print $$0}' > run_trimmed.log @if test -f "$(GOLDEN)" ; then \ cat "$(GOLDEN)" | grep -v "stopped by user" | \ awk '{if($$0!="") print $$0}' > ./expected_trimmed.log ; \ diff ./run_trimmed.log ./expected_trimmed.log > diff.log 2>&1 ; \ if [ -s diff.log ]; then \ echo "***ERROR:"; cat diff.log; \ else echo "OK"; fi \ fi run: announce all @if test -f "$(INPUT)" ; then INPUT="< $(INPUT)" ; fi ; \ eval "./$(EXE) $(ARGS) $${INPUT}" build: announce $(EXE) $(EXE): $(OBJS) $(SYSTEMC_LIB_DIR)/libsystemc.a $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt @test -x $@ .cpp.o: $(CXX) $(CXXFLAGS) -c $< -o $@ .cc.o: $(CXX) $(CXXFLAGS) -c $< -o $@ clean:: announce rm -f $(OBJS) $(EXE) core $(EXTRA_CLEAN) \ run.log run_trimmed.log expected_trimmed.log diff.log ultraclean: announce clean rm -f Makefile.deps *~ Makefile.deps: # $(CXX) $(CXXFLAGS) -M $(SRCS) >> Makefile.deps #include Makefile.deps systemc-2.3.4/examples/build-unix/Makefile0000644000175000017500000000041214342422106020420 0ustar carstencarstenSUBDIRS := $(dir $(wildcard ../sysc/*/Makefile ../sysc/*/*/Makefile)) SUBDIRS += $(wildcard ../tlm/*/build-unix) TARGETS := all build run check clean .PHONY: $(TARGETS) $(TARGETS): %: @set -e ; for i in $(SUBDIRS); do \ $(MAKE) -C $$i FLAG_BATCH=1 $@ ; \ done systemc-2.3.4/Makefile.in0000644000175000017500000007111214342422106015134 0ustar carstencarsten# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(top_srcdir)/docs/sysc/doxygen/Doxyfile.in \ $(top_srcdir)/docs/tlm/doxygen/Doxyfile.in config/ar-lib \ config/config.guess config/config.sub config/depcomp \ config/install-sh config/missing config/ltmain.sh \ $(top_srcdir)/config/ar-lib $(top_srcdir)/config/config.guess \ $(top_srcdir)/config/config.sub \ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ $(top_srcdir)/config/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/ax_check_define.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = docs/sysc/doxygen/Doxyfile \ docs/tlm/doxygen/Doxyfile CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(rootdocdir)" DATA = $(rootdoc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CXXFLAGS = @DEBUG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPLICIT_LPTHREAD = @EXPLICIT_LPTHREAD@ EXTRA_ASFLAGS = @EXTRA_ASFLAGS@ EXTRA_CFLAGS = @EXTRA_CFLAGS@ EXTRA_CXXFLAGS = @EXTRA_CXXFLAGS@ EXTRA_LDFLAGS = @EXTRA_LDFLAGS@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAG_RPATH = @LDFLAG_RPATH@ LIBCONFIG_DEFINES = @LIBCONFIG_DEFINES@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_ARCH_SUFFIX = @LIB_ARCH_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGCONFIG_CFLAGS = @PKGCONFIG_CFLAGS@ PKGCONFIG_DEFINES = @PKGCONFIG_DEFINES@ PKGCONFIG_LDPRIV = @PKGCONFIG_LDPRIV@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT_ARCH = @QT_ARCH@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TARGET_ARCH = @TARGET_ARCH@ TLM_PACKAGE_VERSION = @TLM_PACKAGE_VERSION@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ examplesdir = @examplesdir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libarchdir = @libarchdir@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ rootdocdir = @rootdocdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # support local addition of automake macros ACLOCAL_AMFLAGS = -I config SUBDIRS = \ src \ examples DOC_FILES = \ AUTHORS.md \ NOTICE \ CONTRIBUTING.md \ INSTALL.md \ LICENSE \ README.md \ RELEASENOTES \ cmake/INSTALL_USING_CMAKE EXTRA_DIST = \ $(DOC_FILES) \ \ config/bootstrap \ config/test.sh.in \ \ CMakeLists.txt \ cmake/SystemCLanguageConfig.cmake.in \ cmake/SystemCTLMConfig.cmake.in \ cmake/run_test.cmake \ \ msvc10/SystemC/SystemC.sln \ msvc10/SystemC/SystemC.props \ msvc10/SystemC/SystemC.vcxproj \ msvc10/SystemC/SystemC.vcxproj.filters \ msvc10/SystemC/SystemC-core.vcxproj \ msvc10/SystemC/SystemC-core.vcxproj.filters @SEPARATE_INSTALL_TREE_TRUE@rootdoc_DATA = \ @SEPARATE_INSTALL_TREE_TRUE@ $(DOC_FILES) all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): docs/sysc/doxygen/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/docs/sysc/doxygen/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ docs/tlm/doxygen/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/docs/tlm/doxygen/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-rootdocDATA: $(rootdoc_DATA) @$(NORMAL_INSTALL) @list='$(rootdoc_DATA)'; test -n "$(rootdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rootdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rootdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rootdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(rootdocdir)" || exit $$?; \ done uninstall-rootdocDATA: @$(NORMAL_UNINSTALL) @list='$(rootdoc_DATA)'; test -n "$(rootdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rootdocdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(rootdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @SEPARATE_INSTALL_TREE_FALSE@uninstall-hook: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-rootdocDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-rootdocDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) install-am install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-rootdocDATA install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-hook uninstall-rootdocDATA @SEPARATE_INSTALL_TREE_TRUE@uninstall-hook: @SEPARATE_INSTALL_TREE_TRUE@ test ! -d "$(docdir)" || rmdir --ignore-fail-on-non-empty "$(docdir)" @SEPARATE_INSTALL_TREE_TRUE@ test ! -d "$(prefix)" || rmdir --ignore-fail-on-non-empty "$(prefix)" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemc-2.3.4/docs/0000755000175000017500000000000014342422106014015 5ustar carstencarstensystemc-2.3.4/docs/tlm/0000755000175000017500000000000014342422106014611 5ustar carstencarstensystemc-2.3.4/docs/tlm/doxygen/0000755000175000017500000000000014342422106016266 5ustar carstencarstensystemc-2.3.4/docs/tlm/doxygen/Doxyfile.in0000644000175000017500000022501414342422106020405 0ustar carstencarsten# Doxyfile 1.7.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = TLM-2.0 # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @TLM_PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Accellera TLM-2.0 proof-of-concept library" # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = @top_srcdir@/src # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = @top_srcdir@/src # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/src/tlm \ @top_srcdir@/src/tlm_core \ @top_srcdir@/src/tlm_utils # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = tlm \ *.h \ *.hpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = tlm_ #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the # mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = @top_srcdir@/src # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = TLM_DEFINE_FUNCTOR # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = ../../sysc/doxygen/systemc.tag=../../../sysc/doxygen/html # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = tlm.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 2 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES systemc-2.3.4/docs/tlm/tlm_README0000644000175000017500000000523414342422106016351 0ustar carstencarsten========================================== README for TLM-2.0 (part of SystemC 2.3.4) ========================================== This is the proof of concept implementation for the OSCI TLM-2.0 standard, as defined by the IEEE 1666-2011 SystemC Language Reference Manual. ------------------------------------------------------------------------------- IMPORTANT 1. This version of the TLM-2.0 code is version 2.0.3. It has some minor changes compared to the previous version. For details of changes, please refer to the SystemC RELEASENOTES file. ------------------------------------------------------------------------------- Licensing and Copyright See the LICENSE file for SystemC. Installation Please follow the INSTALL instructions for SystemC. Release Notes See the separate SystemC RELEASENOTES file. User Documentation You can find documentation for this release on www.systemc.org A doxygen.in configuration file is available which may be used to build documentation using Doxygen (www.doxygen.org). The TLM library is documented in the IEEE 1666-2011 SystemC Language Reference Manual. This may be obtained by visiting the Accellera Systems Initiative at www.accellera.org. Directory Structure SystemC and TLM code now have a common directory structure. The TLM header files are in the same include directory as the SystemC header files. The previous unit_test directory has been merged into the separate systemc-regressions download, available from www.accellera.org. There are some examples in the folder examples/tlm, and documentation in docs/tlm. Build Support Support for building the examples is provided for 'unix', and 'msvc' (project and make files). Makefiles work hierarchically. 'build' is the default target; 'clean', 'run' (executes built tests/examples) and 'check' (against expected results) targets are also provided. On Unix/Linux/MacOS, the $SYSTEMC_HOME environment variable should be set to point to the SystemC root location; $TARGET_ARCH (or $ARCH_SUFFIX) should be defined such that $SYSTEMC_HOME/lib-$TARGET_ARCH (or lib$ARCH_SUFFIX) is a directory containing the SystemC library. On Windows, the SYSTEMC environment variable should be used. Examples There is a set of examples available under the examples/tlm directory, they illustrate the key features of the TLM-2.0 standard. For more information see the README.txt. Problems Any problems related to the use of this proof-of-concept code can be submitted to the Accellera SystemC TLM community forums at http://forums.accellera.org/forum/14-systemc-tlm-transaction-level-modeling/ systemc-2.3.4/docs/Makefile.am0000644000175000017500000000532714342422106016060 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-20 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.common DOXYGEN=doxygen ## Core documentation (see also root directory) DOC_FILES = \ DEVELOPMENT.md ## ## SystemC documentation ## find sysc -type f -a -not -name "*.in" -printf "\t%p \\\\\n" DOC_FILES += \ sysc/README ## ## TLM-2.0 documentation ## find tlm -type f -a -not -name "*.in" -printf "\t%p \\\\\n" ## DOC_FILES += \ tlm/tlm_README ## **************************************************************************** ## install documentation? if SEPARATE_INSTALL_TREE nobase_doc_DATA = \ $(DOC_FILES) ## Install, but do not distribute Doxygen configuration nobase_doc_DATA += \ sysc/doxygen/Doxyfile \ tlm/doxygen/Doxyfile DOCDIRS = \ sysc/doxygen \ sysc \ tlm/doxygen \ tlm uninstall-hook: test ! -d "$(docdir)" || ( set -e ; cd "$(docdir)" ; \ for dir in $(DOCDIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir --ignore-fail-on-non-empty "$(docdir)" ) endif # SEPARATE_INSTALL_TREE ## add documentation and CMake scripts to distribution EXTRA_DIST += \ $(DOC_FILES) \ CMakeLists.txt doxygen: sysc/doxygen/Doxyfile tlm/doxygen/Doxyfile @(cd sysc/doxygen && $(DOXYGEN)) @(cd tlm/doxygen && $(DOXYGEN)) %/Doxyfile: %/Doxyfile.in (cd $(top_builddir) && $(SHELL) config.status docs/$@) ## Taf! systemc-2.3.4/docs/CMakeLists.txt0000644000175000017500000001217014342422106016556 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # docs/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### set (DOC_FILES DEVELOPMENT.md sysc/README tlm/release/README.txt tlm/tlm_README) foreach (DOC_FILE ${DOC_FILES}) get_filename_component (DOC_INSTALL_PATH ${DOC_FILE} PATH) install (FILES ${DOC_FILE} DESTINATION ${CMAKE_INSTALL_DOCDIR}/${DOC_INSTALL_PATH} COMPONENT doc) endforeach (DOC_FILE ${DOC_FILES}) if (BUILD_SOURCE_DOCUMENTATION) find_package (Doxygen REQUIRED) add_custom_target (doxygen ALL DEPENDS doxygen-sysc doxygen-tlm) # SystemC source code documentation set (PACKAGE_NAME ${PROJECT_NAME}) string(TOLOWER "${PROJECT_NAME}" PACKAGE_TARNAME) set (PACKAGE_VERSION ${SystemCLanguage_VERSION}) set (top_srcdir ${CMAKE_SOURCE_DIR}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/sysc/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/Doxyfile @ONLY) if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html) file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html) endif (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html) set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html PROPERTIES GENERATED 1) add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html/index.html COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/Doxyfile DEPENDS systemc WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen COMMENT "Building the SystemC source code documentation using Doxygen.") add_custom_target (doxygen-sysc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html/index.html) install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/html DESTINATION ${CMAKE_INSTALL_DOCDIR}/sysc/doxygen COMPONENT doc) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/sysc/doxygen/${PACKAGE_TARNAME}.tag DESTINATION ${CMAKE_INSTALL_DOCDIR}/sysc/doxygen COMPONENT doc) # TLM source code documentation set (TLM_PACKAGE_VERSION ${SystemCTLM_VERSION}) set (top_srcdir ${CMAKE_SOURCE_DIR}) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/tlm/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/Doxyfile @ONLY) if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html) file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html) endif (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html) set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html PROPERTIES GENERATED 1) add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html/index.html COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/Doxyfile DEPENDS doxygen-sysc WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen COMMENT "Building the TLM source code documentation using Doxygen.") add_custom_target (doxygen-tlm DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html/index.html) install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/html DESTINATION ${CMAKE_INSTALL_DOCDIR}/tlm/doxygen COMPONENT doc) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/tlm/doxygen/tlm.tag DESTINATION ${CMAKE_INSTALL_DOCDIR}/tlm/doxygen COMPONENT doc) endif (BUILD_SOURCE_DOCUMENTATION) systemc-2.3.4/docs/sysc/0000755000175000017500000000000014342422106014776 5ustar carstencarstensystemc-2.3.4/docs/sysc/README0000644000175000017500000000056614342422106015665 0ustar carstencarsten========================================== README for the SystemC 2.3.4 documentation ========================================== This directory contains doxygen/ A folder containing a command file (template) for doxygen which may be used to generate browseable documentation of the SystemC class library. Please see www.doxygen.org for usage. README - this file. systemc-2.3.4/docs/sysc/doxygen/0000755000175000017500000000000014342422106016453 5ustar carstencarstensystemc-2.3.4/docs/sysc/doxygen/Doxyfile.in0000644000175000017500000022502314342422106020572 0ustar carstencarsten# Doxyfile 1.7.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Accellera @PACKAGE_NAME@ proof-of-concept library" # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = @top_srcdir@/src # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = @top_srcdir@/src # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/src/systemc \ @top_srcdir@/src/systemc.h \ @top_srcdir@/src/sysc # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = systemc \ *.h \ *.hpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */sysc/packages/* \ */sysc/qt/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = sc_ #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the # mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = @top_srcdir@/src # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @PACKAGE_TARNAME@.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 2 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES systemc-2.3.4/docs/DEVELOPMENT.md0000644000175000017500000005317114342422106016130 0ustar carstencarstenDevelopment process of the Accellera SystemC implementation =========================================================== This document focuses on the technical aspects related to the development of the SystemC implementation. Legal and formal procedures are documented at http://accellera.org/about/policies-and-procedures. --------------------------------------------------------------------- Repository setup --------------------------------------------------------------------- The central source code repository of the Accellera SystemC implementation is hosted in two [Git][6] repositories at [GitHub](http://github.com). The main repositories are **private** to the [`OSCI-WG` organization][7] and can be found at: * https://github.com/OSCI-WG/systemc (core SystemC library) * https://github.com/OSCI-WG/systemc-regressions (regression test suite) A read-only, **public** copy of these repositories can be found at * https://github.com/accellera-official/systemc (core SystemC library) * https://github.com/accellera-official/systemc-regressions (regression test suite) Members of the GitHub [`OSCI-WG` organization][7] with the necessary access rights can clone the repositories via SSH from the locations git clone -o osci-wg git@github.com:OSCI-WG/systemc.git git clone -o osci-wg git@github.com:OSCI-WG/systemc-regressions.git respectively. To obtain access to the repositories and the GitHub organization in general, LWG members can contact the LWG chairs at including their GitHub account name. > *Note:* > Using an explicit name of the 'remote' (`-o osci-wg`) is recommended > to allow using the default remote name `origin` for a personal fork > where you can push your changes by default, see [below](#basic-branch-setup). Comprehensive documentation about [Git][6], a distributed version control system, can be found in the [Pro Git book][8], also available online. Since Git is 'distributed', it is a very natural choice for the distributed development process needed for collaboratively evolving the reference implementation of SystemC. ### Relationship between private and public repositories New features and enhancements are developed by the LWG in the **private** repositories, see below. Please check the [CONTRIBUTING][9] guidelines how to join Accellera and its working groups to contribute to the development of SystemC. The **public** repositories are typically updated only together with public releases of the Accellera SystemC reference implementation. In-between public releases, bug fixes may be published via the public repositories as well. In this case, the updated `public` branch including the new bug fixes, is then merged back into the `master` branch to make sure the fix is part of the next release. ### Creating a personal fork In order to contribute changes to the different repositories, it is recommended to create personal (or company-based) [forks][10] of the repositories on GitHub and push the proposed changes (bugfixes, features, ...) there. These forks are also only accessible to members of the [`OSCI-WG` GitHub organization][7]. Details of the intended work-flow are described in the next [section](#basic-branch-setup). It is convenient to add this GitHub fork as a remote to your local clone of the repository: cd / git remote add origin git@github.com:/.git git branch --set-upstream master origin/master Any changes can then be pushed to GitHub using: git push [options] [] [...] * If you omit the ``, the default destination is the remote of the current branch (or `origin`). * The `` basically follows the format `:`, or just ``, if both are the same. * Omitting the `` pushes all branches with 'matching' remote branches to the repository. A basic cheat sheet containing the an overview of the general Git commands and workflow can be found [online][11]. [6]: http://git-scm.com "Git version control system" [7]: https://github.com/osci-wg "Accellera WG GitHub organization" [8]: http://git-scm.com/book "Pro Git Book" [9]: ../CONTRIBUTING.md "Contriubting to SystemC" [10]: https://help.github.com/articles/fork-a-repo [11]: http://zrusin.blogspot.de/2007/09/git-cheat-sheet.html "Git Cheat Sheet" --------------------------------------------------------------------- Development flow --------------------------------------------------------------------- ### Basic branch setup The main idea is to have two main branches, one for the development, one for the releases. * **master** The latest and greatest `HEAD` of the LWG development. This is where all the new features and fixes go. * **public** The latest revision pushed to the public repository of SystemC. This may also include changes, that are not yet part of an official release package. * **release** This branch is used to create the release tarballs, both internal and public snapshots, typically based on the `public` branch. For the **regressions**, the `release` branch is more or less just a pointer to the latest revision of a snapshot (or release). It is still useful to keep a named branching point, in case of required hotfixes. For the **core library**, the `release` branch is to be different from the `master` branch. The idea is to fully track the contents of the released tarball. This requires the following changes compared to the `master` branch: - The Automake generated files are added to this tree. - Accellera internal files are stripped (`.gitignore`, internal documentation, ...). To prepare a release, the `master` branch would then be merged into the `release` branch, the automake files would be updated (if necessary) and the clean working tree could be used as baseline for the tarball (e.g., via `git-archive(1)`). Details are described in the next section [release management](#release-management). The history of the (core library) repostitory could then look like shown in the following graph (time progresses upwards): time feature master hotfix release branches | | | ^ | | | [master] | | [release] ^ ----- o | | / | o - [systemc-2.3.0.1] | / -- o /| | / / | o | ^ | o-- ... \| | o ... | -------- o - [systemc-2.3.0] | | o .../ | | o \---- o -[public] .. ^ \ \| | | ------- o o (internal snapshot) | ... | ^ o - [systemc-2.2.0] It should usually be sufficient to keep the two branches `master` and `release`, and cherry-pick hotfixes for emergency releases directly on top of the `release` branch. For convenience, an additional `public` branch could be used to mark the branching point for the last `release`. If more sophisticated version branches are needed, a development model similar to the well-known ["successful branching model"][12] can be deployed. Not all aspects of this model are expected to be needed for the SystemC implementation, as we usually maintain only a single (i.e., the latest) public release of the kernel. [12]: http://nvie.com/posts/a-successful-git-branching-model/ "'A successful Git branching model' by Vincent Driessen" ### Adding a feature (set) The development of a new contribution in form of a feature or a complex bug fix is best done in a new feature branch, which is forked and checked out from the Accellera `master` branch: git checkout -b - master Then code up the new contribution. Please try to facilitate code review by other Accellera members by logically grouping your changes into one commit per addressed issue. For the commit messages, please consider to follow these suggestions: > *Note:* **Commit messages** > > Though not required, it's a good idea to begin the commit message with > a single short (less than 50 character) line summarizing the change, > followed by a blank line and then a more thorough description. Tools > that turn commits into email, for example, use the first line on the > `Subject:` line and the rest of the commit in the body. > *Note:* **Sign-off procedure for commits** > > In order to document that contributions are submitted under the > Apache-2.0 license (see `LICENSE`), a sign-off procedure is > defined in the [contributing guidelines][9]. During the development of the contribution, the `master` branch may receive other commits. In that case, consider rebasing the commits in your feature branch onto the `HEAD` of the `master` branch to keep the history clean. Once the contribution is ready for review by the working group, push the feature branch in your fork of the respective repository on GitHub: git push - Then, send a [pull request][13] either manually or via [GitHub][13] to initiate the code review by the working group members. The summary can be manually generated by git request-pull master git@github.com//.git \ to be sent to the LWG reflector. To review the proposed contributions, one can either browse the repository at GitHub, or add the remote location to a local clone of the repository # add the fork to your set of "remotes" git remote add git@github.com//.git git fetch # examine differences git diff master../ git log / After the contribution is accepted, it will be merged into the working group's `master` branch by the responsible source code maintainer. This should be done with an explicit *merge commit*, to keep the individual contributions separated: git merge --no-ff --log \ / Instead of fully merging the contribution, the maintainer may choose to cherry-pick individual commits or to rebase the feature branch on an intermittently updated `master`. He may also request additional changes to be done by the submitter. In that case, the submitter may need to merge recent changes to the `master` branch into his feature branch before carrying out the requested changes. After the contribution has been fully merged into `master`, the feature branch in the local and Github fork may be deleted. git branch -d # delete local branch git push origin : # delete remote branch [13]: https://help.github.com/articles/using-pull-requests "Using Pull Requests - github:help" ### Maintaining a private (set of) branches Vendors may be interested in maintaining their own, in-house flow to align the internal development of a derived SystemC implementation, while being able to pick fixes from the Accellera Working Group's tree (and hopefully) contributing fixes and features back to the reference implementation. For this purpose members may employ the already mentioned ["successful branching model"][12] by Vincent Driessen. The vendor can branch its own development branch, e.g., `develop-` from the already tracked working group development branch `master` in his clone of the WG repository. The vendor is then able to integrate commits on the WG development branch by merging it into his his vendor development branch. Bug fixes to be contributed back to the WG consist usually of one or several isolated commits. They need to be cherry-picked from the vendor's development branch into a new branch created from the WG development branch: git checkout -b -fix- origin/master git cherry-pick ... Once, the bug fix branch is ready, it should be pushed into the vendor's github account and a pull request created, as described in the [feature branch section](#adding-a-feature-set). A new feature consists usually of a series of commits developed in a dedicated feature branched of the vendor's or WG's development branch. Only in the first case, a rebase on the top of the WG's development branch is necessary. To this end, branch first from the feature branch: git checkout -b - git rebase [-i|--interactive] --onto origin/master develop- Once, the bug fix branch is ready, it should be pushed into the vendor's github account and a pull request created, as described in the [feature branch section](#adding-a-feature-set). --------------------------------------------------------------------- Versioning scheme --------------------------------------------------------------------- In general, the versioning pattern for the SystemC/TLM reference implementation follows the scheme defined in IEEE Std. 1666-2011 (8.6.5), based on `Major.Minor.Patch` numbers and a date (for prereleases). *Note:* In general, no compatibility guarantees are attached to these version numbers, not even for PoC implementation itself, to avoid burdens across different SystemC implementations. The individual parts of the SystemC/TLM versions reported via the corresponding header files should be be handled according to the following criteria: * Update **major version** only together with * IEEE 1666 update * and/or major new language features (e.g. in pre-releases for IEEE update) * Update **minor version** for new Accellera standard release * Significant language extension proposals to be added to next IEEE release * Update **patch version** for minor API changes * Update `SYSTEMC_VERSION` date macro after every pull-request merge * ISO8601 date format (YYYYMMDD) * Done by the PoC maintainers * The versions of SystemC and TLM are incremented separately * SystemC (`src/sysc/kernel/sc_ver.h`) * TLM (`src/tlm_core/tlm_2/tlm_version.h`) *Note:* Changes only affecting documentation, examples, or the build system should not lead to a change of the version (not even `SYSTEMC_VERSION` macro). The overall release date (see [next section](#release-management)) of the PoC release tarball should reflect the date of the archive creation. --------------------------------------------------------------------- Release management --------------------------------------------------------------------- To prepare a new release tarball, the following set steps are to be performed by the maintainer 0. **Prepare the release in the `master` branch** Before creating a release snapshot, the documentation and version information in the package should be updated within the `master` branch. This includes files like - `ChangeLog`, `RELEASENOTES`, `README`, `INSTALL` - [Version headers](#versioning-scheme) During the release preparation phase, other functional changes should not be added/merged to the `master` branch. 1. **Update the `release` branch** # switch to release branch git checkout release # merge master branch git merge --no-commit master git rm # drop new or changed "private" files git commit -m "merge master branch for x.x.x release" 2. **Update the Autoconf (and other auto-generated) files** autoreconf -if # or config/bootstrap git add -u # add changed files git status # check for untracked files git add git commit -m "update autogenerated files for x.x.x release" 3. **Tag the release revision** In order to keep track of the release snapshots, the revisions used for creating the release tarballs should be marked with an *annotated* and optionally signed Git tag. # git tag -a -m " " git tag -a -m "SystemC 2.3.0" 2.3.0 release The tagname should contain the ``, following the versioning rules in IEEE 1666-2011. There are three standard formats: * `x.x.x_beta_` for beta/internal versions * `x.x.x_pub_rev_` for public review versions, and * `x.x.x` for public release versions. > *NOTE:* The tag should be on the `release` branch, to enable the > automated tarball creation in the next step. 4. **Create the release tarball** `git archive` can then be used to create the release tarball. `git describe` can be used to obtain the correct tarball name based on the current tag. PACKAGE="`basename $(git rev-parse --show-toplevel)`" # or directly 'systemc' VERSION="`git describe release`" git archive -o ${PACKAGE}-${VERSION}.tgz \ --prefix=${PACKAGE}-${VERSION}/ release > *NOTE:* Even without a tag, a quick-shot release of the > release branch can be generated this way. 5. **Publish the release** Upload the archive to the LWG area for internal review and push the changes to GitHub. git push osci-wg master release > *NOTE:* The tag needs to be pushed explicitly. > *NOTE:* For each tag pushed to the GitHub repository, the corresponding release archive can be downloaded from GitHub directly via `https://github.com/osci-wg/systemc/releases/tag/`. For **public** releases, update the `public` branch and repeat the same steps for the public repositories: git push osci-wg master:public git push accellera-official master release --------------------------------------------------------------------- Issue tracking --------------------------------------------------------------------- Open issues (bugs, cleanups, features) related to the reference implementation of SystemC/TLM are tracked via GitHub: * (core library) * (regression tests) Some issues might be reported against the public repositories as well: * (core library) * (regression tests) > *NOTE:* For issues discussed in the LWG, the internal issue tracker is preferred. An internal issue clone will be added for publicly reported issues. > *NOTE:* To distinguish between the two different trackers, issue references in commit messages or pull-requests should include the repository (`osci-wg/systemc#`, `accellera-official/systemc#`). Issues are grouped (by using labels) in the following categories for different parts of the implementation: * `core` - SystemC core language, i.e. everything in `sc_core` * `datatypes` - SystemC datatypes, i.e. in `sc_dt` * `tlm` - TLM-1.0, TLM-2.0 * `infrastructure` - build system(s), scripts, etc. Additional labels are used to classify issues according to their severity (10 highest), according to the following guidelines: * `10-critical` Show-stoppers that must be fixed, affects all (or at least most) platforms and violates fundamental specifications for most applications. * `09-serious` At least one of the explicitly supported platforms is affected and causes significant problems for many applications. * `06-medium` Covers an area, where the standard may not be clearly specified. May require changes to external/standard API. * `05-feature` New feature proposal, beyond the current standard. Includes internal (and external, providing adoption by IEEE P1666 WG) API changes. * `04-errata` Inconvenience (errata) for users of many platforms, workaround available. Solution may require internal API changes. * `02-documentation` Documentation inconsistency or insufficiency (e.g. whitepaper unclear or misleading), no code changes. * `01-inconvenience` Inconvenience (workaround available), for some platforms (e.g. users of Visual Studio 2003) * `00-cosmetic` Changes addressing performance or clarity of implementation, no API changes. The discussion on issues usually starts on the LWG reflector or during the LWG meetings. After an initial consensus on the "validity" of the issue, the issue is added to the issue tracking system, a classification is done (including a target milestone), and preferably a responsible person is assigned. --------------------------------------------------------------------- Changelog --------------------------------------------------------------------- * v2.2 (2019-11-10) * Fix link to policies and procedures * Add reference to sign-off process described in `CONTRIBUTING.md` * v2.1 (2019-04-23) * Update information about public repositories and their relation to the WG-internal repositories. * v2.0 (2018-10-01) * Reorganize contents between `CONTRIBUTING.md` and `DEVELOPMENT.md` * Add information about public repositories * Formatting fixes and cleanups * v1.1 (2015-08-23) * Add versioning scheme section * Dropped obsolete `pristine-tar` section * Changed "ASI" to Accellera throughout the document * Updated contact information * v1.0 - Development flow implemented at GitHub (2013-06-20) * Issue tracking documented * v0.9 - Initial proposal to the Accellera SystemC LWG (2012-09-25) * To be discussed during the October LWG phone conference --------------------------------------------------------------------- Authors --------------------------------------------------------------------- * Philipp A. Hartmann * Torsten Maehne * Mark Burton * Minor cosmetics edits, Lynn Bannister systemc-2.3.4/CMakeLists.txt0000644000175000017500000011471114342422106015632 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # CMakeLists.txt -- # Top-level CMake script to configure the SystemC sources and to generate # native Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: Guillaume Delbergue, GreenSocs, 08 Mar, 2016 # Description of Modification: Extract SystemC/TLM version and date # ############################################################################### ############################################################################### # # This CMake build script was developed taking the # original autotools-based build system of the Accellera SystemC distribution # as a reference. However, it is less restrictive regarding the supported # OS/processor/compiler combinations by detecting the actual features provided # by the target (Unix or Windows) platform. On Unix (including OS X), # shared libraries can be built. If the QuickThreads library provides support # for the target processor, it will be automatically used. Otherwise, we rely # on Pthreads on Unix and Fiber on Windows. By default, the SystemC library # installation will follow the GNU standard installation layout so that also # other SystemC libraries (SystemC, SCV, TLM, AMS extensions) can be installed # into the same directory hierarchy (Unix: /opt/systemc/; # Windows: $ENV{ProgramFiles}/SystemC/). The target platform's conventions are # respected meaning usually include/ for the headers and lib/, lib64/, or # lib// for the libraries. The lib-${SystemC_TARGET_ARCH})/ # convention is not used by default, as ${SystemC_TARGET_ARCH} does not # reliably encode the OS/processor/compiler tuple. # # The CMake build scripts are compatible with CMake >=2.8.5 and have been tested # on the following OS/processor/compiler platforms: # # - Linux (GCC, Clang): i386, x86_64 # # - Linux (GCC): aarch64 # # - Mac OS X >= 10.5 (GCC, Clang): i386, x86_64, ppc # # - Windows (MingW32 GCC + optionally MSYS): x86 # # Currently untested, but considered by the build script (based on the # autotools scripts) are: # # - *BSD (GCC, Clang): i386, x86_64 # # - Linux (GCC, Clang): sparc, powerpc # # - Linux (Clang): aarch64 # # - Mac OS X <= 10.5 (GCC): ppc, ppc64 # # - Windows (Cygwin GCC, MingW32 GCC, Visual C++): x86, AMD64 # # - Solaris (GCC and native compiler): sparc # # - HP-UX (GCC and native compiler): hppa # # The build process can be configured through the configuration variables # offered to the user in the CMake console and GUI (ccmake and cmake-gui, # respectively). Each variable is annotated with a brief documentation string. # The most important variables are: # # BUILD_SHARED_LIBS Build shared instead of static libraries # (default: ON if not targetting Windows). # # BUILD_SOURCE_DOCUMENTATION Build source code documentation using Doxygen # (default: OFF). # # CMAKE_BUILD_TYPE Specifies the build type on single-configuration # generators. (default: Release). # # CMAKE_CXX_STANDARD C++ standard to build all targets. Supported # values are 98, 11, 14, and 17. (default: 98) # # CMAKE_CXX_STANDARD_REQUIRED The with CMAKE_CXX_STANDARD selected C++ standard # is a requirement. (default: ON) # # CMAKE_INSTALL_PREFIX Root directory of the SystemC libraries # installation (defaults to $ENV{SYSTEMC_HOME} # if set to an absolute path and otherwise to either # /opt/systemc/ (Unix-like platforms including # CYGWIN), $ENV{ProgramFiles}/SystemC/ (on Windows # systems), or ${CMAKE_INSTALL_PREFIX}/systemc. # # CMAKE_OSX_ARCHITECTURES Architectures for cross-compilation on Mac OS X # (default: empty, i.e., only for the system # processor). # # CMAKE_VERBOSE_MAKEFILE Generate a verbose Makefile (default: OFF). # # DISABLE_ASYNC_UPDATES Disable async_request_update() support. # # DISABLE_COPYRIGHT_MESSAGE Do not print the copyright message when starting # the application. (default: OFF) # # DISABLE_VIRTUAL_BIND Disable the definition of bind() member # functions of ports and exports as "virtual", # which is incompatible with old TLM library # implementations (< 2.0.2). # # ENABLE_ASSERTIONS Always enable the `sc_assert' expressions # (default: ON) # # ENABLE_EARLY_MAXTIME_CREATION Allow creation of sc_time objects with a value # of sc_max_time() before finalizing the time # resolution. # # ENABLE_IMMEDIATE_SELF_NOTIFICATIONS Enable immediate self-notification of # processes, which is no longer supported due to # changes in IEEE Std 1666-2011 (see # sc_event::notify, 5.10.6). # # ENABLE_PHASE_CALLBACKS Enable the simulation phase callbacks (experimental). # # ENABLE_PHASE_CALLBACKS_TRACING Enable usage of the (experimental) simulation # phase callbacks for the implementation of # sc_trace(). # # ENABLE_PTHREADS Use POSIX threads for SystemC processes instead # of QuickThreads on Unix or Fiber on Windows. # # ENABLE_LEGACY_MEM_MGMT Use std::malloc or posix_memalign to allocate the # stack of the coroutines instead of mmap. ASAN will # not work with this. # # OVERRIDE_DEFAULT_STACK_SIZE Define the default stack size used for SystemC # (thread) processes. (> 0) # # SystemC_TARGET_ARCH Target architecture according to the # Accellera SystemC conventions set either from # $ENV{SYSTEMC_TARGET_ARCH}, $ENV{SYSTEMC_ARCH}, # or detected by CMake. # # INSTALL_TO_LIB_BUILD_TYPE_DIR Install the libraries to a # lib-${CMAKE_BUILD_TYPE}/ to enable parallel # installation of the different build variants. # (default: OFF) # # INSTALL_TO_LIB_TARGET_ARCH_DIR Install the libraries to lib- # to facilitate linking applications, which # build systems assume to find SystemC in # lib-. (default: OFF) # # INSTALL_LIB_TARGET_ARCH_SYMLINK On Unix, install a symlink lib- # to lib-${CMAKE_BUILD_TYPE} facilitating the # linking of user code, which build system assumes # to find the SystemC libraries under # lib-. (default: OFF) # # Other configuration variables will be proposed by CMake depending on the OS # and detected processor, compiler, and libraries. For more information, please # refer to the CMake documentation or . # ############################################################################### # # TODO: # # - Enable the compilation of SystemC as a DLL on Windows! To make it work, the # SystemC library has to be at least split into libsystemc-core.dll and a # static libsystemc.lib. # # - Check whether preprocessor definitions WIN32, _CONSOLE, _LIB, _DEBUG, NDEBUG, # and NOGDI are necessary on WIN32 platforms (MSVC and MinGW). # # - Turn on more compiler warnings by default once SystemC is supposed to # compile without any warnings on recent compiler versions. Currently, the # compiler warning flags are set to reduce the number of generated compiler # warnings (especially with recent Clang versions, e.g., Apple Clang 6.0) to # an acceptable amount. With the chosen flags, the SystemC library compiles # without warnings, but some examples still produce warnings. # # - Test on as many different hardware / OS platforms as possible. # # - Configure and install systemc.pc and tlm.pc for pkg-config # ############################################################################### cmake_minimum_required (VERSION 3.1) cmake_policy(SET CMP0001 NEW) project (SystemCLanguage CXX C) set(SystemCLanguage_VERSION_FILE "${PROJECT_SOURCE_DIR}/src/sysc/kernel/sc_ver.h") if(EXISTS ${SystemCLanguage_VERSION_FILE}) file(READ ${SystemCLanguage_VERSION_FILE} SYSTEMC_VERSION_FILE_CONTENT) string(REGEX MATCH "SC_VERSION_MAJOR[ \t]+([0-9]+)" SystemCLanguage_VERSION_MAJOR ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCLanguage_VERSION_MAJOR ${SystemCLanguage_VERSION_MAJOR}) string(REGEX MATCH "SC_VERSION_MINOR[ \t]+([0-9]+)" SystemCLanguage_VERSION_MINOR ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCLanguage_VERSION_MINOR ${SystemCLanguage_VERSION_MINOR}) string(REGEX MATCH "SC_VERSION_PATCH[ \t]+([0-9]+)" SystemCLanguage_VERSION_PATCH ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCLanguage_VERSION_PATCH ${SystemCLanguage_VERSION_PATCH}) string(REGEX MATCH "SC_IS_PRERELEASE[ \t]+([0-9]+)" SystemCLanguage_VERSION_IS_PRERELEASE ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCLanguage_VERSION_IS_PRERELEASE ${SystemCLanguage_VERSION_IS_PRERELEASE}) string(REGEX MATCH "SC_VERSION_PRERELEASE[ \t]+\"([^\".]+)\"" SystemCLanguage_VERSION_PRERELEASE ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX REPLACE "(.*)\"(.*)\"" "\\2" SystemCLanguage_VERSION_PRERELEASE ${SystemCLanguage_VERSION_PRERELEASE}) string(REGEX MATCH "SYSTEMC_VERSION[ \t]+([0-9]+)" SystemCLanguage_VERSION_RELEASE_DATE ${SYSTEMC_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCLanguage_VERSION_RELEASE_DATE ${SystemCLanguage_VERSION_RELEASE_DATE}) else(EXISTS ${SystemCLanguage_VERSION_FILE}) message (FATAL_ERROR "Unable to read SystemC version file") endif(EXISTS ${SystemCLanguage_VERSION_FILE}) set (SystemCLanguage_VERSION "${SystemCLanguage_VERSION_MAJOR}.${SystemCLanguage_VERSION_MINOR}.${SystemCLanguage_VERSION_PATCH}") if (SystemCLanguage_VERSION_IS_PRERELEASE) set (SystemCLanguage_VERSION "${SystemCLanguage_VERSION}_${SystemCLanguage_VERSION_PRERELEASE}_${SystemCLanguage_VERSION_RELEASE_DATE}") endif (SystemCLanguage_VERSION_IS_PRERELEASE) set (SystemCLanguage_SOVERSION "${SystemCLanguage_VERSION_MAJOR}.${SystemCLanguage_VERSION_MINOR}") set(SystemCTLM_VERSION_FILE "${PROJECT_SOURCE_DIR}/src/tlm_core/tlm_2/tlm_version.h") if(EXISTS ${SystemCTLM_VERSION_FILE}) file(READ ${SystemCTLM_VERSION_FILE} SystemCTLM_VERSION_FILE_CONTENT) string(REGEX MATCH "TLM_VERSION_MAJOR[ \t]+([0-9]+)" SystemCTLM_VERSION_MAJOR ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_MAJOR ${SystemCTLM_VERSION_MAJOR}) string(REGEX MATCH "TLM_VERSION_MINOR[ \t]+([0-9]+)" SystemCTLM_VERSION_MINOR ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_MINOR ${SystemCTLM_VERSION_MINOR}) string(REGEX MATCH "TLM_VERSION_PATCH[ \t]+([0-9]+)" SystemCTLM_VERSION_PATCH ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_PATCH ${SystemCTLM_VERSION_PATCH}) string(REGEX MATCH "TLM_IS_PRERELEASE[ \t]+([0-9]+)" SystemCTLM_VERSION_IS_PRERELEASE ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_IS_PRERELEASE ${SystemCTLM_VERSION_IS_PRERELEASE}) string(REGEX MATCH "TLM_VERSION_PRERELEASE[ \t]+\"([^\".]+)\"" SystemCTLM_VERSION_PRERELEASE ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX REPLACE "(.*)\"(.*)\"" "\\2" SystemCTLM_VERSION_PRERELEASE ${SystemCTLM_VERSION_PRERELEASE}) string(REGEX MATCH "TLM_VERSION_RELEASE_YEAR[ \t]+\"([0-9]+)\"" SystemCTLM_VERSION_RELEASE_YEAR ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_RELEASE_YEAR ${SystemCTLM_VERSION_RELEASE_YEAR}) string(REGEX MATCH "TLM_VERSION_RELEASE_MONTH[ \t]+\"([0-9]+)\"" SystemCTLM_VERSION_RELEASE_MONTH ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_RELEASE_MONTH ${SystemCTLM_VERSION_RELEASE_MONTH}) string(REGEX MATCH "TLM_VERSION_RELEASE_DAY[ \t]+\"([0-9]+)\"" SystemCTLM_VERSION_RELEASE_DAY ${SystemCTLM_VERSION_FILE_CONTENT}) string(REGEX MATCH "([0-9]+)" SystemCTLM_VERSION_RELEASE_DAY ${SystemCTLM_VERSION_RELEASE_DAY}) else(EXISTS ${SystemCTLM_VERSION_FILE}) message(FATAL_ERROR "Unable to read TLM version file") endif(EXISTS ${SystemCTLM_VERSION_FILE}) set (SystemCTLM_VERSION_RELEASE_DATE "${SystemCTLM_VERSION_RELEASE_YEAR}${SystemCTLM_VERSION_RELEASE_MONTH}${SystemCTLM_VERSION_RELEASE_DAY}") set (SystemCTLM_VERSION "${SystemCTLM_VERSION_MAJOR}.${SystemCTLM_VERSION_MINOR}.${SystemCTLM_VERSION_PATCH}") if (TLM_IS_PRERELEASE) set (SystemCTLM_VERSION "${SystemCTLM_VERSION}_${SystemCTLM_VERSION_PRERELEASE}_${SystemCTLM_VERSION_RELEASE_DATE}") endif (TLM_IS_PRERELEASE) set (SystemCTLM_SOVERSION "${SystemCTLM_VERSION_MAJOR}.${SystemCTLM_VERSION_MINOR}") ############################################################################### # Build options ############################################################################### if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: empty, Debug, Release, RelWithDebInfo, MinSizeRel." FORCE) endif (NOT CMAKE_BUILD_TYPE) set (CMAKE_CXX_STANDARD 98 CACHE STRING "C++ standard to build all targets. Supported values are 98, 11, 14, and 17.") set (CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "The with CMAKE_CXX_STANDARD selected C++ standard is a requirement.") mark_as_advanced (CMAKE_CXX_STANDARD_REQUIRED) if (NOT (WIN32 OR CYGWIN)) option (BUILD_SHARED_LIBS "Build shared libraries." ON) else (NOT (WIN32 OR CYGWIN)) option (BUILD_SHARED_LIBS "Build shared libraries." OFF) endif (NOT (WIN32 OR CYGWIN)) if (BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN)) message (WARNING "The compilation of SystemC as a DLL on Windows is currently not supported!") set (BUILD_SHARED_LIBS CACHE BOOL "Build shared libraries." OFF FORCE) endif (BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN)) option (BUILD_SOURCE_DOCUMENTATION "Build source documentation with Doxygen." OFF) option (DISABLE_ASYNC_UPDATES "Disable async_request_update() support." OFF) option (DISABLE_COPYRIGHT_MESSAGE "Do not print the copyright message when starting the application." OFF) option (DISABLE_VCD_SCOPES "Put all traces in a single dummy scope. For compatibility with SystemC 2.3.1." OFF) option (DISABLE_VIRTUAL_BIND "Disable the definition of bind() member functions of ports and exports as \"virtual\", which is incompatible with old TLM library implementations (< 2.0.2)." OFF) option (ENABLE_ASSERTIONS "Always enable the `sc_assert' expressions." ON) option (ENABLE_EARLY_MAXTIME_CREATION "Allow creation of sc_time objects with a value of sc_max_time() before finalizing the time resolution." ON) option (ENABLE_IMMEDIATE_SELF_NOTIFICATIONS "Enable immediate self-notification of processes, which is no longer supported due to changes in IEEE Std 1666-2011 (see sc_event::notify, 5.10.6)." OFF) option (ENABLE_PHASE_CALLBACKS "Enable the simulation phase callbacks (experimental)." OFF) option (ENABLE_PHASE_CALLBACKS_TRACING "Enable the use of the (experimental) simulation phase callbacks for the sc_trace() implementation." ON) option (ENABLE_PTHREADS "Use POSIX threads for SystemC processes instead of QuickThreads on Unix or Fiber on Windows." OFF) option (INSTALL_TO_LIB_BUILD_TYPE_DIR "Install the libraries to lib-${CMAKE_BUILD_TYPE} to enable parallel installation of the different build variants. (default: OFF)" OFF) option (ENABLE_LEGACY_MEM_MGMT "Use of std::malloc or posix_memalign instead of mmap to allocate coroutine stack. Breaks ASAN." OFF) if (NOT INSTALL_TO_LIB_BUILD_TYPE_DIR) option (INSTALL_TO_LIB_TARGET_ARCH_DIR "Install the libraries to lib- to facilitate linking applications, which build systems assume to find SystemC in lib-. (default: OFF)" OFF) else (NOT INSTALL_TO_LIB_BUILD_TYPE_DIR) unset (INSTALL_TO_LIB_TARGET_ARCH_DIR CACHE) endif (NOT INSTALL_TO_LIB_BUILD_TYPE_DIR) if (CMAKE_HOST_UNIX AND NOT INSTALL_TO_LIB_TARGET_ARCH_DIR) option (INSTALL_LIB_TARGET_ARCH_SYMLINK "Install a symlink lib- to lib-${CMAKE_BUILD_TYPE} facilitating the linking of user code, which build system assumes to find the SystemC libraries under lib-." OFF) else (CMAKE_HOST_UNIX AND NOT INSTALL_TO_LIB_TARGET_ARCH_DIR) unset (INSTALL_LIB_TARGET_ARCH_SYMLINK CACHE) endif (CMAKE_HOST_UNIX AND NOT INSTALL_TO_LIB_TARGET_ARCH_DIR) set (OVERRIDE_DEFAULT_STACK_SIZE 0 CACHE STRING "Define the default stack size used for SystemC (thread) processes. (> 0)") if (OVERRIDE_DEFAULT_STACK_SIZE LESS 0) message (SEND_ERROR "Negative default stack size requested for SystemC (thread) processes.") endif (OVERRIDE_DEFAULT_STACK_SIZE LESS 0) mark_as_advanced(DISABLE_ASYNC_UPDATES DISABLE_COPYRIGHT_MESSAGE DISABLE_VIRTUAL_BIND ENABLE_ASSERTIONS ENABLE_EARLY_MAXTIME_CREATION ENABLE_IMMEDIATE_SELF_NOTIFICATIONS ENABLE_PHASE_CALLBACKS ENABLE_PHASE_CALLBACKS_TRACING OVERRIDE_DEFAULT_STACK_SIZE DISABLE_VCD_SCOPES) ############################################################################### # Set SystemC_TARGET_ARCH depending on OS and processor type ############################################################################### message (STATUS "Checking OS and processor type.") if (APPLE) list (LENGTH CMAKE_OSX_ARCHITECTURES N_OSX_ARCHITECTURES) endif (APPLE) if (NOT APPLE OR (APPLE AND (N_OSX_ARCHITECTURES LESS 2))) if (APPLE) if (N_OSX_ARCHITECTURES EQUAL 1) message (STATUS "The target architecture will be passed explicitly to the Apple compiler.") set (CMAKE_REQUIRED_FLAGS "-arch ${CMAKE_OSX_ARCHITECTURES}") endif (N_OSX_ARCHITECTURES EQUAL 1) unset (HAS__i386_DEFINED CACHE) unset (HAS__x86_64__DEFINED CACHE) unset (HAS__ppc__DEFINED CACHE) endif (APPLE) include (CheckSymbolExists) check_symbol_exists (__LP64__ "" HAS__LP64__DEFINED) check_symbol_exists (__sparc "" HAS__sparc_DEFINED) check_symbol_exists (__sparc__ "" HAS__sparc__DEFINED) check_symbol_exists (__hppa "" HAS__hppa_DEFINED) check_symbol_exists (__x86_64__ "" HAS__x86_64__DEFINED) check_symbol_exists (__i386 "" HAS__i386_DEFINED) check_symbol_exists (__aarch64__ "" HAS__aarch64__DEFINED) check_symbol_exists (__ppc__ "" HAS__ppc__DEFINED) check_symbol_exists (__powerpc "" HAS__powerpc_DEFINED) endif (NOT APPLE OR (APPLE AND (N_OSX_ARCHITECTURES LESS 2))) # Set SystemC_TARGET_ARCH according to the detected # OS/processor/compiler platform if (NOT SystemC_TARGET_ARCH) if ($ENV{SYSTEMC_TARGET_ARCH}) message (STATUS "Using SYSTEMC_TARGET_ARCH from the environment.") set (_TARGET_ARCH $ENV{SYSTEMC_TARGET_ARCH}) elseif (APPLE) if (N_OSX_ARCHITECTURES GREATER 1) set (_TARGET_ARCH "macosxuniversal") elseif (HAS__i386_DEFINED) set (_TARGET_ARCH "macosx") elseif (HAS__x86_64__DEFINED) set (_TARGET_ARCH "macosx64") elseif (HAS__ppc__DEFINED) set (_TARGET_ARCH "macosxppc") elseif (HAS__ppc64__DEFINED) set (_TARGET_ARCH "macosxppc64") else (HAS__i386_DEFINED) set (_TARGET_ARCH "macosxunknown") endif (N_OSX_ARCHITECTURES GREATER 1) elseif (UNIX AND CMAKE_SYSTEM_NAME STREQUAL "Linux") if (HAS__i386_DEFINED) set (_TARGET_ARCH "linux") elseif (HAS__x86_64__DEFINED) set (_TARGET_ARCH "linux64") elseif (HAS__aarch64__DEFINED) set (_TARGET_ARCH "linuxaarch64") elseif (HAS__powerpc_DEFINED) # Untested platform. set (_TARGET_ARCH "linuxppc") elseif (HAS__sparc_DEFINED OR HAS__sparc__DEFINED) # Untested platform. set (_TARGET_ARCH "linuxsparc") else (HAS__i386_DEFINED) # Untested platform. set (_TARGET_ARCH "linuxunknown") endif (HAS__i386_DEFINED) elseif (UNIX AND CMAKE_SYSTEM_NAME MATCHES ".*BSD") if (HAS__i386_DEFINED) set (_TARGET_ARCH "bsd") elseif (HAS__x86_64__DEFINED) set (_TARGET_ARCH "bsd64") else (HAS__i386_DEFINED) # Untested platform. set (_TARGET_ARCH "bsdunknown") endif (HAS__i386_DEFINED) elseif (UNIX AND CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND (HAS__sparc_DEFINED OR HAS__sparc__DEFINED)) # Untested platform. set (_TARGET_ARCH "sparcOS5") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set (_TARGET_ARCH "gcc${_TARGET_ARCH}") endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") elseif (UNIX AND CMAKE_SYSTEM_NAME STREQUAL "HP-UX" AND HAS__hppa_DEFINED) # Untested platform. set (_TARGET_ARCH "hpux11") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set (_TARGET_ARCH "gcc${_TARGET_ARCH}") endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if (HAS__LP64__DEFINED) set (_TARGET_ARCH "${_TARGET_ARCH}64") endif (HAS__LP64__DEFINED) elseif (MSVC) set (_TARGET_ARCH "msvc") if (CMAKE_CL_64) set (_TARGET_ARCH "${_TARGET_ARCH}64") endif (CMAKE_CL_64) elseif (CYGWIN) if (HAS__i386_DEFINED) set (_TARGET_ARCH "cygwin") elseif (HAS__x86_64__DEFINED) set (_TARGET_ARCH "cygwin64") else (HAS__i386_DEFINED) set (_TARGET_ARCH "cygwinunknown") endif (HAS__i386_DEFINED) elseif (WIN32 AND ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) # MinGW platform, as CYGWIN already has been handled if (HAS__i386_DEFINED) set (_TARGET_ARCH "mingw") elseif (HAS__x86_64__DEFINED) set (_TARGET_ARCH "mingw64") else (HAS__i386_DEFINED) set (_TARGET_ARCH "mingwunknown") endif (HAS__i386_DEFINED) else ($ENV{SYSTEMC_TARGET_ARCH}) # Unknown platform, so guess a SystemC target architecture value. string (TOLOWER "${CMAKE_SYSTEM_NAME}${CMAKE_PROCESSOR_NAME}" _TARGET_ARCH) endif ($ENV{SYSTEMC_TARGET_ARCH}) set (SystemC_TARGET_ARCH ${_TARGET_ARCH} CACHE STRING "SystemC Target Architecture") unset (_TARGET_ARCH) endif (NOT SystemC_TARGET_ARCH) ############################################################################### # Configure QuickThreads ############################################################################### # Set QuickThreads architecture based on the detected preprocessor symbols. message (STATUS "Detect the target processor architecture for QuickThreads.") if (ENABLE_PTHREADS) set (QT_ARCH "IGNORE") # Pthreads will be used for the SystemC coroutines. elseif (MSVC) set (QT_ARCH "IGNORE") # Fibers will be used for the SystemC coroutines. elseif (APPLE AND (N_OSX_ARCHITECTURES GREATER 1)) set (QT_ARCH "IGNORE") # For universal libraries, Pthreads will be used for the SystemC coroutines. elseif (HAS__sparc_DEFINED OR HAS__sparc__DEFINED) set (QT_ARCH "sparc") elseif (HAS__hppa_DEFINED) set (QT_ARCH "hppa") elseif (HAS__x86_64__DEFINED) set (QT_ARCH "x86_64") elseif (HAS__i386_DEFINED) set (QT_ARCH "i386") elseif (HAS__aarch64__DEFINED) set (QT_ARCH "aarch64") elseif (HAS__ppc__DEFINED) set (QT_ARCH "powerpc_mach") elseif (HAS__powerpc__DEFINED) set (QT_ARCH "powerpc_sys5") else (ENABLE_PTHREADS) message (WARNING "QuickThreads is not supported on ${CMAKE_SYSTEM} on ${CMAKE_SYSTEM_PROCESSOR}.") set (QT_ARCH "IGNORE") endif (ENABLE_PTHREADS) if (QT_ARCH) # QuickThreads stack protection can benefit from posix_memalign include(CheckSymbolExists) check_symbol_exists(posix_memalign "stdlib.h" HAVE_POSIX_MEMALIGN) # To build QuickThreads, enable the assembler support. enable_language (ASM) else (QT_ARCH) # Otherwise, fall back to Pthreads or Fiber. if (NOT MSVC) set (ENABLE_PTHREADS TRUE CACHE BOOL "Use POSIX threads for SystemC processes instead of QuickThreads on Unix or Fiber on Windows." FORCE) endif (NOT MSVC) endif (QT_ARCH) ############################################################################### # Configure Pthreads or Fiber if necessary. ############################################################################### if (WIN32 AND ENABLE_PTHREADS) message (FATAL_ERROR "Pthreads is not supported on ${CMAKE_SYSTEM}.") endif (WIN32 AND ENABLE_PTHREADS) if (ENABLE_PTHREADS OR (QT_ARCH AND NOT DISABLE_ASYNC_UPDATES) OR NOT QT_ARCH) set (THREADS_PREFER_PTHREAD_FLAG ON) find_package (Threads REQUIRED) if (ENABLE_PTHREADS AND NOT CMAKE_USE_PTHREADS_INIT) message (SEND_ERROR "Failed to find the Pthreads library required to implement the SystemC coroutines and async_request_update() of primitive channels on Unix.") endif (ENABLE_PTHREADS AND NOT CMAKE_USE_PTHREADS_INIT) endif (ENABLE_PTHREADS OR (QT_ARCH AND NOT DISABLE_ASYNC_UPDATES) OR NOT QT_ARCH) ############################################################################### # Set the installation paths ############################################################################### if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if (IS_ABSOLUTE $ENV{SYSTEMC_HOME}) set (_CMAKE_INSTALL_PREFIX $ENV{SYSTEMC_HOME}) elseif (UNIX) set (_CMAKE_INSTALL_PREFIX "/opt/systemc") elseif (WIN32) file (TO_CMAKE_PATH $ENV{ProgramFiles} _WIN32_INSTALL_PREFIX) set (_CMAKE_INSTALL_PREFIX "${_WIN32_INSTALL_PREFIX}/SystemC") unset (_WIN32_INSTALL_PREFIX) else (EXISTS $ENV{SYSTEMC_ROOT_DIR}) set (_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/systemc") endif (IS_ABSOLUTE $ENV{SYSTEMC_HOME}) set (CMAKE_INSTALL_PREFIX ${_CMAKE_INSTALL_PREFIX} CACHE PATH "Installation root directory" FORCE) unset (_CMAKE_INSTALL_PREFIX) endif (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # Set the installation paths for headers, libraries, and documentation. set (CMAKE_INSTALL_DOCDIR "share/doc/systemc" CACHE PATH "Documentation installation directory") # otherwise mixed-case if (INSTALL_TO_LIB_BUILD_TYPE_DIR) # Install libraries to lib-${CMAKE_BUILD_TYPE} so that different build variants # of the library can be installed in parallel to the same SystemC root # directory. The find_package() mechanism in config-mode of CMake will then # automatically find the correct libraries matching the chosen # ${CMAKE_BUILD_TYPE}. set (_INSTALL_LIBDIR lib-${CMAKE_BUILD_TYPE}) string (TOLOWER ${_INSTALL_LIBDIR} _INSTALL_LIBDIR) set (CMAKE_INSTALL_LIBDIR ${_INSTALL_LIBDIR} CACHE PATH "Object code libraries installation directory" FORCE) unset (_INSTALL_LIBDIR) elseif (INSTALL_TO_LIB_TARGET_ARCH_DIR) # Some build systems assume to find SystemC in lib- set (CMAKE_INSTALL_LIBDIR lib-${SystemC_TARGET_ARCH} CACHE PATH "Object code libraries installation directory" FORCE) endif (INSTALL_TO_LIB_BUILD_TYPE_DIR) include (GNUInstallDirs) # Install symlink lib- to lib-${CMAKE_BUILD_TYPE} if (INSTALL_LIB_TARGET_ARCH_SYMLINK AND CMAKE_HOST_UNIX) install (CODE " EXECUTE_PROCESS(COMMAND cmake -E create_symlink ${CMAKE_INSTALL_LIBDIR} lib-${SystemC_TARGET_ARCH} WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}) ") endif (INSTALL_LIB_TARGET_ARCH_SYMLINK AND CMAKE_HOST_UNIX) if (INSTALL_TO_LIB_BUILD_TYPE_DIR OR INSTALL_TO_LIB_TARGET_ARCH_DIR) set (SystemCLanguage_INSTALL_CMAKEDIR share/cmake/SystemCLanguage CACHE PATH "CMake package configuration installation directory" FORCE) set (SystemCTLM_INSTALL_CMAKEDIR share/cmake/SystemCTLM CACHE PATH "CMake package configuration installation directory" FORCE) else (INSTALL_TO_LIB_BUILD_TYPE_DIR OR INSTALL_TO_LIB_TARGET_ARCH_DIR) set (SystemCLanguage_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/SystemCLanguage CACHE PATH "CMake package configuration installation directory for the SystemCLanguage package.") set (SystemCTLM_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/SystemCTLM CACHE PATH "CMake package configuration installation directory for the SystemCTLM package.") endif (INSTALL_TO_LIB_BUILD_TYPE_DIR OR INSTALL_TO_LIB_TARGET_ARCH_DIR) mark_as_advanced(SystemCLanguage_INSTALL_CMAKEDIR SystemCTLM_INSTALL_CMAKEDIR) set(SystemCLanguage_INSTALL_FULL_CMAKEDIR "${CMAKE_INSTALL_PREFIX}/${SystemCLanguage_INSTALL_CMAKEDIR}") set(SystemCTLM_INSTALL_FULL_CMAKEDIR "${CMAKE_INSTALL_PREFIX}/${SystemCTLM_INSTALL_CMAKEDIR}") ############################################################################### # Configure RPATH so that all targets find the libraries they link to ############################################################################### # Starting from CMake 2.8.12 use CMake's full RPATH support on Mac OS X set (CMAKE_MACOSX_RPATH TRUE) # Use, i.e., don't skip, the full RPATH for the build tree. set (CMAKE_SKIP_BUILD_RPATH FALSE) # For build, don't use the install RPATH already (but later on when # installing). set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # Set the RPATH to be used when installing. set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") # Add the automatically determined parts of the RPATH, which point to # directories outside the build tree, to the install RPATH. set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Set the RPATH to be used when installing, but only if it's not a system directory list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemDir) if ("${isSystemDir}" STREQUAL "-1") set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") endif ("${isSystemDir}" STREQUAL "-1") ############################################################################### # Configure status ############################################################################### message (STATUS "========================================================================") message (STATUS "Settings to build SystemC ${SystemCLanguage_VERSION} (${SystemCLanguage_VERSION_RELEASE_DATE}) and TLM ${SystemCTLM_VERSION} (${SystemCTLM_VERSION_RELEASE_DATE})") message (STATUS "------------------------------------------------------------------------") message (STATUS "BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}") message (STATUS "BUILD_SOURCE_DOCUMENTATION = ${BUILD_SOURCE_DOCUMENTATION}") message (STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") if (DISABLE_ASYNC_UPDATES) message ("DISABLE_ASYNC_UPDATES = ${DISABLE_ASYNC_UPDATES}") else (DISABLE_ASYNC_UPDATES) message (STATUS "DISABLE_ASYNC_UPDATES = ${DISABLE_ASYNC_UPDATES}") endif (DISABLE_ASYNC_UPDATES) message (STATUS "DISABLE_COPYRIGHT_MESSAGE = ${DISABLE_COPYRIGHT_MESSAGE}") message (STATUS "DISABLE_VCD_SCOPES = ${DISABLE_VCD_SCOPES}") if (DISABLE_VIRTUAL_BIND) message ("DISABLE_VIRTUAL_BIND = ${DISABLE_VIRTUAL_BIND}") else (DISABLE_VIRTUAL_BIND) message (STATUS "DISABLE_VIRTUAL_BIND = ${DISABLE_VIRTUAL_BIND}") endif (DISABLE_VIRTUAL_BIND) message (STATUS "ENABLE_ASSERTIONS = ${ENABLE_ASSERTIONS}") message (STATUS "ENABLE_EARLY_MAXTIME_CREATION = ${ENABLE_EARLY_MAXTIME_CREATION}") if (ENABLE_IMMEDIATE_SELF_NOTIFICATIONS) message ("ENABLE_IMMEDIATE_SELF_NOTIFICATIONS = ${ENABLE_IMMEDIATE_SELF_NOTIFICATIONS}") else (ENABLE_IMMEDIATE_SELF_NOTIFICATIONS) message (STATUS "ENABLE_IMMEDIATE_SELF_NOTIFICATIONS = ${ENABLE_IMMEDIATE_SELF_NOTIFICATIONS}") endif (ENABLE_IMMEDIATE_SELF_NOTIFICATIONS) message (STATUS "ENABLE_PHASE_CALLBACKS = ${ENABLE_PHASE_CALLBACKS}") message (STATUS "ENABLE_PHASE_CALLBACKS_TRACING = ${ENABLE_PHASE_CALLBACKS_TRACING}") if (ENABLE_PTHREADS) message ("ENABLE_PTHREADS = ${ENABLE_PTHREADS}") else (ENABLE_PTHREADS) message (STATUS "ENABLE_PTHREADS = ${ENABLE_PTHREADS}") endif (ENABLE_PTHREADS) message (STATUS "ENABLE_LEGACY_MEM_MGMT = ${ENABLE_LEGACY_MEM_MGMT}") if (OVERRIDE_DEFAULT_STACK_SIZE GREATER 0) message ("OVERRIDE_DEFAULT_STACK_SIZE = ${OVERRIDE_DEFAULT_STACK_SIZE}") endif (OVERRIDE_DEFAULT_STACK_SIZE GREATER 0) message (STATUS "SystemC_TARGET_ARCH = ${SystemC_TARGET_ARCH}") message (STATUS "SystemCLanguage_VERSION = ${SystemCLanguage_VERSION}") message (STATUS "SystemCTLM_VERSION = ${SystemCTLM_VERSION}") message (STATUS "INSTALL_TO_LIB_BUILD_TYPE_DIR = ${INSTALL_TO_LIB_BUILD_TYPE_DIR}") message (STATUS "INSTALL_TO_LIB_TARGET_ARCH_DIR = ${INSTALL_TO_LIB_TARGET_ARCH_DIR}") message (STATUS "INSTALL_LIB_TARGET_ARCH_SYMLINK = ${INSTALL_LIB_TARGET_ARCH_SYMLINK}") message (STATUS "------------------------------------------------------------------------") message (STATUS "CMAKE_CXX_STANDARD = ${CMAKE_CXX_STANDARD}") message (STATUS "CMAKE_CXX_STANDARD_REQUIRED = ${CMAKE_CXX_STANDARD_REQUIRED}") message (STATUS "CMAKE_SYSTEM = ${CMAKE_SYSTEM}") message (STATUS "CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}") message (STATUS "QT_ARCH = ${QT_ARCH}") if (DEFINED CMAKE_OSX_ARCHITECTURES) message (STATUS "CMAKE_OSX_ARCHITECTURES = ${CMAKE_OSX_ARCHITECTURES}") endif (DEFINED CMAKE_OSX_ARCHITECTURES) if (DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) message (STATUS "CMAKE_OSX_DEPLOYMENT_TARGET = ${CMAKE_OSX_DEPLOYMENT_TARGET}") endif (DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) if (DEFINED CMAKE_OSX_SYSROOT) message (STATUS "CMAKE_OSX_SYSROOT = ${CMAKE_OSX_SYSROOT}") endif(DEFINED CMAKE_OSX_SYSROOT) if (DEFINED Threads_FOUND) message (STATUS "Threads_FOUND = ${Threads_FOUND}") endif (DEFINED Threads_FOUND) if (DEFINED CMAKE_USE_PTHREADS_INIT) message (STATUS "CMAKE_USE_PTHREADS_INIT = ${CMAKE_USE_PTHREADS_INIT}") endif (DEFINED CMAKE_USE_PTHREADS_INIT) if (DEFINED CMAKE_USE_WIN32_THREADS_INIT) message (STATUS "CMAKE_USE_WIN32_THREADS_INIT = ${CMAKE_USE_WIN32_THREADS_INIT}") endif (DEFINED CMAKE_USE_WIN32_THREADS_INIT) if (DEFINED CMAKE_THREAD_LIBS_INIT) message (STATUS "CMAKE_THREAD_LIBS_INIT = ${CMAKE_THREAD_LIBS_INIT}") endif (DEFINED CMAKE_THREAD_LIBS_INIT) message (STATUS "------------------------------------------------------------------------") message (STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") message (STATUS "CMAKE_INSTALL_BINDIR = ${CMAKE_INSTALL_BINDIR}") message (STATUS "CMAKE_INSTALL_DOCDIR = ${CMAKE_INSTALL_DOCDIR}") message (STATUS "CMAKE_INSTALL_INCLUDEDIR = ${CMAKE_INSTALL_INCLUDEDIR}") message (STATUS "CMAKE_INSTALL_LIBDIR = ${CMAKE_INSTALL_LIBDIR}") message (STATUS "INSTALL_CMAKEDIR = ${INSTALL_CMAKEDIR}") message (STATUS "========================================================================") ############################################################################### # Subdirectories ############################################################################### add_subdirectory (src) add_subdirectory (examples) ############################################################################### # Install README files ############################################################################### install (FILES AUTHORS.md INSTALL.md cmake/INSTALL_USING_CMAKE LICENSE NOTICE README.md RELEASENOTES DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc) ############################################################################### # Provide package of the SystemC library to other programs using CMake ############################################################################### # Export the systemc library target for usage by other programs # ... to local build tree export (TARGETS systemc NAMESPACE SystemC:: FILE SystemCLanguageTargets.cmake) # ... to installation tree install (EXPORT SystemCLanguageTargets NAMESPACE SystemC:: DESTINATION ${SystemCLanguage_INSTALL_CMAKEDIR} COMPONENT dev) # Register the SystemCLanguage and SystemCTLM packages for use from the # build tree. (This registers the build tree with the global CMake-registry.) export (PACKAGE SystemCLanguage) export (PACKAGE SystemCTLM) # Create the Config.cmake and ConfigVersion files include(CMakePackageConfigHelpers) configure_package_config_file(cmake/SystemCLanguageConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/SystemCLanguageConfig.cmake INSTALL_DESTINATION ${SystemCLanguage_INSTALL_CMAKEDIR}) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/SystemCLanguageConfigVersion.cmake" VERSION ${SystemCLanguage_VERSION_MAJOR}.${SystemCLanguage_VERSION_MINOR}.${SystemCLanguage_VERSION_PATCH}.${SystemCLanguage_VERSION_RELEASE_DATE} COMPATIBILITY AnyNewerVersion ) configure_package_config_file(cmake/SystemCTLMConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/SystemCTLMConfig.cmake INSTALL_DESTINATION ${SystemCTLM_INSTALL_CMAKEDIR}) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/SystemCTLMConfigVersion.cmake" VERSION ${SystemCTLM_VERSION_MAJOR}.${SystemCTLM_VERSION_MINOR}.${SystemCTLM_VERSION_PATCH}.${SystemCTLM_VERSION_RELEASE_DATE} COMPATIBILITY AnyNewerVersion ) # Install the Config.cmake and ConfigVersion.cmake install(FILES "${PROJECT_BINARY_DIR}/SystemCLanguageConfig.cmake" "${PROJECT_BINARY_DIR}/SystemCLanguageConfigVersion.cmake" DESTINATION "${SystemCLanguage_INSTALL_CMAKEDIR}" COMPONENT dev) install(FILES "${PROJECT_BINARY_DIR}/SystemCTLMConfig.cmake" "${PROJECT_BINARY_DIR}/SystemCTLMConfigVersion.cmake" DESTINATION "${SystemCTLM_INSTALL_CMAKEDIR}" COMPONENT dev) systemc-2.3.4/README.md0000644000175000017500000001102714342422106014345 0ustar carstencarsten![SystemC][logo] SystemC Class Library ===================== About SystemC ------------- SystemC addresses the need for a system design and verification language that spans hardware and software. It is a language built as an ANSI C++ class library created for design and verification. Users worldwide are applying SystemC to system-level modeling, abstract analog/mixed-signal modeling, architectural exploration, performance modeling, software development, functional verification, and high-level synthesis. The SystemC API and its semantics are developed by the [Accellera Systems Initiative][1] and formally standardized and governed by the IEEE in the [IEEE Std. 1666-2011][2] standard. This version of SystemC is the **reference implementation** provided by the [Accellera Systems Initiative][1] and is mainly developed by the following Accellera Working Groups * [SystemC Language Working Group][3] (LWG) * [SystemC Transaction-Level Working Group][4] (TLMWG) * [SystemC Datatypes Working Group][5] (SDTWG) In the event of discrepancies between the behavior of this implementation and statements made in the [IEEE Std. 1666-2011][2] standard, the IEEE standard shall be taken to be definitive. **If you would like to contribute to this repository, please check the [CONTRIBUTING](CONTRIBUTING.md) file.** ------------------------------------------------------------------------------- ### Licensing and Copyright See the separate [LICENSE](LICENSE) and [NOTICE](NOTICE) files to determine your rights and responsiblities for using SystemC. ### User Documentation The main documentation of SystemC is the _[IEEE Std. 1666-2011][2] Standard SystemC Language Reference Manual_. You can find additional documentation for this release in the [docs](docs) directory, some of which refers to older versions. ### Installation See the separate [INSTALL](INSTALL.md) file that provides system information and installation instructions. ### Release Notes See the separate [RELEASENOTES](RELEASENOTES) file that provides up-to-date information about this release of SystemC. ### SystemC Community * SystemC community website https://accellera.org/community/systemc/ * Community discussion forum https://forums.accellera.org/forum/9-systemc/ About Accellera SystemC Working Groups -------------------------------------- Accellera's SystemC [Language Working Group][3] (SystemC LWG) and SystemC [Transaction-Level Modeling Working Group][4] (SystemC TLMWG) are two of the 18 Accellera Working Groups that produce effective and efficient Electronic Design Automation (EDA) and Intellectual Property (IP) standards for today's advanced IC designs and embedded systems. The SystemC LWG is responsible for the definition and development of the SystemC and TLM core languages, the foundation on which all other SystemC libraries and functionality are built. Participants of both working groups include member companies and industry contributors. Technical contributors typically have many years of practical experience with IC and system design as well as developing and using EDA tools. About Accellera Systems Initiative ---------------------------------- Accellera Systems Initiative is an independent, not-for profit organization dedicated to create, support, promote and advance system-level design, modeling and verification standards for use by the worldwide electronics industry. The organization accelerates standards development and, as part of its ongoing partnership with the IEEE, its standards are contributed to the IEEE Standards Association for formal standardization and ongoing change control. For more information, please visit [www.accellera.org][1]. Find out more about [membership][6]. Follow [@accellera][7] on Twitter or to comment, please use `#accellera`. Accellera Global Sponsors are: Cadence; Mentor, A Siemens Business; and Synopsys. _Accellera, Accellera Systems Initiative and SystemC are trademarks of Accellera Systems Initiative Inc. All other trademarks and trade names are the property of their respective owners._ [1]: https://accellera.org [2]: https://ieeexplore.ieee.org/document/6134619/ [3]: https://accellera.org/activities/working-groups/systemc-language [4]: https://accellera.org/activities/working-groups/systemc-tlm [5]: https://accellera.org/activities/working-groups/systemc-datatypes [6]: https://accellera.org/about/join/ [7]: https://twitter.com/accellera [logo]: https://www.accellera.org/images/about/policies/logos/logo_systemc.gif systemc-2.3.4/src/0000755000175000017500000000000014342422106013654 5ustar carstencarstensystemc-2.3.4/src/tlm.h0000644000175000017500000000175314342422106014627 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // kept for backwards compatibility #include "tlm" systemc-2.3.4/src/tlm0000644000175000017500000000266314342422106014402 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_HEADER__ #define __TLM_HEADER__ #include // main SystemC header #include "tlm_core/tlm_2/tlm_version.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_req_rsp.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_2_interfaces.h" #include "tlm_core/tlm_2/tlm_generic_payload/tlm_generic_payload.h" #include "tlm_core/tlm_2/tlm_sockets/tlm_sockets.h" #include "tlm_core/tlm_2/tlm_quantum/tlm_quantum.h" #endif /* TLM_HEADER_INCLUDED_ */ systemc-2.3.4/src/systemc.pc.in0000644000175000017500000000316214342422106016276 0ustar carstencarsten# 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. # # ------------------------------------------------------------------------- # # systemc.pc.in -- # pkg-config definition file (template) for SystemC # (http://www.freedesktop.org/wiki/Software/pkg-config/) # # Author: Philipp A. Hartmann, OFFIS, 2013-05-07 # # Note: The "real" definition (systemc.pc) is generated by "configure" # during the build configuration. # # ------------------------------------------------------------------------- # TARGET_ARCH=@TARGET_ARCH@ prefix=@prefix@ exec_prefix=@exec_prefix@ libarchdir=@libdir@@LIB_ARCH_SUFFIX@ includedir=@includedir@ Name: @PACKAGE_NAME@ Description: Accellera @PACKAGE_NAME@ proof-of-concept library Version: @PACKAGE_VERSION@ URL: @PACKAGE_URL@ Libs: -L${libarchdir} -l@PACKAGE@ Libs.private: @PKGCONFIG_LDPRIV@ Cflags: @PKGCONFIG_CFLAGS@ @PKGCONFIG_DEFINES@ -I${includedir} systemc-2.3.4/src/tlm_utils/0000755000175000017500000000000014342422106015670 5ustar carstencarstensystemc-2.3.4/src/tlm_utils/peq_with_cb_and_phase.h0000644000175000017500000001707614342422106022342 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // 12-Jan-2009 John Aynsley Bug fix. Phase argument to notify should be const // 20-Mar-2009 John Aynsley Add cancel_all() method #ifndef __PEQ_WITH_CB_AND_PHASE_H__ #define __PEQ_WITH_CB_AND_PHASE_H__ #ifndef SC_INCLUDE_DYNAMIC_PROCESSES // needed for sc_spawn # define SC_INCLUDE_DYNAMIC_PROCESSES #endif #include #include #include namespace tlm_utils { template class time_ordered_list { public: struct element { struct element *next; PAYLOAD p; sc_core::sc_time t; sc_dt::uint64 d; element(PAYLOAD& p, sc_core::sc_time t, sc_dt::uint64 d): p(p),t(t),d(d) {} element(){} }; element *nill; element *empties; element *list; unsigned int size; time_ordered_list() : nill(new element()), empties(NULL), list(nill), size(0) { } ~time_ordered_list() { reset(); while(empties){ struct element *e=empties->next; delete empties; empties=e; } delete nill; } void reset() { while(size) { delete_top(); } } void insert(const PAYLOAD& p, sc_core::sc_time t) { if (!empties) { empties=new struct element(); empties->next=NULL; } struct element *e=empties; empties=empties->next; e->p=p; e->t=t; e->d=sc_core::sc_delta_count(); struct element * ancestor=nill; struct element * iterator=list; while (iterator!=nill && iterator->t<=t){ ancestor=iterator; iterator=iterator->next; } if (ancestor==nill){ e->next=list; list=e; } else { e->next=iterator; ancestor->next=e; } size++; } void delete_top(){ if (list != nill) { struct element *e=list; list=list->next; e->next=empties; empties=e; size--; } } unsigned int get_size() { return size; } PAYLOAD &top() { return list->p; } sc_core::sc_time top_time() { return list->t; } sc_dt::uint64& top_delta() { return list->d; } sc_core::sc_time next_time() { return list->next->t; } }; //--------------------------------------------------------------------------- /** * An event queue that can contain any number of pending * notifications. Each notification have an associate payload. */ //--------------------------------------------------------------------------- template class peq_with_cb_and_phase: public sc_core::sc_object { typedef typename TYPES::tlm_payload_type tlm_payload_type; typedef typename TYPES::tlm_phase_type tlm_phase_type; typedef std::pair PAYLOAD; typedef void (OWNER::*cb)(tlm_payload_type&, const tlm_phase_type&); class delta_list{ public: delta_list(){ reset(); entries.resize(100); } inline void insert(const PAYLOAD& p){ if (size==entries.size()){ entries.resize(entries.size()*2); } entries[size++]=p; } inline PAYLOAD& get(){ return entries[out++]; } inline bool next(){ return out entries; unsigned int out; }; public: peq_with_cb_and_phase(OWNER* _owner, cb _cb) :sc_core::sc_object( sc_core::sc_gen_unique_name( "peq_with_cb_and_phase" ) ) ,m_owner(_owner) ,m_cb(_cb) { sc_core::sc_spawn_options opts; opts.spawn_method(); opts.set_sensitivity(&m_e); opts.dont_initialize(); sc_core::sc_spawn(sc_bind(&peq_with_cb_and_phase::fec, this), sc_core::sc_gen_unique_name("fec"), &opts); } peq_with_cb_and_phase(const char* _name, OWNER* _owner,cb _cb) : sc_core::sc_object( _name ) ,m_owner(_owner) ,m_cb(_cb) { sc_core::sc_spawn_options opts; opts.spawn_method(); opts.set_sensitivity(&m_e); opts.dont_initialize(); sc_core::sc_spawn(sc_bind(&peq_with_cb_and_phase::fec, this), sc_core::sc_gen_unique_name("fec"), &opts); } ~peq_with_cb_and_phase(){} void notify (tlm_payload_type& t, const tlm_phase_type& p, const sc_core::sc_time& when){ //t.aquire(); if (when==sc_core::SC_ZERO_TIME) { if (sc_core::sc_delta_count() & (sc_dt::uint64)0x1) //uneven delta cycle so delta delay is for even cylce m_even_delta.insert(PAYLOAD(&t,p)); else m_uneven_delta.insert(PAYLOAD(&t,p)); //even delta cycle so delta delay is for uneven delta m_e.notify(sc_core::SC_ZERO_TIME); } else { m_ppq.insert(PAYLOAD(&t,p), when + sc_core::sc_time_stamp() ); m_e.notify(when); // note, this will only over-right the "newest" event. } } void notify (tlm_payload_type& t, const tlm_phase_type& p){ m_immediate_yield.insert(PAYLOAD(&t,p)); m_e.notify(); // immediate notification } // Cancel all events from the event queue void cancel_all() { m_ppq.reset(); m_uneven_delta.reset(); m_even_delta.reset(); m_immediate_yield.reset(); m_e.cancel(); } private: void fec(){ //immediate yield notifications while(m_immediate_yield.next()) {PAYLOAD& tmp=m_immediate_yield.get(); (m_owner->*m_cb)(*tmp.first, tmp.second);} //tmp.first->release();} m_immediate_yield.reset(); //delta notifications if (sc_core::sc_delta_count() & (sc_dt::uint64) 0x1) {//uneven delta so put out all payloads for uneven delta while (m_uneven_delta.next()) {PAYLOAD& tmp=m_uneven_delta.get(); (m_owner->*m_cb)(*tmp.first, tmp.second);} //tmp.first->release();} m_uneven_delta.reset(); if (m_even_delta.size) m_e.notify(sc_core::SC_ZERO_TIME); } else { while (m_even_delta.next()) {PAYLOAD& tmp=m_even_delta.get(); (m_owner->*m_cb)(*tmp.first, tmp.second);} //tmp.first->release();} m_even_delta.reset(); if (m_uneven_delta.size) m_e.notify(sc_core::SC_ZERO_TIME); } if (!m_ppq.get_size()) return; //there were only delta notification //timed notifications const sc_core::sc_time now=sc_core::sc_time_stamp(); sc_core::sc_time top=m_ppq.top_time(); while(m_ppq.get_size() && top==now) { // push all active ones into target PAYLOAD& tmp=m_ppq.top(); (m_owner->*m_cb)(*tmp.first, tmp.second); //tmp.first->release();} m_ppq.delete_top(); top=m_ppq.top_time(); } if ( m_ppq.get_size()) { m_e.notify( top - now) ; } } OWNER* m_owner; cb m_cb; time_ordered_list m_ppq; delta_list m_uneven_delta; delta_list m_even_delta; delta_list m_immediate_yield; sc_core::sc_event m_e; // default event }; } #endif // __PEQ_WITH_CB_AND_PHASE_H__ systemc-2.3.4/src/tlm_utils/peq_with_get.h0000644000175000017500000000513114342422106020520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // 12-Jan-2009 John Aynsley Bug fix. sc_time argument to notify should be const // 20-Mar-2009 John Aynsley Add cancel_all() method #ifndef __PEQ_WITH_GET_H__ #define __PEQ_WITH_GET_H__ #include //#include #include namespace tlm_utils { template class peq_with_get : public sc_core::sc_object { public: typedef PAYLOAD transaction_type; typedef std::pair pair_type; public: peq_with_get(const char* name) : sc_core::sc_object(name) { } void notify(transaction_type& trans, const sc_core::sc_time& t) { m_scheduled_events.insert(pair_type(t + sc_core::sc_time_stamp(), &trans)); m_event.notify(t); } void notify(transaction_type& trans) { m_scheduled_events.insert(pair_type(sc_core::sc_time_stamp(), &trans)); m_event.notify(); // immediate notification } // needs to be called until it returns 0 transaction_type* get_next_transaction() { if (m_scheduled_events.empty()) { return 0; } sc_core::sc_time now = sc_core::sc_time_stamp(); if (m_scheduled_events.begin()->first <= now) { transaction_type* trans = m_scheduled_events.begin()->second; m_scheduled_events.erase(m_scheduled_events.begin()); return trans; } m_event.notify(m_scheduled_events.begin()->first - now); return 0; } sc_core::sc_event& get_event() { return m_event; } // Cancel all events from the event queue void cancel_all() { m_scheduled_events.clear(); m_event.cancel(); } private: std::multimap m_scheduled_events; sc_core::sc_event m_event; }; } #endif systemc-2.3.4/src/tlm_utils/Makefile.am0000644000175000017500000000432614342422106017731 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/tlm_utils/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Alan Fitch, Doulos, 2012-03-10 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc H_FILES = \ convenience_socket_bases.h \ instance_specific_extensions.h \ instance_specific_extensions_int.h \ multi_passthrough_initiator_socket.h \ multi_passthrough_target_socket.h \ multi_socket_bases.h \ passthrough_target_socket.h \ peq_with_cb_and_phase.h \ peq_with_get.h \ simple_initiator_socket.h \ simple_target_socket.h \ tlm_quantumkeeper.h CXX_FILES = \ convenience_socket_bases.cpp \ instance_specific_extensions.cpp EXTRA_DIST += \ README.txt localincludedir = $(includedir)/tlm_utils nobase_localinclude_HEADERS = $(H_FILES) noinst_LTLIBRARIES = libtlm_utils.la libtlm_utils_la_SOURCES = $(NO_H_FILES) $(CXX_FILES) uninstall-hook: test ! -d "$(localincludedir)" || rmdir "$(localincludedir)" systemc-2.3.4/src/tlm_utils/README.txt0000644000175000017500000000646614342422106017402 0ustar carstencarsten TLM-2.0 standard utilities ========================== Dir: include/tlm_utils SubDirs: Files: README.txt instance_specific_extensions.h multi_passthrough_initiator_socket.h multi_passthrough_target_socket.h multi_socket_bases.h peq_with_get.h simple_initiator_socket.h simple_target_socket.h peq_with_cb_and_phase.h passthrough_target_socket.h tlm_quantumkeeper.h Comments ======== This directory contains a number of ease-of-use and convenience implementations for the interoperability standard. All objects defined in the header files of this directory are contained in the tlm_util namespace. There is no tlm_utils.h header files containing all includes in order to avoid additional dependencies for TLM 2.0 Files: simple_initiator_socket.h version of an initiator socket that has a default implementation of all interfaces and allows to register an implementation for any of the interfaces to the socket, either unique interfaces or tagged interfaces (carrying an additional id) simple_target_socket.h version of a target socket that has a default implementation of all interfaces and allows to register an implementation for any of the interfaces to the socket, either unique interfaces or tagged interfaces (carrying an additional id) This socket allows to register only 1 of the transport interfaces (blocking or non-blocking) and implements a conversion in case the socket is used on the other interface passthrough_target_socket.h version of a target socket that has a default implementation of all interfaces and allows to register an implementation for any of the interfaces to the socket. multi_passthrough_initiator_socket.h an implementation of a socket that allows to bind multiple targets to the same initiator socket. Implements a mechanism to allow to identify in the backward path through which index of the socket the call passed through multi_passthrough_target_socket.h an implementation of a socket that allows to bind multiple initiators to the same target socket. Implements a mechanism to allow to identify in the forward path through which index of the socket the call passed through multi_socket_bases.h contains base class definitions used by the multi_passthrough sockets peq_with_get.h payload event queue (PEQ) implementation using a pull interface. Has a get_next_transaction API that returns the transaction that is scheduled in the event queue peq_with_cb_and_phase.h another payload event queue, this one with a push interface (callback mechanism ). Allows to register a callback that will be called whenever the event in the event queue is triggered, the callback gets transaction and phase as arguments instance_specific_extensions.h is an implementation for adding extentions in the generic payload that are specific to an instance along the path of a transaction, to allow that extentions of the same type can be used by the different blocks along the path of the transaction tlm_quantumkeeper.h is an convenience object used to keep track of the local time in an initiator (how much it has run ahead of the SystemC time), to synchronize with SystemC time etc. systemc-2.3.4/src/tlm_utils/passthrough_target_socket.h0000644000175000017500000003741114342422106023334 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ #define TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ #include #include "tlm_utils/convenience_socket_bases.h" namespace tlm_utils { template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class passthrough_target_socket_b : public tlm::tlm_target_socket , protected passthrough_socket_base { public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_target_socket base_type; public: static const char* default_name() { return sc_core::sc_gen_unique_name("passthrough_target_socket"); } explicit passthrough_target_socket_b(const char* n = default_name()) : base_type(n) , m_process(this) { bind(m_process); } using base_type::bind; // REGISTER_XXX void register_nb_transport_fw(MODULE* mod, sync_enum_type (MODULE::*cb)(transaction_type&, phase_type&, sc_core::sc_time&)) { m_process.set_nb_transport_ptr(mod, cb); } void register_b_transport(MODULE* mod, void (MODULE::*cb)(transaction_type&, sc_core::sc_time&)) { m_process.set_b_transport_ptr(mod, cb); } void register_transport_dbg(MODULE* mod, unsigned int (MODULE::*cb)(transaction_type&)) { m_process.set_transport_dbg_ptr(mod, cb); } void register_get_direct_mem_ptr(MODULE* mod, bool (MODULE::*cb)(transaction_type&, tlm::tlm_dmi&)) { m_process.set_get_direct_mem_ptr(mod, cb); } private: class process : public tlm::tlm_fw_transport_if , protected convenience_socket_cb_holder { public: typedef sync_enum_type (MODULE::*NBTransportPtr)(transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*BTransportPtr)(transaction_type&, sc_core::sc_time&); typedef unsigned int (MODULE::*TransportDbgPtr)(transaction_type&); typedef bool (MODULE::*GetDirectMem_ptr)(transaction_type&, tlm::tlm_dmi&); explicit process(passthrough_socket_base* owner) : convenience_socket_cb_holder(owner), m_mod(0) , m_nb_transport_ptr(0) , m_b_transport_ptr(0) , m_transport_dbg_ptr(0) , m_get_direct_mem_ptr(0) { } void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p) { if (m_nb_transport_ptr) { display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_nb_transport_ptr = p; } void set_b_transport_ptr(MODULE* mod, BTransportPtr p) { if (m_b_transport_ptr) { display_warning("blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_b_transport_ptr = p; } void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p) { if (m_transport_dbg_ptr) { display_warning("debug callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_dbg_ptr = p; } void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p) { if (m_get_direct_mem_ptr) { display_warning("get DMI pointer callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_get_direct_mem_ptr = p; } sync_enum_type nb_transport_fw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_nb_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_nb_transport_ptr)(trans, phase, t); } display_error("no non-blocking callback registered"); return tlm::TLM_COMPLETED; } void b_transport(transaction_type& trans, sc_core::sc_time& t) { if (m_b_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_b_transport_ptr)(trans, t); } display_error("no blocking callback registered"); } unsigned int transport_dbg(transaction_type& trans) { if (m_transport_dbg_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_dbg_ptr)(trans); } // No debug support return 0; } bool get_direct_mem_ptr(transaction_type& trans, tlm::tlm_dmi& dmi_data) { if (m_get_direct_mem_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_get_direct_mem_ptr)(trans, dmi_data); } // No DMI support dmi_data.allow_read_write(); dmi_data.set_start_address(0x0); dmi_data.set_end_address((sc_dt::uint64)-1); return false; } private: MODULE* m_mod; NBTransportPtr m_nb_transport_ptr; BTransportPtr m_b_transport_ptr; TransportDbgPtr m_transport_dbg_ptr; GetDirectMem_ptr m_get_direct_mem_ptr; }; private: const sc_core::sc_object* get_socket() const { return this; } private: process m_process; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class passthrough_target_socket : public passthrough_target_socket_b { typedef passthrough_target_socket_b socket_b; public: passthrough_target_socket() : socket_b() {} explicit passthrough_target_socket(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class passthrough_target_socket_optional : public passthrough_target_socket_b { typedef passthrough_target_socket_b socket_b; public: passthrough_target_socket_optional() : socket_b() {} explicit passthrough_target_socket_optional(const char* name) : socket_b(name) {} }; //ID Tagged version template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class passthrough_target_socket_tagged_b : public tlm::tlm_target_socket , protected passthrough_socket_base { public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_target_socket base_type; static const char* default_name() { return sc_core::sc_gen_unique_name("passthrough_target_socket_tagged"); } public: explicit passthrough_target_socket_tagged_b(const char* n = default_name()) : base_type(n) , m_process(this) { bind(m_process); } using base_type::bind; // REGISTER_XXX void register_nb_transport_fw(MODULE* mod, sync_enum_type (MODULE::*cb)(int id, transaction_type&, phase_type&, sc_core::sc_time&), int id) { m_process.set_nb_transport_ptr(mod, cb); m_process.set_nb_transport_user_id(id); } void register_b_transport(MODULE* mod, void (MODULE::*cb)(int id, transaction_type&, sc_core::sc_time&), int id) { m_process.set_b_transport_ptr(mod, cb); m_process.set_b_transport_user_id(id); } void register_transport_dbg(MODULE* mod, unsigned int (MODULE::*cb)(int id, transaction_type&), int id) { m_process.set_transport_dbg_ptr(mod, cb); m_process.set_transport_dbg_user_id(id); } void register_get_direct_mem_ptr(MODULE* mod, bool (MODULE::*cb)(int id, transaction_type&, tlm::tlm_dmi&), int id) { m_process.set_get_direct_mem_ptr(mod, cb); m_process.set_get_dmi_user_id(id); } private: class process : public tlm::tlm_fw_transport_if , protected convenience_socket_cb_holder { public: typedef sync_enum_type (MODULE::*NBTransportPtr)(int id, transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*BTransportPtr)(int id, transaction_type&, sc_core::sc_time&); typedef unsigned int (MODULE::*TransportDbgPtr)(int id, transaction_type&); typedef bool (MODULE::*GetDirectMem_ptr)(int id, transaction_type&, tlm::tlm_dmi&); process(passthrough_socket_base* owner) : convenience_socket_cb_holder(owner), m_mod(0) , m_nb_transport_ptr(0) , m_b_transport_ptr(0) , m_transport_dbg_ptr(0) , m_get_direct_mem_ptr(0) , m_nb_transport_user_id(0) , m_b_transport_user_id(0) , m_transport_dbg_user_id(0) , m_get_dmi_user_id(0) { } void set_nb_transport_user_id(int id) { m_nb_transport_user_id = id; } void set_b_transport_user_id(int id) { m_b_transport_user_id = id; } void set_transport_dbg_user_id(int id) { m_transport_dbg_user_id = id; } void set_get_dmi_user_id(int id) { m_get_dmi_user_id = id; } void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p) { if (m_nb_transport_ptr) { display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_nb_transport_ptr = p; } void set_b_transport_ptr(MODULE* mod, BTransportPtr p) { if (m_b_transport_ptr) { display_warning("blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_b_transport_ptr = p; } void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p) { if (m_transport_dbg_ptr) { display_warning("debug callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_dbg_ptr = p; } void set_get_direct_mem_ptr(MODULE* mod, GetDirectMem_ptr p) { if (m_get_direct_mem_ptr) { display_warning("get DMI pointer callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_get_direct_mem_ptr = p; } sync_enum_type nb_transport_fw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_nb_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, trans, phase, t); } display_error("no non-blocking callback registered"); return tlm::TLM_COMPLETED; } void b_transport(transaction_type& trans, sc_core::sc_time& t) { if (m_b_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_b_transport_ptr)(m_b_transport_user_id, trans, t); } display_error("no blocking callback registered"); } unsigned int transport_dbg(transaction_type& trans) { if (m_transport_dbg_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_dbg_ptr)(m_transport_dbg_user_id, trans); } // No debug support return 0; } bool get_direct_mem_ptr(transaction_type& trans, tlm::tlm_dmi& dmi_data) { if (m_get_direct_mem_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_get_direct_mem_ptr)(m_get_dmi_user_id, trans, dmi_data); } // No DMI support dmi_data.allow_read_write(); dmi_data.set_start_address(0x0); dmi_data.set_end_address((sc_dt::uint64)-1); return false; } private: MODULE* m_mod; NBTransportPtr m_nb_transport_ptr; BTransportPtr m_b_transport_ptr; TransportDbgPtr m_transport_dbg_ptr; GetDirectMem_ptr m_get_direct_mem_ptr; int m_nb_transport_user_id; int m_b_transport_user_id; int m_transport_dbg_user_id; int m_get_dmi_user_id; }; private: const sc_core::sc_object* get_socket() const { return this; } private: process m_process; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class passthrough_target_socket_tagged : public passthrough_target_socket_tagged_b { typedef passthrough_target_socket_tagged_b socket_b; public: passthrough_target_socket_tagged() : socket_b() {} explicit passthrough_target_socket_tagged(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class passthrough_target_socket_tagged_optional : public passthrough_target_socket_tagged_b { typedef passthrough_target_socket_tagged_b socket_b; public: passthrough_target_socket_tagged_optional() : socket_b() {} explicit passthrough_target_socket_tagged_optional(const char* name) : socket_b(name) {} }; } // namespace tlm_utils #endif // TLM_UTILS_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/multi_passthrough_initiator_socket.h0000644000175000017500000002641214342422106025261 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_MULTI_PASSTHROUGH_INITIATOR_SOCKET_H_INCLUDED_ #define TLM_UTILS_MULTI_PASSTHROUGH_INITIATOR_SOCKET_H_INCLUDED_ #include "multi_socket_bases.h" namespace tlm_utils { /* This class implements a trivial multi initiator socket. The triviality refers to the fact that the socket does not do blocking to non-blocking or non-blocking to blocking conversions. It allows to connect multiple targets to this socket. The user has to register callbacks for the bw interface methods he likes to use. The callbacks are basically equal to the bw interface methods but carry an additional integer that indicates to which index of this socket the calling target is connected. */ template class multi_passthrough_initiator_socket : public multi_init_base< BUSWIDTH, TYPES, N, POL> { public: //typedefs // tlm 2.0 types for nb_transport typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; // typedefs to keep the fn ptr notations short typedef sync_enum_type (MODULE::*nb_cb)(int, transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*dmi_cb)(int, sc_dt::uint64, sc_dt::uint64); typedef multi_init_base base_type; typedef typename base_type::base_target_socket_type base_target_socket_type; static const char* default_name() { return sc_core::sc_gen_unique_name("multi_passthrough_initiator_socket"); } //CTOR explicit multi_passthrough_initiator_socket(const char* name = default_name()) : base_type(name) , m_hierarch_bind(0) , m_beoe_disabled(false) , m_dummy(this,42) { } ~multi_passthrough_initiator_socket(){ //clean up everything allocated by 'new' for (unsigned int i=0; i& get_base_interface() { m_binders.push_back(new callback_binder_bw(this, m_binders.size())); return *m_binders[m_binders.size()-1]; } // const overload not allowed for multi-sockets virtual const tlm::tlm_bw_transport_if& get_base_interface() const { display_error("'get_base_interface()' const not allowed for multi-sockets."); return base_type::get_base_interface(); } //Override virtual functions of the tlm_initiator_socket: // this function is called whenever an sc_export (as part of a initiator socket) // wants to bind to the export of the underlying tlm_initiator_socket // i.e. a hierarchical bind takes place virtual sc_core::sc_export >& get_base_export() { if (!m_beoe_disabled) //we are not bound hierarchically base_type::m_export.bind(m_dummy); //so we bind the dummy to avoid a SystemC error return base_type::get_base_export(); //and then return our own export so that the hierarchical binding is set up properly } virtual const sc_core::sc_export >& get_base_export() const { return base_type::get_base_export(); } //bind against a target socket virtual void bind(base_target_socket_type& s) { //error if this socket is already bound hierarchically if (m_hierarch_bind) { display_error("Already hierarchically bound."); return; } base_type::bind(s); //satisfy systemC, leads to a call to get_base_interface() //try to cast the target socket into a fw interface sc_core::sc_export >* p_ex_s=dynamic_cast >*>(&s); if (!p_ex_s) { display_error("Multi socket not bound to tlm_socket."); return; } //try a cast into a multi sockets multi_to_multi_bind_base* test=dynamic_cast*> (p_ex_s); if (test) //did we just do a multi-multi bind?? //if that is the case the multi target socket must have just created a callback binder // which we want to get from it. //Moreover, we also just created one, which we will pass to it. m_sockets.push_back(test->get_last_binder(m_binders[m_binders.size()-1])); else{ // if not just bind normally sc_core::sc_export >& ex_s=*p_ex_s; m_sockets.push_back(&((tlm::tlm_fw_transport_if&)ex_s)); //store the interface we are bound against } } //operator notation for direct bind void operator() (base_target_socket_type& s) { bind(s); } //SystemC standard callback before end of elaboration void before_end_of_elaboration(){ //if our export hasn't been bound yet (due to a hierarch binding) // we bind it now to avoid a SystemC error. //We must do that, because it is legal not to register a callback on this socket // as the user might only use b_transport if (!base_type::m_export.get_interface()){ base_type::m_export.bind(m_dummy); } //'break' here if the socket was told not to do callback binding if (m_beoe_disabled) return; //get the callback binders of the top of the hierachical bind chain // NOTE: this could be the same socket if there is no hierachical bind std::vector* >& binders=get_hierarch_bind()->get_binders(); //get the interfaces bound to the top of the hierachical bind chain // NOTE: this could be the same socket if there is no hierachical bind m_used_sockets=get_hierarch_bind()->get_sockets(); //register the callbacks of this socket with the callback binders // we just got from the top of the hierachical bind chain for (unsigned int i=0; iset_callbacks(m_nb_f, m_dmi_f); } } // // Bind multi initiator socket to multi initiator socket (hierarchical bind) // virtual void bind(base_type& s) { if (m_binders.size()) { //a multi socket is either bound hierarchically or directly display_error("Socket already directly bound."); return; } if (m_hierarch_bind){ display_warning("Socket already bound hierarchically. Bind attempt ignored."); return; } //remember to which socket we are hierarchically bound and disable it, // so that it won't try to register callbacks itself s.disable_cb_bind(); m_hierarch_bind=&s; base_type::bind(s); //satisfy SystemC } //operator notation for hierarchical bind void operator() (base_type& s) { bind(s); } //get access to sub port tlm::tlm_fw_transport_if* operator[](int i){return m_used_sockets[i];} //get the number of bound targets // NOTE: this is only valid at end of elaboration! unsigned int size() {return get_hierarch_bind()->get_sockets().size();} protected: using base_type::display_warning; using base_type::display_error; //implementation of base class interface base_type* get_hierarch_bind(){if (m_hierarch_bind) return m_hierarch_bind->get_hierarch_bind(); else return this;} void disable_cb_bind(){ m_beoe_disabled=true;} std::vector* >& get_binders(){return m_binders;} std::vector*>& get_sockets(){return m_sockets;} //vector of connected sockets std::vector*> m_sockets; std::vector*> m_used_sockets; //vector of binders that convert untagged interface into tagged interface std::vector*> m_binders; base_type* m_hierarch_bind; //pointer to hierarchical bound multi port bool m_beoe_disabled; // bool that remembers whether this socket shall bind callbacks or not callback_binder_bw m_dummy; //a callback binder that is bound to the underlying export // in case there was no real bind //callbacks as functors // (allows to pass the callback to another socket that does not know the type of the module that owns // the callbacks) typename callback_binder_bw::nb_func_type m_nb_f; typename callback_binder_bw::dmi_func_type m_dmi_f; }; template class multi_passthrough_initiator_socket_optional : public multi_passthrough_initiator_socket { typedef multi_passthrough_initiator_socket socket_b; public: multi_passthrough_initiator_socket_optional() : socket_b() {} explicit multi_passthrough_initiator_socket_optional(const char* name) : socket_b(name) {} }; } // namespace tlm_utils #endif // TLM_UTILS_MULTI_PASSTHROUGH_INITIATOR_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/multi_passthrough_target_socket.h0000644000175000017500000003005714342422106024545 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_MULTI_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ #define TLM_UTILS_MULTI_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ #include "tlm_utils/multi_socket_bases.h" namespace tlm_utils { /* This class implements a trivial multi target socket. The triviality refers to the fact that the socket does not do blocking to non-blocking or non-blocking to blocking conversions. It allows to connect multiple initiators to this socket. The user has to register callbacks for the fw interface methods he likes to use. The callbacks are basically equal to the fw interface methods but carry an additional integer that indicates to which index of this socket the calling initiator is connected. */ template class multi_passthrough_target_socket : public multi_target_base< BUSWIDTH, TYPES, N, POL> , public multi_to_multi_bind_base { public: //typedefs // tlm 2.0 types for nb_transport typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; // typedefs to keep the fn ptr notations short typedef sync_enum_type (MODULE::*nb_cb)(int, transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*b_cb)(int, transaction_type&, sc_core::sc_time&); typedef unsigned int (MODULE::*dbg_cb)(int, transaction_type& txn); typedef bool (MODULE::*dmi_cb)(int, transaction_type& txn, tlm::tlm_dmi& dmi); typedef multi_target_base base_type; typedef typename base_type::base_initiator_socket_type base_initiator_socket_type; static const char* default_name() { return sc_core::sc_gen_unique_name("multi_passthrough_target_socket"); } //CTOR explicit multi_passthrough_target_socket(const char* name = default_name()) : base_type(name) , m_hierarch_bind(0) , m_eoe_disabled(false) , m_export_callback_created(false) { } ~multi_passthrough_target_socket(){ //clean up everything allocated by 'new' for (unsigned int i=0; i >::get_interface()) { // We bind to a callback_binder that will be used as the first interface // i.e. calls to the sc_export will have the same ID as calls from the first initator // socket bound callback_binder_fw * binder; if (m_binders.size() == 0) { binder = new callback_binder_fw(this, m_binders.size()); m_binders.push_back(binder); m_export_callback_created = true; } else { binder = m_binders[0]; } sc_core::sc_export >::bind(*binder); } } //register callback for nb transport of fw interface void register_nb_transport_fw(MODULE* mod, nb_cb cb) { check_export_binding(); //warn if there already is a callback if (m_nb_f.is_valid()){ display_warning("NBTransport_bw callback already registered."); return; } //set the functor m_nb_f.set_function(mod, cb); } //register callback for b transport of fw interface void register_b_transport(MODULE* mod, b_cb cb) { check_export_binding(); //warn if there already is a callback if (m_b_f.is_valid()){ display_warning("BTransport callback already registered."); return; } //set the functor m_b_f.set_function(mod, cb); } //register callback for debug transport of fw interface void register_transport_dbg(MODULE* mod, dbg_cb cb) { check_export_binding(); //warn if there already is a callback if (m_dbg_f.is_valid()){ display_warning("DebugTransport callback already registered."); return; } //set the functor m_dbg_f.set_function(mod, cb); } //register callback for DMI of fw interface void register_get_direct_mem_ptr(MODULE* mod, dmi_cb cb) { check_export_binding(); //warn if there already is a callback if (m_dmi_f.is_valid()){ display_warning("DMI callback already registered."); return; } //set the functor m_dmi_f.set_function(mod, cb); } //Override virtual functions of the tlm_target_socket: // this function is called whenever an sc_port (as part of a init socket) // wants to bind to the export of the underlying tlm_target_socket //At this time a callback binder is created an returned to the sc_port // of the init socket, so that it binds to the callback binder virtual tlm::tlm_fw_transport_if& get_base_interface() { //error if this socket is already bound hierarchically if (m_hierarch_bind) display_error("Socket already bound hierarchically."); if (m_export_callback_created) { // consume binder created from the callback registration m_export_callback_created = false; } else { m_binders.push_back(new callback_binder_fw(this, m_binders.size())); } return *m_binders[m_binders.size()-1]; } // const overload not allowed for multi-sockets virtual const tlm::tlm_fw_transport_if& get_base_interface() const { display_error("'get_base_interface() const' not allowed for multi-sockets."); return base_type::get_base_interface(); } //just return the export of the underlying tlm_target_socket in case of a hierarchical bind virtual sc_core::sc_export >& get_base_export() { return *this; } //just return the export of the underlying tlm_target_socket in case of a hierarchical bind virtual const sc_core::sc_export >& get_base_export() const { return base_type::get_base_export(); } //the standard end of elaboration callback void end_of_elaboration(){ //'break' here if the socket was told not to do callback binding if (m_eoe_disabled) return; //get the callback binders and the multi binds of the top of the hierachical bind chain // NOTE: this could be the same socket if there is no hierachical bind std::vector* >& binders=get_hierarch_bind()->get_binders(); std::map*>& multi_binds=get_hierarch_bind()->get_multi_binds(); // complete binding only if there has been a real bind bool locally_unbound = (binders.size() == 1 && m_export_callback_created); // no call to get_base_interface has consumed the export - ignore if (locally_unbound && !m_hierarch_bind) return; // iterate over all binders for (unsigned int i=0; iset_callbacks(m_nb_f, m_b_f, m_dmi_f, m_dbg_f); //set the callbacks for the binder if (multi_binds.find(i)!=multi_binds.end()) //check if this connection is multi-multi //if so remember the interface m_sockets.push_back(multi_binds[i]); else{ //if we are bound to a normal socket //get the calling port and try to cast it into a tlm socket base base_initiator_socket_type* test=dynamic_cast(binders[i]->get_other_side()); if (!test){display_error("Not bound to tlm_socket.");} m_sockets.push_back(&test->get_base_interface()); //remember the interface } } } // // Bind multi target socket to multi target socket (hierarchical bind) // virtual void bind(base_type& s) { //warn if already bound hierarchically if (m_eoe_disabled){ display_warning("Socket already bound hierarchically. Bind attempt ignored."); return; } //disable our own end of elaboration call disable_cb_bind(); //inform the bound target socket that it is bound hierarchically now s.set_hierarch_bind((base_type*)this); base_type::bind(s); //satisfy SystemC } //operator notation for hierarchical bind void operator() (base_type& s) { bind(s); } //get access to sub port tlm::tlm_bw_transport_if* operator[](int i){return m_sockets[i];} //get number of bound initiators // NOTE: this is only valid at end of elaboration! unsigned int size(){return get_hierarch_bind()->get_binders().size();} protected: using base_type::display_warning; using base_type::display_error; //implementation of base class interface base_type* get_hierarch_bind(){if (m_hierarch_bind) return m_hierarch_bind->get_hierarch_bind(); else return this;} std::map*>& get_multi_binds(){return m_multi_binds;} void set_hierarch_bind(base_type* h){m_hierarch_bind=h;} tlm::tlm_fw_transport_if* get_last_binder(tlm::tlm_bw_transport_if* other){ m_multi_binds[m_binders.size()-1]=other; return m_binders[m_binders.size()-1]; } //map that stores to which index a multi init socket is connected // and the interface of the multi init socket std::map*> m_multi_binds; void disable_cb_bind(){ m_eoe_disabled=true;} std::vector* >& get_binders(){return m_binders;} //vector of connected sockets std::vector*> m_sockets; //vector of binders that convert untagged interface into tagged interface std::vector*> m_binders; base_type* m_hierarch_bind; //pointer to hierarchical bound multi port bool m_eoe_disabled; //bool that disables callback bindings at end of elaboration bool m_export_callback_created; //bool that indicates that a binder has been created from a callback registration //callbacks as functors // (allows to pass the callback to another socket that does not know the type of the module that owns // the callbacks) typename callback_binder_fw::nb_func_type m_nb_f; typename callback_binder_fw::b_func_type m_b_f; typename callback_binder_fw::debug_func_type m_dbg_f; typename callback_binder_fw::dmi_func_type m_dmi_f; }; template class multi_passthrough_target_socket_optional : public multi_passthrough_target_socket { typedef multi_passthrough_target_socket socket_b; public: multi_passthrough_target_socket_optional() : socket_b() {} explicit multi_passthrough_target_socket_optional(const char* name) : socket_b(name) {} }; } // namespace tlm_utils #endif // TLM_UTILS_MULTI_PASSTHROUGH_TARGET_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/instance_specific_extensions_int.h0000644000175000017500000001431414342422106024646 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_ #define TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_ #ifndef SC_BUILD // incluce full TLM, when not building the library #include #else #include "tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h" #endif // SC_BUILD namespace tlm_utils { class SC_API ispex_base; class SC_API instance_specific_extension_accessor; class SC_API instance_specific_extension_container; class instance_specific_extension_carrier; class instance_specific_extension_container_pool; } namespace tlm { SC_API_TEMPLATE_DECL_ tlm_array; } // namespace tlm namespace tlm_utils { //The private extension base. Similar to normal extension base, but without clone and free class SC_API ispex_base { friend class tlm::tlm_array; void free() {} // needed for explicit tlm_array instantiation public: virtual ~ispex_base() {} protected: static unsigned int register_private_extension(const std::type_info&); }; //this thing is basically a snippet of the generic_payload // it contains all the extension specific code (the extension API so to speak) // the differences are: // - it calls back to its owner whenever a real (==non-NULL) extension gets set for the first time // - it calls back to its owner whenever a living (==non-NULL) extension gets cleared class SC_API instance_specific_extensions_per_accessor { public: typedef instance_specific_extension_container container_type; explicit instance_specific_extensions_per_accessor(container_type* container) : m_container(container) {} template T* set_extension(T* ext) { return static_cast( set_extension(T::priv_id, ext) ); } // non-templatized version with manual index: ispex_base* set_extension(unsigned int index, ispex_base* ext); // Check for an extension, ext will point to 0 if not present template void get_extension(T*& ext) const { ext = static_cast(get_extension(T::priv_id)); } // Non-templatized version: ispex_base* get_extension(unsigned int index) const; // Clear extension, the argument is needed to find the right index: template void clear_extension(const T*) { clear_extension(T::priv_id); } // Non-templatized version with manual index void clear_extension(unsigned int index); // Make sure the extension array is large enough. Can be called once by // an initiator module (before issuing the first transaction) to make // sure that the extension array is of correct size. This is only needed // if the initiator cannot guarantee that the generic payload object is // allocated after C++ static construction time. void resize_extensions(); private: tlm::tlm_array m_extensions; container_type* m_container; }; // class instance_specific_extensions_per_accessor #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for vector #endif //this thing contains the vector of extensions per accessor //which can be really large so this one should be pool allocated // therefore it keeps a use_count of itself to automatically free itself // - to this end it provides callbacks to the extensions per accessor // to increment and decrement the use_count class SC_API instance_specific_extension_container { friend class instance_specific_extension_accessor; friend class instance_specific_extension_carrier; friend class instance_specific_extension_container_pool; friend class instance_specific_extensions_per_accessor; typedef void release_fn(instance_specific_extension_carrier*,void*); instance_specific_extension_container(); ~instance_specific_extension_container(); void resize(); void inc_use_count(); void dec_use_count(); static instance_specific_extension_container* create(); void attach_carrier(instance_specific_extension_carrier*, void* txn, release_fn*); instance_specific_extensions_per_accessor* get_accessor(unsigned int index); std::vector m_ispex_per_accessor; unsigned int use_count; void* m_txn; release_fn* m_release_fn; instance_specific_extension_carrier* m_carrier; instance_specific_extension_container* next; //for pooling }; // class instance_specific_extension_container #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif // ---------------------------------------------------------------------------- //This class 'hides' all the instance specific extension stuff from the user // he instantiates one of those (e.g. instance_specific_extension_accessor extAcc;) and can then access // the private extensions // extAcc(txn).extensionAPIFnCall() // where extensionAPIFnCall is set_extension, get_extension, clear_extension,... class SC_API instance_specific_extension_accessor { public: instance_specific_extension_accessor(); template // implementation in instance_specific_extensions.h inline instance_specific_extensions_per_accessor& operator()(T& txn); protected: template static void release_carrier(instance_specific_extension_carrier*, void* txn); unsigned int m_index; }; // class instance_specific_extension_accessor } // namespace tlm_utils #endif // TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_INT_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/simple_initiator_socket.h0000644000175000017500000002565414342422106023000 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_SIMPLE_INITIATOR_SOCKET_H_INCLUDED_ #define TLM_UTILS_SIMPLE_INITIATOR_SOCKET_H_INCLUDED_ #include #include "tlm_utils/convenience_socket_bases.h" namespace tlm_utils { template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class simple_initiator_socket_b : public tlm::tlm_initiator_socket , protected simple_socket_base { public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_initiator_socket base_type; public: static const char* default_name() { return sc_core::sc_gen_unique_name("simple_initiator_socket"); } explicit simple_initiator_socket_b(const char* n = default_name()) : base_type(n) , m_process(this) { this->m_export.bind(m_process); } void register_nb_transport_bw(MODULE* mod, sync_enum_type (MODULE::*cb)(transaction_type&, phase_type&, sc_core::sc_time&)) { m_process.set_transport_ptr(mod, cb); } void register_invalidate_direct_mem_ptr(MODULE* mod, void (MODULE::*cb)(sc_dt::uint64, sc_dt::uint64)) { m_process.set_invalidate_direct_mem_ptr(mod, cb); } private: class process : public tlm::tlm_bw_transport_if , protected convenience_socket_cb_holder { public: typedef sync_enum_type (MODULE::*TransportPtr)(transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*InvalidateDirectMemPtr)(sc_dt::uint64, sc_dt::uint64); explicit process(simple_socket_base* owner) : convenience_socket_cb_holder(owner), m_mod(0) , m_transport_ptr(0) , m_invalidate_direct_mem_ptr(0) { } void set_transport_ptr(MODULE* mod, TransportPtr p) { if (m_transport_ptr) { display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_ptr = p; } void set_invalidate_direct_mem_ptr(MODULE* mod, InvalidateDirectMemPtr p) { if (m_invalidate_direct_mem_ptr) { display_warning("invalidate DMI callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_invalidate_direct_mem_ptr = p; } sync_enum_type nb_transport_bw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_ptr)(trans, phase, t); } display_error("no transport callback registered"); return tlm::TLM_COMPLETED; } void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) { if (m_invalidate_direct_mem_ptr) { // forward call sc_assert(m_mod); (m_mod->*m_invalidate_direct_mem_ptr)(start_range, end_range); } } private: MODULE* m_mod; TransportPtr m_transport_ptr; InvalidateDirectMemPtr m_invalidate_direct_mem_ptr; }; private: const sc_core::sc_object* get_socket() const { return this; } private: process m_process; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_initiator_socket : public simple_initiator_socket_b { typedef simple_initiator_socket_b socket_b; public: simple_initiator_socket() : socket_b() {} explicit simple_initiator_socket(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_initiator_socket_optional : public simple_initiator_socket_b { typedef simple_initiator_socket_b socket_b; public: simple_initiator_socket_optional() : socket_b() {} explicit simple_initiator_socket_optional(const char* name) : socket_b(name) {} }; // Tagged version template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class simple_initiator_socket_tagged_b : public tlm::tlm_initiator_socket , protected simple_socket_base { public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_initiator_socket base_type; public: static const char* default_name() { return sc_core::sc_gen_unique_name("simple_initiator_socket_tagged"); } explicit simple_initiator_socket_tagged_b(const char* n = default_name()) : base_type(n) , m_process(this) { this->m_export.bind(m_process); } void register_nb_transport_bw(MODULE* mod, sync_enum_type (MODULE::*cb)(int, transaction_type&, phase_type&, sc_core::sc_time&), int id) { m_process.set_transport_ptr(mod, cb); m_process.set_transport_user_id(id); } void register_invalidate_direct_mem_ptr(MODULE* mod, void (MODULE::*cb)(int, sc_dt::uint64, sc_dt::uint64), int id) { m_process.set_invalidate_direct_mem_ptr(mod, cb); m_process.set_invalidate_dmi_user_id(id); } private: class process : public tlm::tlm_bw_transport_if , protected convenience_socket_cb_holder { public: typedef sync_enum_type (MODULE::*TransportPtr)(int, transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*InvalidateDirectMemPtr)(int, sc_dt::uint64, sc_dt::uint64); explicit process(simple_socket_base* owner) : convenience_socket_cb_holder(owner), m_mod(0) , m_transport_ptr(0) , m_invalidate_direct_mem_ptr(0) , m_transport_user_id(0) , m_invalidate_direct_mem_user_id(0) { } void set_transport_user_id(int id) { m_transport_user_id = id; } void set_invalidate_dmi_user_id(int id) { m_invalidate_direct_mem_user_id = id; } void set_transport_ptr(MODULE* mod, TransportPtr p) { if (m_transport_ptr) { display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_ptr = p; } void set_invalidate_direct_mem_ptr(MODULE* mod, InvalidateDirectMemPtr p) { if (m_invalidate_direct_mem_ptr) { display_warning("invalidate DMI callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_invalidate_direct_mem_ptr = p; } sync_enum_type nb_transport_bw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_ptr)(m_transport_user_id, trans, phase, t); } display_error("no transport callback registered"); return tlm::TLM_COMPLETED; } void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) { if (m_invalidate_direct_mem_ptr) { // forward call sc_assert(m_mod); (m_mod->*m_invalidate_direct_mem_ptr)(m_invalidate_direct_mem_user_id, start_range, end_range); } } private: MODULE* m_mod; TransportPtr m_transport_ptr; InvalidateDirectMemPtr m_invalidate_direct_mem_ptr; int m_transport_user_id; int m_invalidate_direct_mem_user_id; }; private: const sc_core::sc_object* get_socket() const { return this; } private: process m_process; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_initiator_socket_tagged : public simple_initiator_socket_tagged_b { typedef simple_initiator_socket_tagged_b socket_b; public: simple_initiator_socket_tagged() : socket_b() {} explicit simple_initiator_socket_tagged(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_initiator_socket_tagged_optional : public simple_initiator_socket_tagged_b { typedef simple_initiator_socket_tagged_b socket_b; public: simple_initiator_socket_tagged_optional() : socket_b() {} explicit simple_initiator_socket_tagged_optional(const char* name) : socket_b(name) {} }; } // namespace tlm_utils #endif // TLM_UTILS_SIMPLE_INITIATOR_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/convenience_socket_bases.cpp0000644000175000017500000000460114342422106023416 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "tlm_utils/convenience_socket_bases.h" #include "sysc/kernel/sc_object.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/utils/sc_report.h" #include namespace tlm_utils { void convenience_socket_base::display_warning(const char* text) const { std::stringstream s; s << get_socket()->name() << ": " << text; SC_REPORT_WARNING(get_report_type(), s.str().c_str()); } void convenience_socket_base::display_error(const char* text) const { std::stringstream s; s << get_socket()->name() << ": " << text; SC_REPORT_ERROR(get_report_type(), s.str().c_str()); } //simple helpers for warnings an errors to shorten in code notation void convenience_socket_cb_holder::display_warning(const char* msg) const { m_owner->display_warning(msg); } void convenience_socket_cb_holder::display_error(const char* msg) const { m_owner->display_error(msg); } const char* simple_socket_base::get_report_type() const { return "/OSCI_TLM-2/simple_socket"; } void simple_socket_base::elaboration_check(const char* action) const { if (sc_core::sc_get_curr_simcontext()->elaboration_done()) { std::stringstream s; s << " elaboration completed, " << action << " not allowed"; display_error(s.str().c_str()); } } const char* passthrough_socket_base::get_report_type() const { return "/OSCI_TLM-2/passthrough_socket"; } const char* multi_socket_base::get_report_type() const { return "/OSCI_TLM-2/multi_socket"; } } // namespace tlm_utils systemc-2.3.4/src/tlm_utils/simple_target_socket.h0000644000175000017500000010705314342422106022256 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // ***************************************************************************** // Modified by John Aynsley, Doulos, Feb 2009, // Fix a bug in simple_target_socket and simple_target_socket_tagged // with the addition of one new line of code in each: wait(*e); // ***************************************************************************** // ***************************************************************************** // Modified by John Aynsley on behalf of Robert Guenzel, May 2011, // Fix a bug in simple_target_socket and simple_target_socket_tagged // with the addition of one new line of code in each: wait(t); // ***************************************************************************** #ifndef TLM_UTILS_SIMPLE_TARGET_SOCKET_H_INCLUDED_ #define TLM_UTILS_SIMPLE_TARGET_SOCKET_H_INCLUDED_ #ifndef SC_INCLUDE_DYNAMIC_PROCESSES // needed for sc_spawn # define SC_INCLUDE_DYNAMIC_PROCESSES #endif #include #include #include "tlm_utils/convenience_socket_bases.h" #include "tlm_utils/peq_with_get.h" namespace tlm_utils { template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class simple_target_socket_b : public tlm::tlm_target_socket , protected simple_socket_base { friend class fw_process; friend class bw_process; public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_target_socket base_type; public: static const char* default_name() { return sc_core::sc_gen_unique_name("simple_target_socket"); } explicit simple_target_socket_b(const char* n = default_name()) : base_type(n) , m_fw_process(this) , m_bw_process(this) { bind(m_fw_process); } using base_type::bind; // bw transport must come thru us. tlm::tlm_bw_transport_if * operator ->() {return &m_bw_process;} // REGISTER_XXX void register_nb_transport_fw(MODULE* mod, sync_enum_type (MODULE::*cb)(transaction_type&, phase_type&, sc_core::sc_time&)) { elaboration_check("register_nb_transport_fw"); m_fw_process.set_nb_transport_ptr(mod, cb); } void register_b_transport(MODULE* mod, void (MODULE::*cb)(transaction_type&, sc_core::sc_time&)) { elaboration_check("register_b_transport"); m_fw_process.set_b_transport_ptr(mod, cb); } void register_transport_dbg(MODULE* mod, unsigned int (MODULE::*cb)(transaction_type&)) { elaboration_check("register_transport_dbg"); m_fw_process.set_transport_dbg_ptr(mod, cb); } void register_get_direct_mem_ptr(MODULE* mod, bool (MODULE::*cb)(transaction_type&, tlm::tlm_dmi&)) { elaboration_check("register_get_direct_mem_ptr"); m_fw_process.set_get_direct_mem_ptr(mod, cb); } protected: void start_of_simulation() { base_type::start_of_simulation(); m_fw_process.start_of_simulation(); } private: //make call on bw path. sync_enum_type bw_nb_transport(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) { return base_type::operator ->()->nb_transport_bw(trans, phase, t); } void bw_invalidate_direct_mem_ptr(sc_dt::uint64 s,sc_dt::uint64 e) { base_type::operator ->()->invalidate_direct_mem_ptr(s, e); } //Helper class to handle bw path calls // Needed to detect transaction end when called from b_transport. class bw_process : public tlm::tlm_bw_transport_if { public: bw_process(simple_target_socket_b *p_own) : m_owner(p_own) { } sync_enum_type nb_transport_bw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) { typename std::map::iterator it = m_owner->m_pending_trans.find(&trans); if(it == m_owner->m_pending_trans.end()) { // Not a blocking call, forward. return m_owner->bw_nb_transport(trans, phase, t); } if (phase == tlm::END_REQ) { m_owner->m_end_request.notify(sc_core::SC_ZERO_TIME); return tlm::TLM_ACCEPTED; } if (phase == tlm::BEGIN_RESP) { if (m_owner->m_current_transaction == &trans) { m_owner->m_end_request.notify(sc_core::SC_ZERO_TIME); } //TODO: add response-accept delay? it->second->notify(t); m_owner->m_pending_trans.erase(it); return tlm::TLM_COMPLETED; } m_owner->display_error("invalid phase received"); return tlm::TLM_COMPLETED; } void invalidate_direct_mem_ptr(sc_dt::uint64 s,sc_dt::uint64 e) { return m_owner->bw_invalidate_direct_mem_ptr(s, e); } private: simple_target_socket_b *m_owner; }; class fw_process : public tlm::tlm_fw_transport_if, public tlm::tlm_mm_interface { public: typedef sync_enum_type (MODULE::*NBTransportPtr)(transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*BTransportPtr)(transaction_type&, sc_core::sc_time&); typedef unsigned int (MODULE::*TransportDbgPtr)(transaction_type&); typedef bool (MODULE::*GetDirectMemPtr)(transaction_type&, tlm::tlm_dmi&); fw_process(simple_target_socket_b *p_own) : m_owner(p_own), m_mod(0), m_nb_transport_ptr(0), m_b_transport_ptr(0), m_transport_dbg_ptr(0), m_get_direct_mem_ptr(0), m_peq(sc_core::sc_gen_unique_name("m_peq")), m_response_in_progress(false) {} void start_of_simulation() { if (!m_b_transport_ptr && m_nb_transport_ptr) { // only spawn b2nb_thread, if needed sc_core::sc_spawn_options opts; opts.set_sensitivity(&m_peq.get_event()); opts.dont_initialize(); sc_core::sc_spawn(sc_bind(&fw_process::b2nb_thread, this), sc_core::sc_gen_unique_name("b2nb_thread"), &opts); } } void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p) { if (m_nb_transport_ptr) { m_owner->display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_nb_transport_ptr = p; } void set_b_transport_ptr(MODULE* mod, BTransportPtr p) { if (m_b_transport_ptr) { m_owner->display_warning("blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_b_transport_ptr = p; } void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p) { if (m_transport_dbg_ptr) { m_owner->display_warning("debug callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_dbg_ptr = p; } void set_get_direct_mem_ptr(MODULE* mod, GetDirectMemPtr p) { if (m_get_direct_mem_ptr) { m_owner->display_warning("get DMI pointer callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_get_direct_mem_ptr = p; } // Interface implementation sync_enum_type nb_transport_fw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_nb_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_nb_transport_ptr)(trans, phase, t); } // nb->b conversion if (m_b_transport_ptr) { if (phase == tlm::BEGIN_REQ) { // prepare thread to do blocking call process_handle_class * ph = m_process_handle.get_handle(&trans); if (!ph) { // create new dynamic process ph = new process_handle_class(&trans); m_process_handle.put_handle(ph); sc_core::sc_spawn_options opts; opts.dont_initialize(); opts.set_sensitivity(&ph->m_e); sc_core::sc_spawn(sc_bind(&fw_process::nb2b_thread,this, ph), sc_core::sc_gen_unique_name("nb2b_thread"), &opts); } ph->m_e.notify(t); return tlm::TLM_ACCEPTED; } if (phase == tlm::END_RESP) { m_response_in_progress = false; m_end_response.notify(t); return tlm::TLM_COMPLETED; } m_owner->display_error("invalid phase received"); return tlm::TLM_COMPLETED; } m_owner->display_error("no non-blocking transport callback registered"); return tlm::TLM_COMPLETED; } void b_transport(transaction_type& trans, sc_core::sc_time& t) { if (m_b_transport_ptr) { // forward call sc_assert(m_mod); (m_mod->*m_b_transport_ptr)(trans, t); return; } // b->nb conversion if (m_nb_transport_ptr) { m_peq.notify(trans, t); t = sc_core::SC_ZERO_TIME; mm_end_event_ext mm_ext; const bool mm_added = !trans.has_mm(); if (mm_added) { trans.set_mm(this); trans.set_auto_extension(&mm_ext); trans.acquire(); } // wait until transaction is finished sc_core::sc_event end_event; m_owner->m_pending_trans[&trans] = &end_event; sc_core::wait(end_event); if (mm_added) { // release will not delete the transaction, it will notify mm_ext.done trans.release(); if (trans.get_ref_count()) { sc_core::wait(mm_ext.done); } trans.set_mm(0); } return; } // should not be reached m_owner->display_error("no blocking transport callback registered"); } unsigned int transport_dbg(transaction_type& trans) { if (m_transport_dbg_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_dbg_ptr)(trans); } // No debug support return 0; } bool get_direct_mem_ptr(transaction_type& trans, tlm::tlm_dmi& dmi_data) { if (m_get_direct_mem_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_get_direct_mem_ptr)(trans, dmi_data); } // No DMI support dmi_data.allow_read_write(); dmi_data.set_start_address(0x0); dmi_data.set_end_address((sc_dt::uint64)-1); return false; } private: // dynamic process handler for nb2b conversion class process_handle_class { public: explicit process_handle_class(transaction_type * trans) : m_trans(trans),m_suspend(false) {} transaction_type* m_trans; sc_core::sc_event m_e; bool m_suspend; }; class process_handle_list { public: process_handle_list() {} ~process_handle_list() { for( typename std::vector::iterator it=v.begin(), end = v.end(); it != end; ++it ) delete *it; } process_handle_class* get_handle(transaction_type *trans) { typename std::vector::iterator it; for(it = v.begin(); it != v.end(); it++) { if ((*it)->m_suspend) { // found suspended dynamic process, re-use it (*it)->m_trans = trans; // replace to new one (*it)->m_suspend = false; return *it; } } return NULL; // no suspended process } void put_handle(process_handle_class* ph) { v.push_back(ph); } private: std::vector v; }; process_handle_list m_process_handle; void nb2b_thread(process_handle_class* h) { while(1) { transaction_type *trans = h->m_trans; sc_core::sc_time t = sc_core::SC_ZERO_TIME; // forward call sc_assert(m_mod); (m_mod->*m_b_transport_ptr)(*trans, t); sc_core::wait(t); // return path while (m_response_in_progress) { sc_core::wait(m_end_response); } t = sc_core::SC_ZERO_TIME; phase_type phase = tlm::BEGIN_RESP; sync_enum_type sync = m_owner->bw_nb_transport(*trans, phase, t); if ( !(sync == tlm::TLM_COMPLETED || (sync == tlm::TLM_UPDATED && phase == tlm::END_RESP)) ) { m_response_in_progress = true; } // suspend until next transaction h->m_suspend = true; sc_core::wait(); } } void b2nb_thread() { while (true) { transaction_type* trans; while ((trans = m_peq.get_next_transaction())!=0) { sc_assert(m_mod); sc_assert(m_nb_transport_ptr); phase_type phase = tlm::BEGIN_REQ; sc_core::sc_time t = sc_core::SC_ZERO_TIME; switch ((m_mod->*m_nb_transport_ptr)(*trans, phase, t)) { case tlm::TLM_COMPLETED: { // notify transaction is finished typename std::map::iterator it = m_owner->m_pending_trans.find(trans); sc_assert(it != m_owner->m_pending_trans.end()); it->second->notify(t); m_owner->m_pending_trans.erase(it); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: switch (phase) { case tlm::BEGIN_REQ: m_owner->m_current_transaction = trans; sc_core::wait(m_owner->m_end_request); m_owner->m_current_transaction = 0; break; case tlm::END_REQ: sc_core::wait(t); break; case tlm::BEGIN_RESP: { phase = tlm::END_RESP; sc_core::wait(t); // This line is a bug fix added in TLM-2.0.2 t = sc_core::SC_ZERO_TIME; (m_mod->*m_nb_transport_ptr)(*trans, phase, t); // notify transaction is finished typename std::map::iterator it = m_owner->m_pending_trans.find(trans); sc_assert(it != m_owner->m_pending_trans.end()); it->second->notify(t); m_owner->m_pending_trans.erase(it); break; } default: m_owner->display_error("invalid phase received"); } break; default: m_owner->display_error("invalid sync value received"); } } sc_core::wait(); } } void free(tlm::tlm_generic_payload* trans) { mm_end_event_ext* ext = trans->template get_extension(); sc_assert(ext); // notif event first before freeing extensions (reset) ext->done.notify(); trans->reset(); } private: struct mm_end_event_ext : public tlm::tlm_extension { tlm::tlm_extension_base* clone() const { return NULL; } void free() {} void copy_from(tlm::tlm_extension_base const &) {} sc_core::sc_event done; }; private: simple_target_socket_b *m_owner; MODULE* m_mod; NBTransportPtr m_nb_transport_ptr; BTransportPtr m_b_transport_ptr; TransportDbgPtr m_transport_dbg_ptr; GetDirectMemPtr m_get_direct_mem_ptr; peq_with_get m_peq; bool m_response_in_progress; sc_core::sc_event m_end_response; }; private: const sc_core::sc_object* get_socket() const { return this; } private: fw_process m_fw_process; bw_process m_bw_process; std::map m_pending_trans; sc_core::sc_event m_end_request; transaction_type* m_current_transaction = NULL; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_target_socket : public simple_target_socket_b { typedef simple_target_socket_b socket_b; public: simple_target_socket() : socket_b() {} explicit simple_target_socket(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_target_socket_optional : public simple_target_socket_b { typedef simple_target_socket_b socket_b; public: simple_target_socket_optional() : socket_b() {} explicit simple_target_socket_optional(const char* name) : socket_b(name) {} }; //ID Tagged version template< typename MODULE, unsigned int BUSWIDTH, typename TYPES , sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND > class simple_target_socket_tagged_b : public tlm::tlm_target_socket , protected simple_socket_base { friend class fw_process; friend class bw_process; public: typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; typedef tlm::tlm_fw_transport_if fw_interface_type; typedef tlm::tlm_bw_transport_if bw_interface_type; typedef tlm::tlm_target_socket base_type; public: static const char* default_name() { return sc_core::sc_gen_unique_name("simple_target_socket_tagged"); } explicit simple_target_socket_tagged_b(const char* n = default_name()) : base_type(n) , m_fw_process(this) , m_bw_process(this) { bind(m_fw_process); } using base_type::bind; // bw transport must come thru us. tlm::tlm_bw_transport_if * operator ->() {return &m_bw_process;} // REGISTER_XXX void register_nb_transport_fw(MODULE* mod, sync_enum_type (MODULE::*cb)(int id, transaction_type&, phase_type&, sc_core::sc_time&), int id) { elaboration_check("register_nb_transport_fw"); m_fw_process.set_nb_transport_ptr(mod, cb); m_fw_process.set_nb_transport_user_id(id); } void register_b_transport(MODULE* mod, void (MODULE::*cb)(int id, transaction_type&, sc_core::sc_time&), int id) { elaboration_check("register_b_transport"); m_fw_process.set_b_transport_ptr(mod, cb); m_fw_process.set_b_transport_user_id(id); } void register_transport_dbg(MODULE* mod, unsigned int (MODULE::*cb)(int id, transaction_type&), int id) { elaboration_check("register_transport_dbg"); m_fw_process.set_transport_dbg_ptr(mod, cb); m_fw_process.set_transport_dbg_user_id(id); } void register_get_direct_mem_ptr(MODULE* mod, bool (MODULE::*cb)(int id, transaction_type&, tlm::tlm_dmi&), int id) { elaboration_check("register_get_direct_mem_ptr"); m_fw_process.set_get_direct_mem_ptr(mod, cb); m_fw_process.set_get_dmi_user_id(id); } protected: void start_of_simulation() { base_type::start_of_simulation(); m_fw_process.start_of_simulation(); } private: //make call on bw path. sync_enum_type bw_nb_transport(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) { return base_type::operator ->()->nb_transport_bw(trans, phase, t); } void bw_invalidate_direct_mem_ptr(sc_dt::uint64 s,sc_dt::uint64 e) { base_type::operator ->()->invalidate_direct_mem_ptr(s, e); } //Helper class to handle bw path calls // Needed to detect transaction end when called from b_transport. class bw_process : public tlm::tlm_bw_transport_if { public: bw_process(simple_target_socket_tagged_b *p_own) : m_owner(p_own) { } sync_enum_type nb_transport_bw(transaction_type &trans, phase_type &phase, sc_core::sc_time &t) { typename std::map::iterator it = m_owner->m_pending_trans.find(&trans); if(it == m_owner->m_pending_trans.end()) { // Not a blocking call, forward. return m_owner->bw_nb_transport(trans, phase, t); } if (phase == tlm::END_REQ) { m_owner->m_end_request.notify(sc_core::SC_ZERO_TIME); return tlm::TLM_ACCEPTED; } if (phase == tlm::BEGIN_RESP) { if (m_owner->m_current_transaction == &trans) { m_owner->m_end_request.notify(sc_core::SC_ZERO_TIME); } //TODO: add response-accept delay? it->second->notify(t); m_owner->m_pending_trans.erase(it); return tlm::TLM_COMPLETED; } m_owner->display_error("invalid phase received"); return tlm::TLM_COMPLETED; } void invalidate_direct_mem_ptr(sc_dt::uint64 s,sc_dt::uint64 e) { return m_owner->bw_invalidate_direct_mem_ptr(s, e); } private: simple_target_socket_tagged_b *m_owner; }; class fw_process : public tlm::tlm_fw_transport_if, public tlm::tlm_mm_interface { public: typedef sync_enum_type (MODULE::*NBTransportPtr)(int id, transaction_type&, phase_type&, sc_core::sc_time&); typedef void (MODULE::*BTransportPtr)(int id, transaction_type&, sc_core::sc_time&); typedef unsigned int (MODULE::*TransportDbgPtr)(int id, transaction_type&); typedef bool (MODULE::*GetDirectMemPtr)(int id, transaction_type&, tlm::tlm_dmi&); fw_process(simple_target_socket_tagged_b *p_own) : m_owner(p_own), m_mod(0), m_nb_transport_ptr(0), m_b_transport_ptr(0), m_transport_dbg_ptr(0), m_get_direct_mem_ptr(0), m_nb_transport_user_id(0), m_b_transport_user_id(0), m_transport_dbg_user_id(0), m_get_dmi_user_id(0), m_peq(sc_core::sc_gen_unique_name("m_peq")), m_response_in_progress(false) {} void start_of_simulation() { if (!m_b_transport_ptr && m_nb_transport_ptr) { // only spawn b2nb_thread, if needed sc_core::sc_spawn_options opts; opts.set_sensitivity(&m_peq.get_event()); opts.dont_initialize(); sc_core::sc_spawn(sc_bind(&fw_process::b2nb_thread, this), sc_core::sc_gen_unique_name("b2nb_thread"), &opts); } } void set_nb_transport_user_id(int id) { m_nb_transport_user_id = id; } void set_b_transport_user_id(int id) { m_b_transport_user_id = id; } void set_transport_dbg_user_id(int id) { m_transport_dbg_user_id = id; } void set_get_dmi_user_id(int id) { m_get_dmi_user_id = id; } void set_nb_transport_ptr(MODULE* mod, NBTransportPtr p) { if (m_nb_transport_ptr) { m_owner->display_warning("non-blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_nb_transport_ptr = p; } void set_b_transport_ptr(MODULE* mod, BTransportPtr p) { if (m_b_transport_ptr) { m_owner->display_warning("blocking callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_b_transport_ptr = p; } void set_transport_dbg_ptr(MODULE* mod, TransportDbgPtr p) { if (m_transport_dbg_ptr) { m_owner->display_warning("debug callback already registered"); return; } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_transport_dbg_ptr = p; } void set_get_direct_mem_ptr(MODULE* mod, GetDirectMemPtr p) { if (m_get_direct_mem_ptr) { m_owner->display_warning("get DMI pointer callback already registered"); } sc_assert(!m_mod || m_mod == mod); m_mod = mod; m_get_direct_mem_ptr = p; } // Interface implementation sync_enum_type nb_transport_fw(transaction_type& trans, phase_type& phase, sc_core::sc_time& t) { if (m_nb_transport_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, trans, phase, t); } // nb->b conversion if (m_b_transport_ptr) { if (phase == tlm::BEGIN_REQ) { // prepare thread to do blocking call process_handle_class * ph = m_process_handle.get_handle(&trans); if (!ph) { // create new dynamic process ph = new process_handle_class(&trans); m_process_handle.put_handle(ph); sc_core::sc_spawn_options opts; opts.dont_initialize(); opts.set_sensitivity(&ph->m_e); sc_core::sc_spawn(sc_bind(&fw_process::nb2b_thread, this, ph), sc_core::sc_gen_unique_name("nb2b_thread"), &opts); } ph->m_e.notify(t); return tlm::TLM_ACCEPTED; } if (phase == tlm::END_RESP) { m_response_in_progress = false; m_end_response.notify(t); return tlm::TLM_COMPLETED; } m_owner->display_error("invalid phase"); return tlm::TLM_COMPLETED; } m_owner->display_error("no non-blocking transport callback registered"); return tlm::TLM_COMPLETED; } void b_transport(transaction_type& trans, sc_core::sc_time& t) { if (m_b_transport_ptr) { // forward call sc_assert(m_mod); (m_mod->*m_b_transport_ptr)(m_b_transport_user_id, trans, t); return; } // b->nb conversion if (m_nb_transport_ptr) { m_peq.notify(trans, t); t = sc_core::SC_ZERO_TIME; mm_end_event_ext mm_ext; const bool mm_added = !trans.has_mm(); if (mm_added){ trans.set_mm(this); trans.set_auto_extension(&mm_ext); trans.acquire(); } // wait until transaction is finished sc_core::sc_event end_event; m_owner->m_pending_trans[&trans] = &end_event; sc_core::wait(end_event); if (mm_added) { // release will not delete the transaction, it will notify mm_ext.done trans.release(); if (trans.get_ref_count()) { sc_core::wait(mm_ext.done); } trans.set_mm(0); } return; } m_owner->display_error("no transport callback registered"); } unsigned int transport_dbg(transaction_type& trans) { if (m_transport_dbg_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_transport_dbg_ptr)(m_transport_dbg_user_id, trans); } // No debug support return 0; } bool get_direct_mem_ptr(transaction_type& trans, tlm::tlm_dmi& dmi_data) { if (m_get_direct_mem_ptr) { // forward call sc_assert(m_mod); return (m_mod->*m_get_direct_mem_ptr)(m_get_dmi_user_id, trans, dmi_data); } // No DMI support dmi_data.allow_read_write(); dmi_data.set_start_address(0x0); dmi_data.set_end_address((sc_dt::uint64)-1); return false; } private: // dynamic process handler for nb2b conversion class process_handle_class { public: explicit process_handle_class(transaction_type * trans) : m_trans(trans),m_suspend(false){} transaction_type* m_trans; sc_core::sc_event m_e; bool m_suspend; }; class process_handle_list { public: process_handle_list() {} ~process_handle_list() { for( typename std::vector::iterator it=v.begin(), end = v.end(); it != end; ++it ) delete *it; } process_handle_class* get_handle(transaction_type *trans) { typename std::vector::iterator it; for(it = v.begin(); it != v.end(); it++) { if ((*it)->m_suspend) { // found suspended dynamic process, re-use it (*it)->m_trans = trans; // replace to new one (*it)->m_suspend = false; return *it; } } return NULL; // no suspended process } void put_handle(process_handle_class* ph) { v.push_back(ph); } private: std::vector v; }; process_handle_list m_process_handle; void nb2b_thread(process_handle_class* h) { while(1) { transaction_type * trans = h->m_trans; sc_core::sc_time t = sc_core::SC_ZERO_TIME; // forward call sc_assert(m_mod); (m_mod->*m_b_transport_ptr)(m_b_transport_user_id, *trans, t); sc_core::wait(t); // return path while (m_response_in_progress) { sc_core::wait(m_end_response); } t = sc_core::SC_ZERO_TIME; phase_type phase = tlm::BEGIN_RESP; sync_enum_type sync = m_owner->bw_nb_transport(*trans, phase, t); if ( !(sync == tlm::TLM_COMPLETED || (sync == tlm::TLM_UPDATED && phase == tlm::END_RESP)) ) { m_response_in_progress = true; } // suspend until next transaction h->m_suspend = true; sc_core::wait(); } } void b2nb_thread() { while (true) { transaction_type* trans; while ((trans = m_peq.get_next_transaction())!=0) { sc_assert(m_mod); sc_assert(m_nb_transport_ptr); phase_type phase = tlm::BEGIN_REQ; sc_core::sc_time t = sc_core::SC_ZERO_TIME; switch ((m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, *trans, phase, t)) { case tlm::TLM_COMPLETED: { // notify transaction is finished typename std::map::iterator it = m_owner->m_pending_trans.find(trans); sc_assert(it != m_owner->m_pending_trans.end()); it->second->notify(t); m_owner->m_pending_trans.erase(it); break; } case tlm::TLM_ACCEPTED: case tlm::TLM_UPDATED: switch (phase) { case tlm::BEGIN_REQ: m_owner->m_current_transaction = trans; sc_core::wait(m_owner->m_end_request); m_owner->m_current_transaction = 0; break; case tlm::END_REQ: sc_core::wait(t); break; case tlm::BEGIN_RESP: { phase = tlm::END_RESP; sc_core::wait(t); // This line is a bug fix added in TLM-2.0.2 t = sc_core::SC_ZERO_TIME; (m_mod->*m_nb_transport_ptr)(m_nb_transport_user_id, *trans, phase, t); // notify transaction is finished typename std::map::iterator it = m_owner->m_pending_trans.find(trans); sc_assert(it != m_owner->m_pending_trans.end()); it->second->notify(t); m_owner->m_pending_trans.erase(it); break; } default: m_owner->display_error("invalid phase received"); }; break; default: m_owner->display_error("invalid sync value received"); } } sc_core::wait(); } } void free(tlm::tlm_generic_payload* trans) { mm_end_event_ext* ext = trans->template get_extension(); sc_assert(ext); // notif event first before freeing extensions (reset) ext->done.notify(); trans->reset(); } private: struct mm_end_event_ext : public tlm::tlm_extension { tlm::tlm_extension_base* clone() const { return NULL; } void free() {} void copy_from(tlm::tlm_extension_base const &) {} sc_core::sc_event done; }; private: simple_target_socket_tagged_b *m_owner; MODULE* m_mod; NBTransportPtr m_nb_transport_ptr; BTransportPtr m_b_transport_ptr; TransportDbgPtr m_transport_dbg_ptr; GetDirectMemPtr m_get_direct_mem_ptr; int m_nb_transport_user_id; int m_b_transport_user_id; int m_transport_dbg_user_id; int m_get_dmi_user_id; peq_with_get m_peq; bool m_response_in_progress; sc_core::sc_event m_end_response; }; private: const sc_core::sc_object* get_socket() const { return this; } private: fw_process m_fw_process; bw_process m_bw_process; std::map m_pending_trans; sc_core::sc_event m_end_request; transaction_type* m_current_transaction; }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_target_socket_tagged : public simple_target_socket_tagged_b { typedef simple_target_socket_tagged_b socket_b; public: simple_target_socket_tagged() : socket_b() {} explicit simple_target_socket_tagged(const char* name) : socket_b(name) {} }; template< typename MODULE, unsigned int BUSWIDTH = 32 , typename TYPES = tlm::tlm_base_protocol_types > class simple_target_socket_tagged_optional : public simple_target_socket_tagged_b { typedef simple_target_socket_tagged_b socket_b; public: simple_target_socket_tagged_optional() : socket_b() {} explicit simple_target_socket_tagged_optional(const char* name) : socket_b(name) {} }; } // namespace tlm_utils #endif // TLM_UTILS_SIMPLE_TARGET_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/multi_socket_bases.h0000644000175000017500000003636014342422106021730 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_MULTI_SOCKET_BASES_H_INCLUDED_ #define TLM_UTILS_MULTI_SOCKET_BASES_H_INCLUDED_ #include #include "tlm_utils/convenience_socket_bases.h" #include namespace tlm_utils { template struct fn_container{ signature function; }; #define TLM_DEFINE_FUNCTOR(name) \ template \ inline TLM_RET_VAL static_##name( void* mod \ , void* fn \ , int index \ , TLM_FULL_ARG_LIST) \ { \ typedef fn_container fn_container_type; \ MODULE* tmp_mod=static_cast(mod); \ fn_container_type* tmp_cb =static_cast (fn); \ return (tmp_mod->*(tmp_cb->function))(index, TLM_ARG_LIST_WITHOUT_TYPES); \ }\ \ template \ inline void delete_fn_container_of_##name(void* fn) \ { \ typedef fn_container fn_container_type; \ fn_container_type* tmp_cb =static_cast (fn); \ if (tmp_cb) delete tmp_cb;\ } \ \ template \ class name##_functor{ \ public: \ typedef typename TRAITS::tlm_payload_type payload_type; \ typedef typename TRAITS::tlm_phase_type phase_type; \ typedef TLM_RET_VAL (*call_fn)(void*,void*, int, TLM_FULL_ARG_LIST); \ typedef void (*del_fn)(void*); \ \ name##_functor(): m_fn(0), m_del_fn(0), m_mod(0), m_mem_fn(0){} \ ~name##_functor(){if (m_del_fn) (*m_del_fn)(m_mem_fn);} \ \ template \ void set_function(MODULE* mod, TLM_RET_VAL (MODULE::*cb)(int, TLM_FULL_ARG_LIST)){ \ typedef fn_container fn_container_type; \ m_fn=&static_##name;\ m_del_fn=&delete_fn_container_of_##name;\ m_del_fn(m_mem_fn); \ fn_container_type* tmp= new fn_container_type(); \ tmp->function=cb; \ m_mod=static_cast(mod); \ m_mem_fn=static_cast(tmp); \ } \ \ TLM_RET_VAL operator()(int index, TLM_FULL_ARG_LIST){ \ return m_fn(m_mod,m_mem_fn, index, TLM_ARG_LIST_WITHOUT_TYPES); \ } \ \ bool is_valid(){return (m_mod!=0 && m_mem_fn!=0 && m_fn!=0);}\ \ protected: \ call_fn m_fn;\ del_fn m_del_fn; \ void* m_mod; \ void* m_mem_fn; \ private: \ name##_functor& operator=(const name##_functor&); \ } #define TLM_RET_VAL tlm::tlm_sync_enum #define TLM_FULL_ARG_LIST typename TRAITS::tlm_payload_type& txn, typename TRAITS::tlm_phase_type& ph, sc_core::sc_time& t #define TLM_ARG_LIST_WITHOUT_TYPES txn,ph,t TLM_DEFINE_FUNCTOR(nb_transport); #undef TLM_RET_VAL #undef TLM_FULL_ARG_LIST #undef TLM_ARG_LIST_WITHOUT_TYPES #define TLM_RET_VAL void #define TLM_FULL_ARG_LIST typename TRAITS::tlm_payload_type& txn, sc_core::sc_time& t #define TLM_ARG_LIST_WITHOUT_TYPES txn,t TLM_DEFINE_FUNCTOR(b_transport); #undef TLM_RET_VAL #undef TLM_FULL_ARG_LIST #undef TLM_ARG_LIST_WITHOUT_TYPES #define TLM_RET_VAL unsigned int #define TLM_FULL_ARG_LIST typename TRAITS::tlm_payload_type& txn #define TLM_ARG_LIST_WITHOUT_TYPES txn TLM_DEFINE_FUNCTOR(debug_transport); #undef TLM_RET_VAL #undef TLM_FULL_ARG_LIST #undef TLM_ARG_LIST_WITHOUT_TYPES #define TLM_RET_VAL bool #define TLM_FULL_ARG_LIST typename TRAITS::tlm_payload_type& txn, tlm::tlm_dmi& dmi #define TLM_ARG_LIST_WITHOUT_TYPES txn,dmi TLM_DEFINE_FUNCTOR(get_dmi_ptr); #undef TLM_RET_VAL #undef TLM_FULL_ARG_LIST #undef TLM_ARG_LIST_WITHOUT_TYPES #define TLM_RET_VAL void #define TLM_FULL_ARG_LIST sc_dt::uint64 l, sc_dt::uint64 u #define TLM_ARG_LIST_WITHOUT_TYPES l,u TLM_DEFINE_FUNCTOR(invalidate_dmi); #undef TLM_RET_VAL #undef TLM_FULL_ARG_LIST #undef TLM_ARG_LIST_WITHOUT_TYPES #undef TLM_DEFINE_FUNCTOR /* This class implements the fw interface. It allows to register a callback for each of the fw interface methods. The callbacks simply forward the fw interface call, but add the id (an int) of the callback binder to the signature of the call. */ template class callback_binder_fw : public tlm::tlm_fw_transport_if , protected convenience_socket_cb_holder { public: //typedefs according to the used TYPES class typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; //typedefs for the callbacks typedef nb_transport_functor nb_func_type; typedef b_transport_functor b_func_type; typedef debug_transport_functor debug_func_type; typedef get_dmi_ptr_functor dmi_func_type; //ctor: an ID is needed to create a callback binder callback_binder_fw(multi_socket_base* owner, int id) : convenience_socket_cb_holder(owner), m_id(id) , m_nb_f(0), m_b_f(0), m_dbg_f(0), m_dmi_f(0) , m_caller_port(0) {} //the nb_transport method of the fw interface sync_enum_type nb_transport_fw(transaction_type& txn, phase_type& p, sc_core::sc_time& t){ //check if a callback is registered if (m_nb_f && m_nb_f->is_valid()) { return (*m_nb_f)(m_id, txn, p, t); //do the callback } display_error("Call to nb_transport_fw without a registered callback for nb_transport_fw."); return tlm::TLM_COMPLETED; } //the b_transport method of the fw interface void b_transport(transaction_type& trans,sc_core::sc_time& t){ //check if a callback is registered if (m_b_f && m_b_f->is_valid()) { (*m_b_f)(m_id, trans,t); //do the callback return; } display_error("Call to b_transport without a registered callback for b_transport."); } //the DMI method of the fw interface bool get_direct_mem_ptr(transaction_type& trans, tlm::tlm_dmi& dmi_data){ //check if a callback is registered if (m_dmi_f && m_dmi_f->is_valid()) { return (*m_dmi_f)(m_id, trans,dmi_data); //do the callback } dmi_data.allow_none(); dmi_data.set_start_address(0x0); dmi_data.set_end_address((sc_dt::uint64)-1); return false; } //the debug method of the fw interface unsigned int transport_dbg(transaction_type& trans){ //check if a callback is registered if (m_dbg_f && m_dbg_f->is_valid()) { return (*m_dbg_f)(m_id, trans); //do the callback } return 0; } //the SystemC standard callback register_port: // - called when a port if bound to the interface // - allowd to find out who is bound to that callback binder void register_port(sc_core::sc_port_base& b, const char* /*name*/){ m_caller_port=&b; } //register callbacks for all fw interface methods at once void set_callbacks(nb_func_type& cb1, b_func_type& cb2, dmi_func_type& cb3, debug_func_type& cb4){ m_nb_f=&cb1; m_b_f=&cb2; m_dmi_f=&cb3; m_dbg_f=&cb4; } //getter method to get the port that is bound to that callback binder // NOTE: this will only return a valid value at end of elaboration // (but not before end of elaboration!) sc_core::sc_port_base* get_other_side(){return m_caller_port;} private: //the ID of the callback binder int m_id; //the callbacks nb_func_type* m_nb_f; b_func_type* m_b_f; debug_func_type* m_dbg_f; dmi_func_type* m_dmi_f; //the port bound to that callback binder sc_core::sc_port_base* m_caller_port; }; /* This class implements the bw interface. It allows to register a callback for each of the bw interface methods. The callbacks simply forward the bw interface call, but add the id (an int) of the callback binder to the signature of the call. */ template class callback_binder_bw : public tlm::tlm_bw_transport_if , protected convenience_socket_cb_holder { public: //typedefs according to the used TYPES class typedef typename TYPES::tlm_payload_type transaction_type; typedef typename TYPES::tlm_phase_type phase_type; typedef tlm::tlm_sync_enum sync_enum_type; //typedefs for the callbacks typedef nb_transport_functor nb_func_type; typedef invalidate_dmi_functor dmi_func_type; //ctor: an ID is needed to create a callback binder callback_binder_bw(multi_socket_base* owner, int id) : convenience_socket_cb_holder(owner), m_id(id) , m_nb_f(0), m_dmi_f(0) {} //the nb_transport method of the bw interface sync_enum_type nb_transport_bw(transaction_type& txn, phase_type& p, sc_core::sc_time& t){ //check if a callback is registered if (m_nb_f && m_nb_f->is_valid()) { return (*m_nb_f)(m_id, txn, p, t); //do the callback } display_error("Call to nb_transport_bw without a registered callback for nb_transport_bw"); return tlm::TLM_COMPLETED; } //the DMI method of the bw interface void invalidate_direct_mem_ptr(sc_dt::uint64 l, sc_dt::uint64 u){ //check if a callback is registered if (m_dmi_f && m_dmi_f->is_valid()) { (*m_dmi_f)(m_id,l,u); //do the callback } } //register callbacks for all bw interface methods at once void set_callbacks(nb_func_type& cb1, dmi_func_type& cb2){ m_nb_f=&cb1; m_dmi_f=&cb2; } private: //the ID of the callback binder int m_id; //the callbacks nb_func_type* m_nb_f; dmi_func_type* m_dmi_f; }; /* This class forms the base for multi initiator sockets, with fewer template parameters than the multi_init_base. This class is implementation-defined. */ template class multi_init_base_if { public: //this method shall return a vector of the callback binders of multi initiator socket virtual std::vector* >& get_binders()=0; //this method shall return a vector of all target interfaces bound to this multi init socket virtual std::vector*>& get_sockets()=0; protected: virtual ~multi_init_base_if() {} }; /* This class forms the base for multi initiator sockets. It enforces a multi initiator socket to implement all functions needed to do hierarchical bindings. */ template class multi_init_base : public tlm::tlm_initiator_socket , public multi_init_base_if , protected multi_socket_base { public: //typedef for the base type: the standard tlm initiator socket typedef tlm::tlm_initiator_socket base_type; //this method shall disable the code that does the callback binding // that registers callbacks to binders virtual void disable_cb_bind()=0; //this method shall return the multi_init_base to which the // multi_init_base is bound hierarchically // If the base is not bound hierarchically it shall return a pointer to itself virtual multi_init_base* get_hierarch_bind()=0; virtual tlm::tlm_socket_category get_socket_category() const { return tlm::TLM_MULTI_INITIATOR_SOCKET; } //ctor and dtor virtual ~multi_init_base(){} multi_init_base():base_type(sc_core::sc_gen_unique_name("multi_init_base")){} multi_init_base(const char* name):base_type(name){} private: const sc_core::sc_object* get_socket() const { return this; } }; /* This class forms the base for multi target sockets, with fewer template parameters than the multi_target_base. This class is implementation-defined. */ template class multi_target_base_if { public: //this method shall return a vector of the callback binders of multi initiator socket virtual std::vector* >& get_binders()=0; //this method shall return a map of all multi initiator sockets that are // bound to this multi target the key of the map is the index at which the // multi initiator i bound, while the value is the interface of the multi // initiator socket that is bound at that index virtual std::map*>& get_multi_binds()=0; protected: virtual ~multi_target_base_if() {} }; /* This class forms the base for multi target sockets. It enforces a multi target socket to implement all functions needed to do hierarchical bindings. */ template class multi_target_base : public tlm::tlm_target_socket , public multi_target_base_if , protected multi_socket_base { public: //typedef for the base type: the standard tlm target socket typedef tlm::tlm_target_socket base_type; //this method shall return the multi_init_base to which the // multi_init_base is bound hierarchically // If the base is not bound hierarchically it shall return a pointer to itself virtual multi_target_base* get_hierarch_bind()=0; //this method shall inform the multi target socket that it is bound // hierarchically and to which other multi target socket it is bound hierarchically virtual void set_hierarch_bind(multi_target_base*)=0; virtual tlm::tlm_socket_category get_socket_category() const { return tlm::TLM_MULTI_TARGET_SOCKET; } //ctor and dtor virtual ~multi_target_base(){} multi_target_base():base_type(sc_core::sc_gen_unique_name("multi_target_base")){} multi_target_base(const char* name):base_type(name){} private: const sc_core::sc_object* get_socket() const { return this; } }; /* All multi sockets must additionally derive from this class. It enforces a multi socket to implement a function needed to do multi init to multi target bindings. */ template class multi_to_multi_bind_base{ public: virtual ~multi_to_multi_bind_base(){} virtual tlm::tlm_fw_transport_if* get_last_binder(tlm::tlm_bw_transport_if*)=0; }; } // namespace tlm_utils #endif // TLM_UTILS_MULTI_SOCKET_BASES_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/instance_specific_extensions.cpp0000644000175000017500000001515514342422106024333 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "tlm_utils/instance_specific_extensions_int.h" #include "sysc/utils/sc_typeindex.h" // sc_typeindex #include #include namespace tlm { template class SC_API tlm_array; } // namespace tlm namespace tlm_utils { /* anonymous */ namespace { class ispex_registry // copied from tlm_gp.cpp { typedef unsigned int key_type; typedef std::map type_map; public: static ispex_registry& instance() { if (!instance_) // don't cleanup registry instance_ = new ispex_registry(); return *instance_; } unsigned int register_extension(sc_core::sc_type_index type) { type_map::const_iterator it = ids_.find( type ); if( it == ids_.end() ) { // new extension - generate/store ID type_map::value_type v( type, static_cast(ids_.size()) ); ids_.insert( v ); return v.second; } return it->second; } static unsigned int max_num_extensions() { return (instance_) ? instance().ids_.size() : 0; } private: static ispex_registry* instance_; type_map ids_; ispex_registry() /* = default */ {} }; // class ispex_registry ispex_registry* ispex_registry::instance_ = NULL; } // anonymous namespace unsigned int ispex_base::register_private_extension(const std::type_info& type) { return ispex_registry::instance().register_extension(type); } //Helper to do the numbering of private extension accessors static unsigned int max_num_ispex_accessors(bool increment=false) { static unsigned int max_num = 0; if (increment) ++max_num; return max_num; } // ---------------------------------------------------------------------------- //the pool for the container, plain as can be class instance_specific_extension_container_pool { instance_specific_extension_container_pool() : unused(NULL){} ~instance_specific_extension_container_pool(); public: static instance_specific_extension_container_pool& instance() { static instance_specific_extension_container_pool inst; return inst; } instance_specific_extension_container* create(); void free(instance_specific_extension_container*); private: instance_specific_extension_container* unused; }; // class instance_specific_extension_container_pool instance_specific_extension_container* instance_specific_extension_container_pool::create() { if (!unused) { unused =new instance_specific_extension_container(); } instance_specific_extension_container* tmp = unused; unused = unused->next; return tmp; } void instance_specific_extension_container_pool:: free(instance_specific_extension_container* cont) { cont->next=unused; unused=cont; } instance_specific_extension_container_pool:: ~instance_specific_extension_container_pool() { while(unused) { instance_specific_extension_container* tmp = unused; unused=unused->next; delete tmp; } } // ---------------------------------------------------------------------------- instance_specific_extension_container* instance_specific_extension_container::create() { return instance_specific_extension_container_pool::instance().create(); } instance_specific_extension_container::instance_specific_extension_container() : use_count(0) , m_txn(NULL) , m_release_fn(NULL) , m_carrier(NULL) , next(NULL) { resize(); } void instance_specific_extension_container:: attach_carrier(instance_specific_extension_carrier* carrier, void* txn, release_fn* rel_fn) { m_txn = txn; m_release_fn = rel_fn; m_carrier = carrier; } void instance_specific_extension_container::resize() { m_ispex_per_accessor.resize( max_num_ispex_accessors() ); for (unsigned int i=0; i < m_ispex_per_accessor.size(); ++i) { m_ispex_per_accessor[i] = new instance_specific_extensions_per_accessor(this); m_ispex_per_accessor[i]->resize_extensions(); } } instance_specific_extension_container:: ~instance_specific_extension_container() { for (unsigned int i=0; iinc_use_count(); return tmp; } ispex_base* instance_specific_extensions_per_accessor:: get_extension(unsigned int index) const { return (index < m_extensions.size()) ? m_extensions[index] : NULL; } void instance_specific_extensions_per_accessor:: clear_extension(unsigned int index) { if (index < m_extensions.size()) { if (m_extensions[index]) m_container->dec_use_count(); m_extensions[index] = static_cast(0); } } void instance_specific_extensions_per_accessor::resize_extensions() { m_extensions.expand(ispex_registry::max_num_extensions()); } // ---------------------------------------------------------------------------- instance_specific_extension_accessor::instance_specific_extension_accessor() : m_index(max_num_ispex_accessors(true)-1) {} } // namespace tlm_utils systemc-2.3.4/src/tlm_utils/instance_specific_extensions.h0000644000175000017500000001121314342422106023767 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* Instance specific extensions, are extension that only a single instance of a module may access. They are invisible to all other modules; they are private to this instance so to speak. As they are only of value to a certain instance, this instance knows very well when it needs them and when it does not need them any longer (usually when a transaction passes through a module for the last time). It does not have to care if anyone else in the system may still have a reference to the transaction as this one is not able to access the extension anyway. Therefore the instance is obliged to call set_extension when it wants to add a private extension and clear_extension when it does not need it any more. To get access to an instance specifc extension the module must own a so called instance_specific_extension_accessor that provides the exclusive access rights. Assuming the instance_specific_extension_accessor of a given module is called m_accessor and the transaction of which the private extension is about to be accessed is called txn, then the calls have to be m_accessor(txn).set_extension(...); or m_accessor(txn).clear_extension(...); The owner of the private extension is responsible to allocate/deallocate the extension before/after setting/clearing the extension. */ #ifndef TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_H_INCLUDED_ #define TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_H_INCLUDED_ #include "tlm_utils/instance_specific_extensions_int.h" namespace tlm_utils { //The templated private extension. Similar to normal extension template class instance_specific_extension : public ispex_base { public: virtual ~instance_specific_extension() {} const static unsigned int priv_id; }; template const unsigned int instance_specific_extension::priv_id = ispex_base::register_private_extension(typeid(T)); // ---------------------------------------------------------------------------- // This is the class that actually sits in the extension array // - we keep this small since that one gets allocated and deallocated all the times // - we keep the implementation in the header to avoid registration // of the extension itself unless used in the model class instance_specific_extension_carrier : public tlm::tlm_extension { friend class instance_specific_extension_accessor; public: instance_specific_extension_carrier() : m_container() {} virtual tlm::tlm_extension_base* clone() const { //we don't clone since private info is instance specific and associated to a given txn (the original) //so the deep copied txn will be virgin in terms of private info return NULL; } void copy_from(tlm::tlm_extension_base const &) { return; } void free() { return; } private: instance_specific_extension_container* m_container; }; // ---------------------------------------------------------------------------- template instance_specific_extensions_per_accessor& instance_specific_extension_accessor::operator()(T& txn) { instance_specific_extension_carrier* carrier = NULL; txn.get_extension(carrier); if (!carrier) { carrier = new instance_specific_extension_carrier(); carrier->m_container = instance_specific_extension_container::create(); carrier->m_container->attach_carrier(carrier, &txn, &release_carrier); txn.set_extension(carrier); } return *carrier->m_container->get_accessor(m_index); } template void instance_specific_extension_accessor:: release_carrier(instance_specific_extension_carrier* carrier, void* txn) { T* typed_txn = static_cast(txn); typed_txn->clear_extension(carrier); delete carrier; } } // namespace tlm_utils #endif // TLM_UTILS_INSTANCE_SPECIFIC_EXTENSIONS_H_INCLUDED_ systemc-2.3.4/src/tlm_utils/tlm_quantumkeeper.h0000644000175000017500000001236514342422106021612 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // 20-Mar-2009 John Aynsley Add set_and_sync() method #ifndef __TLM_QUANTUMKEEPER_H__ #define __TLM_QUANTUMKEEPER_H__ #include "tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h" namespace tlm_utils { // // tlm_quantumkeeper class // // The tlm_quantumkeeper class is used to keep track of the local time in // an initiator (how much it has run ahead of the SystemC time), to // synchronize with SystemC time etc. // class tlm_quantumkeeper { public: // // Static setters/getters for the global quantum value. // // The global quantum is the maximum time an initiator can run ahead of // systemC time. All initiators will synchronize on timingpoints that are // multiples of the global quantum value. // static void set_global_quantum(const sc_core::sc_time& t) { tlm::tlm_global_quantum::instance().set(t); } static const sc_core::sc_time& get_global_quantum() { return tlm::tlm_global_quantum::instance().get(); } public: tlm_quantumkeeper() : m_next_sync_point(sc_core::SC_ZERO_TIME), m_local_time(sc_core::SC_ZERO_TIME) { } virtual ~tlm_quantumkeeper() {} // // Increment the local time (the time the initiator is ahead of the // systemC time) After incrementing the local time an initiator should // check (with the need_sync method) if a sync is required. // virtual void inc(const sc_core::sc_time& t) { m_local_time += t; } // // Sets the local time (the time the initiator is ahead of the // systemC time) After changing the local time an initiator should // check (with the need_sync method) if a sync is required. // virtual void set(const sc_core::sc_time& t) { m_local_time = t; } // // Checks if a sync to systemC is required for this initiator. This will // be the case if the local time becomes greater than the local (current) // quantum value for this initiator. // virtual bool need_sync() const { return sc_core::sc_time_stamp() + m_local_time >= m_next_sync_point; } // // Synchronize to systemC. This call will do a wait for the time the // initiator was running ahead of systemC time and reset the // tlm_quantumkeeper. // virtual void sync() { sc_core::wait(m_local_time); reset(); } // // Non-virtual convenience method to set the local time and sync only if needed // void set_and_sync(const sc_core::sc_time& t) { set(t); if (need_sync()) sync(); } // // Resets the local time to SC_ZERO_TIME and computes the value of the // next local quantum. This method should be called by an initiator after // a wait because of a synchronization request by a target (TLM_ACCEPTED, // or TLM_UPDATED). // virtual void reset() { m_local_time = sc_core::SC_ZERO_TIME; m_next_sync_point = sc_core::sc_time_stamp() + compute_local_quantum(); } // // Helper function to get the current systemC time, taken the local time // into account. The current systemC time is calculated as the time // returned by sc_time_stamp incremeneted with the time the initiator is // running ahead. // virtual sc_core::sc_time get_current_time() const { return sc_core::sc_time_stamp() + m_local_time; } // // Helper functions to get the time the initiator is running ahead of // systenC (local time). This time should be passed to a target in the // nb_transport call // virtual sc_core::sc_time get_local_time() const { return m_local_time; } protected: // // Calculate the next local quantum for this initiator. // // The method can be overloaded in a derived object if an initiator wants // to use another local quantum. This derived object should also take the // global quantum into account. It's local quantum should not be set to a // value that is larger than the quantum returned by the // compute_local_quantum of the tlm_global_quantum singleton. // virtual sc_core::sc_time compute_local_quantum() { return tlm::tlm_global_quantum::instance().compute_local_quantum(); } protected: sc_core::sc_time m_next_sync_point; sc_core::sc_time m_local_time; }; } // namespace tlm #endif systemc-2.3.4/src/tlm_utils/convenience_socket_bases.h0000644000175000017500000000505414342422106023066 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_UTILS_CONVENIENCE_SOCKET_BASES_H_INCLUDED_ #define TLM_UTILS_CONVENIENCE_SOCKET_BASES_H_INCLUDED_ #include namespace sc_core { class SC_API sc_object; } namespace tlm_utils { // implementation-defined base class helper for convenience sockets class SC_API convenience_socket_base { public: void display_warning(const char* msg) const; void display_error(const char* msg) const; protected: virtual ~convenience_socket_base(){} private: virtual const char* get_report_type() const = 0; virtual const sc_core::sc_object* get_socket() const = 0; }; // implementation-defined base class helper for simple sockets class SC_API simple_socket_base : public convenience_socket_base { virtual const char* get_report_type() const; protected: void elaboration_check(const char* action) const; }; // implementation-defined base class helper for passthrough sockets class SC_API passthrough_socket_base : public convenience_socket_base { virtual const char* get_report_type() const; }; // implementation-defined base class helper for multi sockets class SC_API multi_socket_base : public convenience_socket_base { virtual const char* get_report_type() const; }; // implementation-defined base class for callback helpers class SC_API convenience_socket_cb_holder { public: void display_warning(const char* msg) const; void display_error(const char* msg) const; protected: explicit convenience_socket_cb_holder(convenience_socket_base* owner) : m_owner(owner) {} private: convenience_socket_base* m_owner; }; } // namespace tlm_utils #endif // TLM_UTILS_CONVENIENCE_SOCKET_BASES_H_INCLUDED_ systemc-2.3.4/src/Makefile.am0000644000175000017500000000543614342422106015720 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc # order of SUBDIRS is important, sysc needs to go first: SUBDIRS = \ sysc \ tlm_core \ tlm_utils \ . H_FILES = \ systemc \ systemc.h \ tlm \ tlm.h nobase_include_HEADERS = $(H_FILES) libarchdir = $(libdir)$(LIB_ARCH_SUFFIX) libarch_LTLIBRARIES = libsystemc.la pkgconfigdir = $(libarchdir)/pkgconfig pkgconfig_DATA = \ systemc.pc \ tlm.pc EXTRA_DIST += \ README_TLM.txt \ CMakeLists.txt # no own sources here libsystemc_la_SOURCES = # dummy C++ source to cause C++ linking nodist_EXTRA_libsystemc_la_SOURCES = sc_nonexistent.cpp # add main libraries libsystemc_la_LIBADD = \ tlm_utils/libtlm_utils.la \ tlm_core/libtlm_core.la \ sysc/libsysc.la # either for async_update locking or pthread processes if USES_PTHREADS_LIB # Libtool/GCC do not play well together on some platforms # with C++ libraries and libpthread dependency, see e.g. # http://lists.gnu.org/archive/html/libtool/2012-02/msg00003.html libsystemc_la_LIBADD+=$(EXPLICIT_LPTHREAD) endif libsystemc_la_LDFLAGS = $(EXTRA_LDFLAGS) -release $(VERSION) uninstall-hook: test ! -d "$(includedir)" || rmdir --ignore-fail-on-non-empty "$(includedir)" test ! -d "$(pkgconfigdir)" || rmdir --ignore-fail-on-non-empty "$(pkgconfigdir)" test ! -d "$(libarchdir)" || rmdir --ignore-fail-on-non-empty "$(libarchdir)" ## Taf! systemc-2.3.4/src/tlm.pc.in0000644000175000017500000000272314342422106015405 0ustar carstencarsten# 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. # # ------------------------------------------------------------------------- # # tlm.pc.in -- # pkg-config definition file (template) for TLM-2.0 # (http://www.freedesktop.org/wiki/Software/pkg-config/) # # Author: Philipp A. Hartmann, OFFIS, 2013-05-07 # # Note: The "real" definition (tlm.pc) is generated by "configure" # during the build configuration. # # ------------------------------------------------------------------------- # prefix=@prefix@ exec_prefix=@exec_prefix@ includedir=@includedir@ Name: TLM-2.0 Description: Accellera TLM-2.0 proof-of-concept library Version: @TLM_PACKAGE_VERSION@ URL: @PACKAGE_URL@ Requires: systemc >= 2.1.v1 Cflags: -I${includedir} systemc-2.3.4/src/tlm_core/0000755000175000017500000000000014342422106015460 5ustar carstencarstensystemc-2.3.4/src/tlm_core/Makefile.am0000644000175000017500000001027314342422106017517 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/tlm_core/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Philipp A. Hartmann, OFFIS, 2013-05-17 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc H_FILES = \ tlm_2/tlm_version.h \ tlm_2/tlm_2_interfaces/tlm_2_interfaces.h \ tlm_2/tlm_2_interfaces/tlm_dmi.h \ tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h \ \ tlm_2/tlm_generic_payload/tlm_array.h \ tlm_2/tlm_generic_payload/tlm_endian_conv.h \ tlm_2/tlm_generic_payload/tlm_generic_payload.h \ tlm_2/tlm_generic_payload/tlm_gp.h \ tlm_2/tlm_generic_payload/tlm_helpers.h \ tlm_2/tlm_generic_payload/tlm_phase.h \ \ tlm_2/tlm_quantum/tlm_global_quantum.h \ tlm_2/tlm_quantum/tlm_quantum.h \ \ tlm_2/tlm_sockets/tlm_base_socket_if.h \ tlm_2/tlm_sockets/tlm_initiator_socket.h \ tlm_2/tlm_sockets/tlm_sockets.h \ tlm_2/tlm_sockets/tlm_target_socket.h \ \ tlm_1/tlm_analysis/tlm_analysis.h \ tlm_1/tlm_analysis/tlm_analysis_fifo.h \ tlm_1/tlm_analysis/tlm_analysis_if.h \ tlm_1/tlm_analysis/tlm_analysis_port.h \ tlm_1/tlm_analysis/tlm_analysis_triple.h \ tlm_1/tlm_analysis/tlm_write_if.h \ \ tlm_1/tlm_req_rsp/tlm_req_rsp.h \ tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h \ tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h \ tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h \ tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h \ \ tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h \ \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/circular_buffer.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_peek.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_put_get.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_resize.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h \ tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h \ \ tlm_1/tlm_req_rsp/tlm_ports/tlm_event_finder.h \ tlm_1/tlm_req_rsp/tlm_ports/tlm_nonblocking_port.h CXX_FILES = \ tlm_2/tlm_generic_payload/tlm_gp.cpp \ tlm_2/tlm_generic_payload/tlm_phase.cpp \ tlm_2/tlm_quantum/tlm_global_quantum.cpp EXTRA_DIST += \ tlm_1/README.txt \ tlm_2/README.txt INCDIRS = \ tlm_2/tlm_2_interfaces \ tlm_2/tlm_generic_payload \ tlm_2/tlm_quantum \ tlm_2/tlm_sockets \ tlm_2 \ tlm_1/tlm_analysis \ tlm_1/tlm_req_rsp/tlm_1_interfaces \ tlm_1/tlm_req_rsp/tlm_adapters \ tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo \ tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels \ tlm_1/tlm_req_rsp/tlm_channels \ tlm_1/tlm_req_rsp/tlm_ports \ tlm_1/tlm_req_rsp \ tlm_1 localincludedir = $(includedir)/tlm_core nobase_localinclude_HEADERS = $(H_FILES) noinst_LTLIBRARIES = libtlm_core.la libtlm_core_la_SOURCES = $(NO_H_FILES) $(CXX_FILES) uninstall-hook: test ! -d "$(localincludedir)" || ( set -e ; cd "$(localincludedir)"; \ for dir in $(INCDIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir "$(localincludedir)" ) systemc-2.3.4/src/tlm_core/tlm_2/0000755000175000017500000000000014342422106016475 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_2/tlm_quantum/0000755000175000017500000000000014342422106021043 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h0000644000175000017500000000477314342422106025115 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM2_TLM_GLOBAL_QUANTUM_H_INCLUDED_ #define TLM_CORE_TLM2_TLM_GLOBAL_QUANTUM_H_INCLUDED_ #include "sysc/kernel/sc_time.h" namespace tlm { // // tlm_global_quantum class // // The global quantum is the maximum time an initiator can run ahead of // SystemC time. All initiators should synchronize on timingpoints that // are multiples of the global quantum value. // // sc_set_time_resolution can only be called before the first // sc_time object is created. This means that after setting the // global quantum it will not be possible to call sc_set_time_resolution. // If sc_set_time_resolution must be called this must be done before // the global quantum is set. // class SC_API tlm_global_quantum { public: // // Returns a reference to the tlm_global_quantum singleton // static tlm_global_quantum& instance(); public: // // Setter/getter for the global quantum // void set(const sc_core::sc_time& t) { m_global_quantum = t; } const sc_core::sc_time& get() const { return m_global_quantum; } // // This function will calculate the maximum value for the next local // quantum for an initiator. All initiators should synchronize on // integer multiples of the global quantum value. The value for the // local quantum of an initiator can be smaller, but should never be // greater than the value returned by this method. // sc_core::sc_time compute_local_quantum(); protected: tlm_global_quantum(); protected: sc_core::sc_time m_global_quantum; }; } // namespace tlm #endif // TLM_CORE_TLM2_TLM_GLOBAL_QUANTUM_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.cpp0000644000175000017500000000314314342422106025436 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h" #include "sysc/kernel/sc_simcontext.h" // sc_time_stamp namespace tlm { tlm_global_quantum::tlm_global_quantum() : m_global_quantum(sc_core::SC_ZERO_TIME) {} tlm_global_quantum& tlm_global_quantum::instance() { static tlm_global_quantum instance_; return instance_; } sc_core::sc_time tlm_global_quantum::compute_local_quantum() { if (m_global_quantum != sc_core::SC_ZERO_TIME) { const sc_core::sc_time current = sc_core::sc_time_stamp(); const sc_core::sc_time g_quant = m_global_quantum; return g_quant - (current % g_quant); } else { return sc_core::SC_ZERO_TIME; } } } // namespace tlm systemc-2.3.4/src/tlm_core/tlm_2/tlm_quantum/tlm_quantum.h0000644000175000017500000000220014342422106023554 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM2_TLM_QUANTUM_H_INCLUDED_ #define TLM_CORE_TLM2_TLM_QUANTUM_H_INCLUDED_ #include "tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h" #endif // TLM_CORE_TLM2_TLM_QUANTUM_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_2/tlm_2_interfaces/0000755000175000017500000000000014342422106021715 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_2/tlm_2_interfaces/tlm_2_interfaces.h0000644000175000017500000000215714342422106025313 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_2_INTERFACES_H__ #define __TLM_2_INTERFACES_H__ #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_dmi.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h" #endif systemc-2.3.4/src/tlm_core/tlm_2/tlm_2_interfaces/tlm_dmi.h0000644000175000017500000001172114342422106023515 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_DMI_H__ #define __TLM_DMI_H__ #include namespace tlm { class tlm_dmi { public: // Enum for indicating the access granted to the initiator. // The initiator uses gp.m_command to indicate it intention (read/write) // The target is allowed to promote DMI_ACCESS_READ or DMI_ACCESS_WRITE // requests to dmi_access_read_write. enum dmi_access_e { DMI_ACCESS_NONE = 0x00 // no access , DMI_ACCESS_READ = 0x01 // read access , DMI_ACCESS_WRITE = 0x02 // write access , DMI_ACCESS_READ_WRITE = DMI_ACCESS_READ | DMI_ACCESS_WRITE // read/write access }; tlm_dmi (void) { init(); } void init (void) { m_dmi_ptr = 0x0; m_dmi_start_address = 0x0; m_dmi_end_address = (sc_dt::uint64)(-1); m_dmi_access = DMI_ACCESS_NONE; m_dmi_read_latency = sc_core::SC_ZERO_TIME; m_dmi_write_latency = sc_core::SC_ZERO_TIME; } unsigned char* get_dmi_ptr (void) const {return m_dmi_ptr;} sc_dt::uint64 get_start_address (void) const {return m_dmi_start_address;} sc_dt::uint64 get_end_address (void) const {return m_dmi_end_address;} sc_core::sc_time get_read_latency (void) const {return m_dmi_read_latency;} sc_core::sc_time get_write_latency (void) const {return m_dmi_write_latency;} dmi_access_e get_granted_access (void) const {return m_dmi_access;} bool is_none_allowed (void) const {return m_dmi_access == DMI_ACCESS_NONE;} bool is_read_allowed (void) const {return (m_dmi_access & DMI_ACCESS_READ) == DMI_ACCESS_READ;} bool is_write_allowed (void) const {return (m_dmi_access & DMI_ACCESS_WRITE) == DMI_ACCESS_WRITE;} bool is_read_write_allowed (void) const {return (m_dmi_access & DMI_ACCESS_READ_WRITE) == DMI_ACCESS_READ_WRITE;} void set_dmi_ptr (unsigned char* p) {m_dmi_ptr = p;} void set_start_address (sc_dt::uint64 addr) {m_dmi_start_address = addr;} void set_end_address (sc_dt::uint64 addr) {m_dmi_end_address = addr;} void set_read_latency (sc_core::sc_time t) {m_dmi_read_latency = t;} void set_write_latency (sc_core::sc_time t) {m_dmi_write_latency = t;} void set_granted_access (dmi_access_e a) {m_dmi_access = a;} void allow_none (void) {m_dmi_access = DMI_ACCESS_NONE;} void allow_read (void) {m_dmi_access = DMI_ACCESS_READ;} void allow_write (void) {m_dmi_access = DMI_ACCESS_WRITE;} void allow_read_write (void) {m_dmi_access = DMI_ACCESS_READ_WRITE;} private: // If the forward call is successful, the target returns the dmi_ptr, // which must point to the data element corresponding to the // dmi_start_address. The data is organized as a byte array with the // endianness of the target (endianness member of the tlm_dmi struct). unsigned char* m_dmi_ptr; // The absolute start and end addresses of the DMI region. If the decoder // logic in the interconnect changes the address field e.g. by masking, the // interconnect is responsible to transform the relative address back to an // absolute address again. sc_dt::uint64 m_dmi_start_address; sc_dt::uint64 m_dmi_end_address; // Granted access dmi_access_e m_dmi_access; // These members define the latency of read/write transactions. The // initiator must initialize these members to zero before requesting a // dmi pointer, because both the interconnect as well as the target can // add to the total transaction latency. // Depending on the 'type' attribute only one, or both of these attributes // will be valid. sc_core::sc_time m_dmi_read_latency; sc_core::sc_time m_dmi_write_latency; }; } // namespace tlm #endif /* TLM_DMI_HEADER */ systemc-2.3.4/src/tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h0000644000175000017500000002463114342422106024715 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_FW_BW_IFS_H__ #define __TLM_FW_BW_IFS_H__ #include #include "tlm_core/tlm_2/tlm_generic_payload/tlm_generic_payload.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_dmi.h" namespace tlm { enum tlm_sync_enum { TLM_ACCEPTED, TLM_UPDATED, TLM_COMPLETED }; //////////////////////////////////////////////////////////////////////////// // Basic interfaces //////////////////////////////////////////////////////////////////////////// template class tlm_fw_nonblocking_transport_if : public virtual sc_core::sc_interface { public: virtual tlm_sync_enum nb_transport_fw(TRANS& trans, PHASE& phase, sc_core::sc_time& t) = 0; }; template class tlm_bw_nonblocking_transport_if : public virtual sc_core::sc_interface { public: virtual tlm_sync_enum nb_transport_bw(TRANS& trans, PHASE& phase, sc_core::sc_time& t) = 0; }; template class tlm_blocking_transport_if : public virtual sc_core::sc_interface { public: virtual void b_transport(TRANS& trans, sc_core::sc_time& t) = 0; }; ////////////////////////////////////////////////////////////////////////// // DMI interfaces for getting and invalidating DMI pointers: ////////////////////////////////////////////////////////////////////////// // The semantics of the forward interface are as follows: // // - An initiator that wants to get direct access to a target's memory region // can call the get_direct_mem_ptr method with the 'trans' parameter set to // the address that it wants to gain access to. It sets the trans.m_command // to specify if the initiator intended use (read or write) // to the target's DMI region. The initiator is responsible for calling the // method with a freshly initialized tlm_dmi object either by using a newly // constructed object, or by calling an existing object's init() method. // - Although a reference to a complete 'TRANS' type is passed to the get_ // direct_mem_ptr call, only the address command, and extension fields are of // interest in most cases. // - Read and write ranges are not necessarily identical. If they are, a target // can specify that the range is valid for all accesses with the tlm_data // m_type attribute in the. // - The interconnect, if any, needs to decode the address and forward the // call to the corresponding target. It needs to handle the address exactly // as the target would expect on a transaction call, e.g. mask the address // according to the target's address width. // - If the target supports DMI access for the given address, it sets the // data fields in the DMI struct and returns true. // - If a target does not support DMI access it needs to return false. // The target can either set the correct address range in the DMI struct // to indicate the memory region where DMI is disallowed, or it can specify // the complete address range if it doesn't know it's memory range. In this // case the interconnect is responsible for clipping the address range to // the correct range that the target serves. // - The interconnect must always translate the addresses to the initiator's // address space. This must be the inverse operation of what the // interconnect needed to do when forwarding the call. In case the // component wants to change any member of the tlm_dmi object, e.g. for // its own latency to the target's latency, it must only do so *after* the // target has been called. The target is always allowed to overwrite all // values in the tlm_dmi object. // - In case the slave returned with an invalid region the bus/interconnect // must fill in the complete address region for the particular slave in the // DMI data structure. // // DMI hint optimization: // // Initiators may use the DMI hint in the tlm_generic_payload to avoid // unnecessary DMI attempts. The recommended sequence of interface // method calls would be: // // - The initiator first tries to check if it has a valid DMI region for the // address that it wants to access next. // - If not, it performs a normal transaction. // - If the DMI hint in this transaction is true, the initiator can try and // get the DMI region. // // Note that the DMI hint optimization is completely optional and every // initiator model is free to ignore the DMI hint. However, a target is // required to set the DMI hint to true if a DMI request on the given address // with the given transaction type (read or write) would have succeeded. template class tlm_fw_direct_mem_if : public virtual sc_core::sc_interface { public: virtual bool get_direct_mem_ptr(TRANS& trans, tlm_dmi& dmi_data) = 0; }; // The semantics of the backwards call is as follows: // // - An interconnect component or a target is required to invalidate all // affected DMI regions whenever any change in the regions take place. // The exact rule is that a component must invalidate all those DMI regions // that it already reported, if it would answer the same DMI request // with any member of the tlm_dmi data structure set differently. // - An interconnect component must forward the invalidate_direct_mem_ptr call // to all initiators that could potentially have a DMI pointer to the region // specified in the method arguments. A safe implementation is to call // every attached initiator. // - An interconnect component must transform the address region of an // incoming invalidate_direct_mem_ptr to the corresponding address space // for the initiators. Basically, this is the same address transformation // that the interconnect does on the DMI ranges on the forward direction. // - Each initiator must check if it has a pointer to the given region and // throw this away. It is recommended that the initiator throws away all DMI // regions that have any overlap with the given regions, but this is not a // hard requirement. // // - A full DMI pointer invalidation, e.g. for a bus remap can be signaled // by setting the range: 0x0 - 0xffffffffffffffffull = (sc_dt::uint64)-1 // - An initiator must throw away all DMI pointers in this case. // // - Under no circumstances a model is allowed to call the get_direct_mem_ptr // from within the invalidate_direct_mem_ptr method, directly or indirectly. // class tlm_bw_direct_mem_if : public virtual sc_core::sc_interface { public: virtual void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) = 0; }; ///////////////////////////////////////////////////////////////////// // debug interface for memory access ///////////////////////////////////////////////////////////////////// // // This interface can be used to gain access to a targets memory or registers // in a non-intrusive manner. No side effects, waits or event notifications // must happen in the course of the method. // // Semantics: // - The initiator calls the transport_dbg method with transaction 'trans' as // argument. The commonly used parts of trans for debug are: // . address: The start address that it wants to peek or poke. // . length: The number of bytes that it requests to read or write. // . command: Indicates a read or write access. // . data: A pointer to the initiator-allocated data buffer, which must // be at least num_bytes large. The data is always organized in // the endianness of the machine. // . extensions: Any extension that could affect the transaction. // - The interconnect, if any, will decode the address and forward the call to // the appropriate target. // - The target must return the number of successfully transmitted bytes, where // this number must be <= num_bytes. Thus, a target can safely return 0 if it // does not support debug transactions. // template class tlm_transport_dbg_if : public virtual sc_core::sc_interface { public: // The return value of defines the number of bytes successfully // transferred. virtual unsigned int transport_dbg(TRANS& trans) = 0; }; //////////////////////////////////////////////////////////////////////////// // Combined interfaces //////////////////////////////////////////////////////////////////////////// struct tlm_base_protocol_types { typedef tlm_generic_payload tlm_payload_type; typedef tlm_phase tlm_phase_type; }; // The forward interface: template class tlm_fw_transport_if : public virtual tlm_fw_nonblocking_transport_if , public virtual tlm_blocking_transport_if , public virtual tlm_fw_direct_mem_if , public virtual tlm_transport_dbg_if { public: typedef TYPES protocol_types; }; // The backward interface: template class tlm_bw_transport_if : public virtual tlm_bw_nonblocking_transport_if , public virtual tlm_bw_direct_mem_if { public: typedef TYPES protocol_types; }; } // namespace tlm #endif /* __TLM_FW_BW_IFS_H__ */ systemc-2.3.4/src/tlm_core/tlm_2/README.txt0000644000175000017500000000635314342422106020202 0ustar carstencarstenTLM-2.0 interoperability layer header files =========================================== Dir: include/tlm_core/tlm_2/ SubDirs: tlm_2_interfaces/ tlm_generic_payload/ tlm_quantum/ tlm_sockets Files: README.txt tlm_version.h Comments ======== User code should only #include the tlm or tlm.h header file in the include/ directory and avoid including any of the include files in this directory directly. All objects defined in this file hierarchy are in the tlm namespace. tlm_version.h contains the definitions for the version string and integer values The header files are organizated, by subdirectory, as follows: tlm_2_interfaces/ ----------------- Contains the TLM-2.0 core interfaces Files: tlm_2_interfaces.h (includes the other header files in this directory ) tlm_fw_bw_ifs.h (defines the TLM 2.0 interface API's: tlm_fw_nonblocking_transport_if tlm_bw_nonblocking_transport_if tlm_blocking_transport_if tlm_fw_direct_mem_if tlm_bw_direct_mem_if tlm_transport_dbg_if the enumeration type tlm_sync_enum and the TLM 2.0 standard interfaces using the API's tlm_fw_transport_if tlm_bw_transport_if ) tlm_dmi.h (defines tlm_dmi) tlm_generic_payload/ -------------------- Contains the TLM-2.0 generic payload and associated classes and helper functions Files: tlm_generic_payload.h ( includes the other header files in this directory) tlm_gp.h (defines the TLM 2.0 generic payload classes: tlm_generic_payload tlm_extension tlm_extension_base tlm_mm_interface and the enumeration types tlm_command tlm_response_status ) tlm_array.h (defines array class used by the extention mechanism ) tlm_endian_conv.h (defines the implementation for the endianness helper functions: tlm_to_hostendian_generic() tlm_from_hostendian_generic() tlm_to_hostendian_word() tlm_from_hostendian_word() tlm_to_hostendian_aligned() tlm_from_hostendian_aligned() tlm_to_hostendian_single() tlm_from_hostendian_single() ) tlm_helpers.h (defines the helper functions to determine the hostendianness: get_host_endianness() host_has_little_endianness() has_host_endianness() and defines the enumeration type: tlm_endianness tlm_phase.h (defines tlm_phase as an extendable enum type) tlm_sockets/ ------------ Contains the standard TLM-2.0 initiator and target sockets (which are used as the base classes for the convenience sockets in tlm_utils) Files: tlm_sockets.h (includes the other header files in this directory) tlm_initiator_socket.h (defines the initiator sockets: tlm_initiator_socket_base tlm_initiator_socket_b tlm_initiator_socket tlm_target_socket.h (defines the target sockets: tlm_target_socket_base tlm_target_socket_b tlm_target_socket tlm_quantum/ ------------ This contains the global quantum. (The quantum keeper is in tlm_utils) Files: tlm_quantum.h ( includes the other header file in this directory ) tlm_global_quantum.h ( defines tlm_global_quantum ) systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/0000755000175000017500000000000014342422106022476 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h0000644000175000017500000000547314342422106024634 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ #define TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ #include #include #include #include #include "sysc/kernel/sc_cmnhdr.h" // SC_API #include "sysc/kernel/sc_macros.h" // SC_CONCAT_HELPER_, SC_STRINGIFY_HELPER_ namespace tlm { enum SC_API tlm_phase_enum { UNINITIALIZED_PHASE=0, BEGIN_REQ=1, END_REQ, BEGIN_RESP, END_RESP }; class SC_API tlm_phase { public: tlm_phase(); tlm_phase(unsigned int id); // TODO: should be dropped tlm_phase(tlm_phase_enum standard); tlm_phase& operator=(tlm_phase_enum standard); operator unsigned int() const { return m_id; } const char* get_name() const; protected: // register extended phase tlm_phase( const std::type_info & type, const char* name ); private: unsigned int m_id; }; inline tlm_phase::tlm_phase() : m_id( UNINITIALIZED_PHASE ) {} inline tlm_phase::tlm_phase( tlm_phase_enum standard ) : m_id( standard ) {} inline tlm_phase& tlm_phase::operator=( tlm_phase_enum standard ) { m_id = standard; return *this; } inline std::ostream& operator<<(std::ostream& s, const tlm_phase& p) { s << p.get_name(); return s; } #define TLM_DECLARE_EXTENDED_PHASE(name_arg) \ static class SC_CONCAT_HELPER_(tlm_phase_, name_arg) \ : public ::tlm::tlm_phase \ { \ typedef SC_CONCAT_HELPER_(tlm_phase_, name_arg) this_type; \ public: \ SC_CONCAT_HELPER_(tlm_phase_, name_arg)() /* register extended phase */ \ : ::tlm::tlm_phase( typeid(*this), SC_STRINGIFY_HELPER_(name_arg) ) \ {} \ \ static const this_type& get_phase() /* needed only for IEEE 1666-2011 */ \ { static this_type this_; return this_; } \ } \ const name_arg // for backwards-compatibility #define DECLARE_EXTENDED_PHASE( NameArg ) \ TLM_DECLARE_EXTENDED_PHASE( NameArg ) } // namespace tlm #endif /* TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ */ // Taf! systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_helpers.h0000644000175000017500000000457314342422106025176 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* --------------------------------------------------------------------------------------- @file tlm_helpers.h @brief Original Authors: Charles Wilson, ESLX --------------------------------------------------------------------------------------- */ #ifndef __TLM_HELPERS_H__ #define __TLM_HELPERS_H__ //#include //#include namespace tlm { enum tlm_endianness { TLM_UNKNOWN_ENDIAN, TLM_LITTLE_ENDIAN, TLM_BIG_ENDIAN }; inline tlm_endianness get_host_endianness(void) { static tlm_endianness host_endianness = TLM_UNKNOWN_ENDIAN; if (host_endianness == TLM_UNKNOWN_ENDIAN) { unsigned int number = 1; unsigned char *p_msb_or_lsb = (unsigned char*)&number; host_endianness = (p_msb_or_lsb[0] == 0) ? TLM_BIG_ENDIAN : TLM_LITTLE_ENDIAN; } return host_endianness; } inline bool host_has_little_endianness(void) { static tlm_endianness host_endianness = TLM_UNKNOWN_ENDIAN; static bool host_little_endian = false; if (host_endianness == TLM_UNKNOWN_ENDIAN) { unsigned int number = 1; unsigned char *p_msb_or_lsb = (unsigned char*)&number; host_little_endian = (p_msb_or_lsb[0] == 0) ? false : true; } return host_little_endian; } inline bool has_host_endianness(tlm_endianness endianness) { if (host_has_little_endianness()) { return endianness == TLM_LITTLE_ENDIAN; } else { return endianness == TLM_BIG_ENDIAN; } } } // namespace tlm #endif /* __TLM_HELPERS_H__ */ systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_gp.cpp0000644000175000017500000002776714342422106024507 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h" #include "sysc/utils/sc_typeindex.h" // sc_typeindex #include #include // std::memcpy et.al. using sc_core::sc_type_index; namespace tlm { template class SC_API tlm_array; //--------------------------------------------------------------------------- // Classes for the extension mechanism //--------------------------------------------------------------------------- /* anonymous */ namespace { class tlm_extension_registry { typedef unsigned int key_type; typedef std::map type_map; public: static tlm_extension_registry& instance() { if (!instance_) // don't cleanup registry instance_ = new tlm_extension_registry(); return *instance_; } unsigned int register_extension(sc_type_index type) { type_map::const_iterator it = ids_.find( type ); if( it == ids_.end() ) { // new extension - generate/store ID type_map::value_type v( type, static_cast(ids_.size()) ); ids_.insert( v ); return v.second; } return it->second; } static unsigned int max_num_extensions() { return (instance_) ? instance().ids_.size() : 0; } private: static tlm_extension_registry* instance_; type_map ids_; tlm_extension_registry() /* = default */ {} }; // class tlm_extension_registry tlm_extension_registry* tlm_extension_registry::instance_ = NULL; } // anonymous namespace unsigned int max_num_extensions() { return tlm_extension_registry::max_num_extensions(); } unsigned int tlm_extension_base::register_extension(const std::type_info& type) { return tlm_extension_registry::instance().register_extension(type); } //--------------------------------------------------------------------------- // The generic payload class: //--------------------------------------------------------------------------- //--------------- // Constructors //--------------- // Default constructor tlm_generic_payload::tlm_generic_payload() : m_address(0) , m_command(TLM_IGNORE_COMMAND) , m_data(0) , m_length(0) , m_response_status(TLM_INCOMPLETE_RESPONSE) , m_dmi(false) , m_byte_enable(0) , m_byte_enable_length(0) , m_streaming_width(0) , m_gp_option(TLM_MIN_PAYLOAD) , m_extensions(max_num_extensions()) , m_mm(0) , m_ref_count(0) {} tlm_generic_payload::tlm_generic_payload(tlm_mm_interface* mm) : m_address(0) , m_command(TLM_IGNORE_COMMAND) , m_data(0) , m_length(0) , m_response_status(TLM_INCOMPLETE_RESPONSE) , m_dmi(false) , m_byte_enable(0) , m_byte_enable_length(0) , m_streaming_width(0) , m_gp_option(TLM_MIN_PAYLOAD) , m_extensions(max_num_extensions()) , m_mm(mm) , m_ref_count(0) {} void tlm_generic_payload::reset() { //should the other members be reset too? m_gp_option = TLM_MIN_PAYLOAD; m_extensions.free_entire_cache(); } // non-virtual deep-copying of the object void tlm_generic_payload::deep_copy_from(const tlm_generic_payload & other) { m_command = other.get_command(); m_address = other.get_address(); m_length = other.get_data_length(); m_response_status = other.get_response_status(); m_byte_enable_length = other.get_byte_enable_length(); m_streaming_width = other.get_streaming_width(); m_gp_option = other.get_gp_option(); m_dmi = other.is_dmi_allowed(); // deep copy data // there must be enough space in the target transaction! if(m_data && other.m_data) { std::memcpy(m_data, other.m_data, m_length); } // deep copy byte enables // there must be enough space in the target transaction! if(m_byte_enable && other.m_byte_enable) { std::memcpy(m_byte_enable, other.m_byte_enable, m_byte_enable_length); } // deep copy extensions (sticky and non-sticky) if(m_extensions.size() < other.m_extensions.size()) { m_extensions.expand(other.m_extensions.size()); } for(unsigned int i=0; iclone(); if(ext) //extension may not be clonable. { if(has_mm()) { //mm can take care of removing cloned extensions set_auto_extension(i, ext); } else { // no mm, user will call free_all_extensions(). set_extension(i, ext); } } } else { //We already have such extension. Copy original over it. m_extensions[i]->copy_from(*other.m_extensions[i]); } } } } // To update the state of the original generic payload from a deep copy // Assumes that "other" was created from the original by calling deep_copy_from // Argument use_byte_enable_on_read determines whether to use or ignores byte enables // when copying back the data array on a read command void tlm_generic_payload::update_original_from(const tlm_generic_payload & other, bool use_byte_enable_on_read) { // Copy back extensions that are present on the original update_extensions_from(other); // Copy back the response status and DMI hint attributes m_response_status = other.get_response_status(); m_dmi = other.is_dmi_allowed(); // Copy back the data array for a read command only // deep_copy_from allowed null pointers, and so will we // We assume the arrays are the same size // We test for equal pointers in case the original and the copy share the same array if(is_read() && m_data && other.m_data && m_data != other.m_data) { if (m_byte_enable && use_byte_enable_on_read) { if (m_byte_enable_length == 8 && m_length % 8 == 0 ) { // Optimized implementation copies 64-bit words by masking for (unsigned int i = 0; i < m_length; i += 8) { typedef sc_dt::uint64* u; *reinterpret_cast(&m_data[i]) &= ~*reinterpret_cast(m_byte_enable); *reinterpret_cast(&m_data[i]) |= *reinterpret_cast(&other.m_data[i]) & *reinterpret_cast(m_byte_enable); } } else if (m_byte_enable_length == 4 && m_length % 4 == 0 ) { // Optimized implementation copies 32-bit words by masking for (unsigned int i = 0; i < m_length; i += 4) { typedef unsigned int* u; *reinterpret_cast(&m_data[i]) &= ~*reinterpret_cast(m_byte_enable); *reinterpret_cast(&m_data[i]) |= *reinterpret_cast(&other.m_data[i]) & *reinterpret_cast(m_byte_enable); } } else // Unoptimized implementation for (unsigned int i = 0; i < m_length; i++) if ( m_byte_enable[i % m_byte_enable_length] ) m_data[i] = other.m_data[i]; } else std::memcpy(m_data, other.m_data, m_length); } } void tlm_generic_payload::update_extensions_from(const tlm_generic_payload & other) { // deep copy extensions that are already present sc_assert(m_extensions.size() <= other.m_extensions.size()); for(unsigned int i=0; icopy_from(*other.m_extensions[i]); } } } } // Free all extensions. Useful when reusing a cloned transaction that doesn't have memory manager. // normal and sticky extensions are freed and extension array cleared. void tlm_generic_payload::free_all_extensions() { m_extensions.free_entire_cache(); for(unsigned int i=0; ifree(); m_extensions[i] = 0; } } } //-------------- // Destructor //-------------- tlm_generic_payload::~tlm_generic_payload() { for(unsigned int i=0; ifree(); } //---------------- // API (including setters & getters) //--------------- std::string tlm_generic_payload::get_response_string() const { switch(m_response_status) { case TLM_OK_RESPONSE: return "TLM_OK_RESPONSE"; case TLM_INCOMPLETE_RESPONSE: return "TLM_INCOMPLETE_RESPONSE"; case TLM_GENERIC_ERROR_RESPONSE: return "TLM_GENERIC_ERROR_RESPONSE"; case TLM_ADDRESS_ERROR_RESPONSE: return "TLM_ADDRESS_ERROR_RESPONSE"; case TLM_COMMAND_ERROR_RESPONSE: return "TLM_COMMAND_ERROR_RESPONSE"; case TLM_BURST_ERROR_RESPONSE: return "TLM_BURST_ERROR_RESPONSE"; case TLM_BYTE_ENABLE_ERROR_RESPONSE: return "TLM_BYTE_ENABLE_ERROR_RESPONSE"; } return "TLM_UNKNOWN_RESPONSE"; } /* --------------------------------------------------------------------- */ /* Dynamic extension mechanism: */ /* --------------------------------------------------------------------- */ tlm_extension_base* tlm_generic_payload::set_extension(unsigned int index, tlm_extension_base* ext) { sc_assert(index < m_extensions.size()); tlm_extension_base* tmp = m_extensions[index]; m_extensions[index] = ext; return tmp; } tlm_extension_base* tlm_generic_payload::set_auto_extension(unsigned int index, tlm_extension_base* ext) { sc_assert(index < m_extensions.size()); tlm_extension_base* tmp = m_extensions[index]; m_extensions[index] = ext; if (!tmp) m_extensions.insert_in_cache(&m_extensions[index]); sc_assert(m_mm != 0); return tmp; } tlm_extension_base* tlm_generic_payload::get_extension(unsigned int index) const { sc_assert(index < m_extensions.size()); return m_extensions[index]; } void tlm_generic_payload::clear_extension(unsigned int index) { sc_assert(index < m_extensions.size()); m_extensions[index] = static_cast(0); } void tlm_generic_payload::release_extension(unsigned int index) { sc_assert(index < m_extensions.size()); if (m_mm) { m_extensions.insert_in_cache(&m_extensions[index]); } else { m_extensions[index]->free(); m_extensions[index] = static_cast(0); } } void tlm_generic_payload::resize_extensions() { m_extensions.expand(max_num_extensions()); } } // namespace tlm systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_endian_conv.h0000644000175000017500000007200514342422106026012 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ENDIAN_CONV_H__ #define __TLM_ENDIAN_CONV_H__ #include "tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h" #include // std::memset namespace tlm { /* Tranaction-Level Modelling Endianness Helper Functions DESCRIPTION A set of functions for helping users to get the endianness right in their TLM models of system initiators. These functions are for use within an initiator. They can not be used as-is outside an initiator because the extension used to store context will not work if cascaded, and they do not respect the generic payload mutability rules. However this code may be easily copied and adapted for use in bridges, etc.. These functions are not compulsory. There are other legitimate ways to achieve the same functionality. If extra information is available at compile time about the nature of an initiator's transactions, this can be exploited to accelerate simulations by creating further functions similar to those in this file. In general a functional transaction can be described in more than one way by a TLM-2 GP object. The functions convert the endianness of a GP object, either on request or response. They should only be used when the initiator's endianness does not match the host's endianness. They assume 'arithmetic mode' meaning that within a data word the byte order is always host-endian. For non-arithmetic mode initiators they can be used with a data word size of 1 byte. All the functions are templates, for example: template inline void to_hostendian_generic(tlm_generic_payload *txn, int sizeof_databus) The template parameter provides the data word width. Having this as a class makes it easy to use it for copy and swap operations within the functions. If the assignment operator for this class is overloaded, the endianness conversion function may not have the desired effect. All the functions have the same signature except for different names. The principle is that a function to_hostendian_convtype() is called when the initiator-endian transaction is created, and the matching function from_hostendian_convtype() is called when the transaction is completed, for example before read data can be used. In some cases the from_ function is redundant but an empty function is provided anyway. It is strongly recommended that the from_ function is called, in case it ceases to be redundant in future versions of this code. No context needs to be managed outside the two functions, except that they must be called with the same template parameter and the same bus width. For initiator models that can not easily manage this context information, a single entry point for the from_ function is provided, which will be a little slower than calling the correct from_ function directly, as it can not be inlined. All functions assume power-of-2 bus and data word widths. Functions offered: 0) A pair of functions that work for almost all TLM2 GP transactions. The only limitations are that data and bus widths should be powers of 2, and that the data length should be an integer number of streaming widths and that the streaming width should be an integer number of data words. These functions always allocate new data and byte enable buffers and copy data one byte at a time. tlm_to_hostendian_generic(tlm_generic_payload *txn, int sizeof_databus) tlm_from_hostendian_generic(tlm_generic_payload *txn, int sizeof_databus) 1) A pair of functions that work for all transactions regardless of data and bus data sizes and address alignment except for the the following limitations: - byte-enables are supported only when byte-enable granularity is no finer than the data word (every data word is wholly enabled or wholly disabled) - byte-enable-length is not supported (if byte enables are present, the byte enable length must be equal to the data length). - streaming width is not supported - data word wider than bus word is not supported A new data buffer and a new byte enable buffer are always allocated. Byte enables are assumed to be needed even if not required for the original (unconverted) transaction. Data is copied to the new buffer on request (for writes) or on response (for reads). Copies are done word-by-word where possible. tlm_to_hostendian_word(tlm_generic_payload *txn, int sizeof_databus) tlm_from_hostendian_word(tlm_generic_payload *txn, int sizeof_databus) 2) If the original transaction is both word and bus-aligned then this pair of functions can be used. It will complete faster than the generic function because the data reordering function is much simpler and no address conversion is required. The following limitations apply: - byte-enables are supported only when byte-enable granularity is no finer than the data word (every data word is wholly enabled or wholly disabled) - byte-enable-length is not supported (if byte enables are present, the byte enable length must be equal to the data length). - streaming width is not supported - data word wider than bus word is not supported - the transaction must be an integer number of bus words - the address must be aligned to the bus width tlm_to_hostendian_aligned(tlm_generic_payload *txn, int sizeof_databus) tlm_from_hostendian_aligned(tlm_generic_payload *txn, int sizeof_databus) 3) For single word transactions that don't cross a bus word boundary it is always safe to work in-place and the conversion is very simple. Again, streaming width and byte-enable length are not supported, and byte-enables may not changes within a data word. tlm_to_hostendian_single(tlm_generic_payload *txn, int sizeof_databus) tlm_from_hostendian_single(tlm_generic_payload *txn, int sizeof_databus) 4) A single entry point for accessing the correct from_ function without needing to store context. tlm_from_hostendian(tlm_generic_payload *txn) */ #ifndef uchar #define uchar unsigned char #else #define TLM_END_CONV_DONT_UNDEF_UCHAR #endif /////////////////////////////////////////////////////////////////////////////// // Generic Utilities class tlm_endian_context; class tlm_endian_context_pool { public: tlm_endian_context *first; inline tlm_endian_context_pool(); inline ~tlm_endian_context_pool(); inline tlm_endian_context *pop(); inline void push(tlm_endian_context *c); }; static tlm_endian_context_pool global_tlm_endian_context_pool; // an extension to keep the information needed for reconversion of response class tlm_endian_context : public tlm_extension { public: tlm_endian_context() : dbuf_size(0), bebuf_size(0) {} ~tlm_endian_context() { if(dbuf_size > 0) delete [] new_dbuf; if(bebuf_size > 0) delete [] new_bebuf; } sc_dt::uint64 address; // used by generic, word sc_dt::uint64 new_address; // used by generic uchar *data_ptr; // used by generic, word, aligned uchar *byte_enable; // used by word int length; // used by generic, word int stream_width; // used by generic // used by common entry point on response void (*from_f)(tlm_generic_payload *txn, unsigned int sizeof_databus); int sizeof_databus; // reordering buffers for data and byte-enables uchar *new_dbuf, *new_bebuf; int dbuf_size, bebuf_size; void establish_dbuf(int len) { if(len <= dbuf_size) return; if(dbuf_size > 0) delete [] new_dbuf; new_dbuf = new uchar[len]; dbuf_size = len; } void establish_bebuf(int len) { if(len <= bebuf_size) return; if(bebuf_size > 0) delete [] new_bebuf; new_bebuf = new uchar[len]; bebuf_size = len; } // required for extension management void free() { global_tlm_endian_context_pool.push(this); } tlm_extension_base* clone() const {return 0;} void copy_from(tlm_extension_base const &) {return;} // for pooling tlm_endian_context *next; }; // Assumptions about transaction contexts: // 1) only the address attribute of a transaction // is mutable. all other attributes are unchanged from the request to // response side conversion. // 2) the conversion functions in this file do not respect the mutability // rules and do not put the transaction back into its original state after // completion. so if the initiator has any cleaning up to do (eg of byte // enable buffers), it needs to store its own context. the transaction // returned to the initiator may contain pointers to data and byte enable // that can/must not be deleted. // 3) the conversion functions in this file use an extension to store // context information. they do not remove this extension. the initiator // should not remove it unless it deletes the generic payload // object. inline tlm_endian_context *establish_context(tlm_generic_payload *txn) { tlm_endian_context *tc = txn->get_extension(); if(tc == 0) { tc = global_tlm_endian_context_pool.pop(); txn->set_extension(tc); } return tc; } inline tlm_endian_context_pool::tlm_endian_context_pool() : first(0) {} inline tlm_endian_context_pool::~tlm_endian_context_pool() { while(first != 0) { tlm_endian_context *next = first->next; delete first; first = next; } } tlm_endian_context *tlm_endian_context_pool::pop() { if(first == 0) return new tlm_endian_context; tlm_endian_context *r = first; first = first->next; return r; } void tlm_endian_context_pool::push(tlm_endian_context *c) { c->next = first; first = c; } // a set of constants for efficient filling of byte enables template class tlm_bool { public: static D TLM_TRUE; static D TLM_FALSE; static D make_uchar_array(uchar c) { D d; uchar *tmp = (uchar *)(&d); for(ptrdiff_t i=0; i!=sizeof(D); i++) tmp[i] = c; // 64BITFIX negligable risk but easy fix // return d; } // also provides an syntax-efficient tester, using a // copy constuctor and an implicit cast to boolean tlm_bool(D &d) : b(*((uchar*)&d) != TLM_BYTE_DISABLED) {} operator bool() const {return b;} private: bool b; }; template D tlm_bool::TLM_TRUE = tlm_bool::make_uchar_array(TLM_BYTE_ENABLED); template D tlm_bool::TLM_FALSE = tlm_bool::make_uchar_array(TLM_BYTE_DISABLED); /////////////////////////////////////////////////////////////////////////////// // function set (0): Utilities inline void copy_db0(uchar *src1, uchar *src2, uchar *dest1, uchar *dest2) { *dest1 = *src1; *dest2 = *src2; } inline void copy_dbtrue0(uchar *src1, uchar * /* src2 */, uchar *dest1, uchar *dest2) { *dest1 = *src1; *dest2 = TLM_BYTE_ENABLED; } inline void copy_btrue0(uchar * /* src1 */, uchar * /* src2 */, uchar * /* dest1 */, uchar *dest2) { *dest2 = TLM_BYTE_ENABLED; } inline void copy_b0(uchar * /* src1 */, uchar *src2, uchar * /* dest1 */, uchar *dest2) { *dest2 = *src2; } inline void copy_dbyb0(uchar *src1, uchar * /* src2 */, uchar *dest1, uchar *dest2) { if(*dest2 == TLM_BYTE_ENABLED) *src1 = *dest1; } template inline void loop_generic0(int new_len, int new_stream_width, int orig_stream_width, int sizeof_databus, sc_dt::uint64 orig_start_address, sc_dt::uint64 new_start_address, int be_length, uchar *ie_data, uchar *ie_be, uchar *he_data, uchar *he_be) { for(int orig_sword = 0, new_sword = 0; new_sword < new_len; new_sword += new_stream_width, orig_sword += orig_stream_width) { sc_dt::uint64 ie_addr = orig_start_address; for(int orig_dword = orig_sword; orig_dword < orig_sword + orig_stream_width; orig_dword += sizeof(D)) { for(int curr_byte = orig_dword + sizeof(D) - 1; curr_byte >= orig_dword; curr_byte--) { ptrdiff_t he_index = ((ie_addr++) ^ (sizeof_databus - 1)) - new_start_address + new_sword; // 64BITFIX // COPY(ie_data+curr_byte, ie_be+(curr_byte % be_length), // 64BITRISK no risk of overflow, always positive // he_data+he_index, he_be+he_index); } } } } /////////////////////////////////////////////////////////////////////////////// // function set (0): Response template inline void tlm_from_hostendian_generic(tlm_generic_payload *txn, unsigned int sizeof_databus) { if(txn->is_read()) { tlm_endian_context *tc = txn->template get_extension(); loop_generic0(txn->get_data_length(), txn->get_streaming_width(), tc->stream_width, sizeof_databus, tc->address, tc->new_address, txn->get_data_length(), tc->data_ptr, 0, txn->get_data_ptr(), txn->get_byte_enable_ptr()); } } /////////////////////////////////////////////////////////////////////////////// // function set (0): Request template inline void tlm_to_hostendian_generic(tlm_generic_payload *txn, unsigned int sizeof_databus) { tlm_endian_context *tc = establish_context(txn); tc->from_f = &(tlm_from_hostendian_generic); tc->sizeof_databus = sizeof_databus; // calculate new size: nr stream words multiplied by big enough stream width int s_width = txn->get_streaming_width(); int length = txn->get_data_length(); if(s_width >= length) s_width = length; int nr_stream_words = length/s_width; // find out in which bus word the stream word starts and ends sc_dt::uint64 new_address = (txn->get_address() & ~(sizeof_databus - 1)); sc_dt::uint64 end_address = ((txn->get_address() + s_width - 1) & ~(sizeof_databus - 1)); int new_stream_width = end_address - new_address + sizeof_databus; int new_length = new_stream_width * nr_stream_words; // store context tc->data_ptr = txn->get_data_ptr(); tc->address = txn->get_address(); tc->new_address = new_address; tc->stream_width = s_width; uchar *orig_be = txn->get_byte_enable_ptr(); int orig_be_length = txn->get_byte_enable_length(); // create data and byte-enable buffers txn->set_address(new_address); tc->establish_dbuf(new_length); txn->set_data_ptr(tc->new_dbuf); tc->establish_bebuf(new_length); txn->set_byte_enable_ptr(tc->new_bebuf); std::memset(txn->get_byte_enable_ptr(), TLM_BYTE_DISABLED, new_length); txn->set_streaming_width(new_stream_width); txn->set_data_length(new_length); txn->set_byte_enable_length(new_length); // copy data and/or byte enables if(txn->is_write()) { if(orig_be == 0) { loop_generic0(new_length, new_stream_width, s_width, sizeof_databus, tc->address, new_address, new_length, tc->data_ptr, 0, txn->get_data_ptr(), txn->get_byte_enable_ptr()); } else { loop_generic0(new_length, new_stream_width, s_width, sizeof_databus, tc->address, new_address, orig_be_length, tc->data_ptr, orig_be, txn->get_data_ptr(), txn->get_byte_enable_ptr()); } } else { // read transaction if(orig_be == 0) { loop_generic0(new_length, new_stream_width, s_width, sizeof_databus, tc->address, new_address, new_length, tc->data_ptr, 0, txn->get_data_ptr(), txn->get_byte_enable_ptr()); } else { loop_generic0(new_length, new_stream_width, s_width, sizeof_databus, tc->address, new_address, orig_be_length, tc->data_ptr, orig_be, txn->get_data_ptr(), txn->get_byte_enable_ptr()); } } } /////////////////////////////////////////////////////////////////////////////// // function set (1): Utilities template inline void copy_d1(uchar *src1, uchar* /*src2*/, uchar *dest1, uchar *dest2) { *((D *)dest1) = *((D *)src1); *((D *)dest2) = tlm_bool::TLM_TRUE; } template inline void copy_db1(uchar *src1, uchar *src2, uchar *dest1, uchar *dest2) { *((D *)dest1) = *((D *)src1); *((D *)dest2) = *((D *)src2); } template inline void true_b1(uchar* /*src1*/, uchar* /*src2*/, uchar* /*dest1*/, uchar *dest2) { *((D *)dest2) = tlm_bool::TLM_TRUE; } template inline void copy_b1(uchar* /*src1*/, uchar* src2, uchar* /*dest1*/, uchar *dest2) { *((D *)dest2) = *((D *)src2); } template inline void copy_dbyb1(uchar *src1, uchar *src2, uchar *dest1, uchar* /*dest2*/) { if(*src2 != TLM_BYTE_DISABLED) *((D *)src1) = *((D *)dest1); } template inline void copy_dbytrue1(uchar *src1, uchar* /*src2*/, uchar *dest1, uchar* /*dest2*/) { *((D *)src1) = *((D *)dest1); } template inline void false_b1(uchar *dest1) { *((D *)dest1) = tlm_bool::TLM_FALSE; } template inline void no_b1(uchar* /*dest1*/) { } template inline int loop_word1( int bytes_left, int len0, int lenN, int sizeof_databus, uchar *start, uchar *end, uchar *src, uchar *bsrc, uchar *dest, uchar *bdest) { ptrdiff_t d2b_src = bsrc - src; // 64BITFIX was int // ptrdiff_t d2b_dest = bdest - dest; // 64BITFIX was int // uchar *original_dest = dest; while(true) { // len0 bytes at start of a bus word if((src >= start) && (src < end)) { for(int i=0; i= start) && (src < end)) { COPY(src, src+d2b_src, dest, dest+d2b_dest); bytes_left -= sizeof(D); } else { FILLFALSE(dest+d2b_dest); } dest += sizeof(D); if(bytes_left <= 0) return int(dest - original_dest); src -= sizeof(D); } // lenN bytes at end of bus word if((src >= start) && (src < end)) { for(int i=0; i inline void tlm_from_hostendian_word(tlm_generic_payload *txn, unsigned int sizeof_databus) { if(txn->is_read()) { tlm_endian_context *tc = txn->template get_extension(); sc_dt::uint64 b_mask = sizeof_databus - 1; int d_mask = sizeof(DATAWORD) - 1; int a_offset = static_cast(tc->address & b_mask); int len0 = (sizeof_databus - a_offset) & d_mask; int lenN = sizeof(DATAWORD) - len0; uchar *d_start = tc->data_ptr; uchar *d_end = ptrdiff_t(tc->length) + d_start; // 64BITFIX probably redundant // uchar *d = ptrdiff_t(((sizeof_databus - a_offset) & ~d_mask) + lenN) + d_start; // 64BITFIX probably redundant // // iterate over transaction copying data qualified by byte-enables if(tc->byte_enable == 0) { loop_word1, ©_dbytrue1, &no_b1, &no_b1 >( tc->length, len0, lenN, sizeof_databus, d_start, d_end, d, 0, txn->get_data_ptr(), 0); } else { loop_word1, ©_dbyb1, &no_b1, &no_b1 >( tc->length, len0, lenN, sizeof_databus, d_start, d_end, d, tc->byte_enable - d_start + d, txn->get_data_ptr(), 0); } } } /////////////////////////////////////////////////////////////////////////////// // function set (1): Request template inline void tlm_to_hostendian_word(tlm_generic_payload *txn, unsigned int sizeof_databus) { tlm_endian_context *tc = establish_context(txn); tc->from_f = &(tlm_from_hostendian_word); tc->sizeof_databus = sizeof_databus; sc_dt::uint64 b_mask = sizeof_databus - 1; int d_mask = sizeof(DATAWORD) - 1; sc_dt::uint64 a_aligned = txn->get_address() & ~b_mask; int a_offset = static_cast(txn->get_address() & b_mask); int len0 = (sizeof_databus - a_offset) & d_mask; int lenN = sizeof(DATAWORD) - len0; uchar *d_start = txn->get_data_ptr(); uchar *d_end = ptrdiff_t(txn->get_data_length()) + d_start; // 64BITFIX probably redundant // uchar *d = ptrdiff_t(((sizeof_databus - a_offset) & ~d_mask) + lenN) + d_start; // 64BITFIX probably redundant // // create new data and byte enable buffers int long_enough = txn->get_data_length() + 2 * sizeof_databus; tc->establish_dbuf(long_enough); uchar *new_data = tc->new_dbuf; tc->establish_bebuf(long_enough); uchar *new_be = tc->new_bebuf; if(txn->is_read()) { tc->data_ptr = d_start; tc->address = txn->get_address(); tc->byte_enable = txn->get_byte_enable_ptr(); tc->length = txn->get_data_length(); if(txn->get_byte_enable_ptr() == 0) { // iterate over transaction creating new byte enables from all-true txn->set_data_length(loop_word1, &true_b1, &false_b1, &false_b1 >( txn->get_data_length(), len0, lenN, sizeof_databus, d_start, d_end, d, 0, new_data, new_be)); } else { // iterate over transaction copying byte enables txn->set_data_length(loop_word1, ©_b1, &false_b1, &false_b1 >( txn->get_data_length(), len0, lenN, sizeof_databus, d_start, d_end, d, txn->get_byte_enable_ptr() - d_start + d, new_data, new_be)); } } else { // WRITE if(txn->get_byte_enable_ptr() == 0) { // iterate over transaction copying data and creating new byte-enables txn->set_data_length(loop_word1, ©_d1, &false_b1, &false_b1 >( txn->get_data_length(), len0, lenN, sizeof_databus, d_start, d_end, d, 0, new_data, new_be)); } else { // iterate over transaction copying data and byte-enables txn->set_data_length(loop_word1, ©_db1, &false_b1, &false_b1 >( txn->get_data_length(), len0, lenN, sizeof_databus, d_start, d_end, d, txn->get_byte_enable_ptr() - d_start + d, new_data, new_be)); } } txn->set_byte_enable_length(txn->get_data_length()); txn->set_streaming_width(txn->get_data_length()); txn->set_data_ptr(new_data); txn->set_byte_enable_ptr(new_be); txn->set_address(a_aligned); } /////////////////////////////////////////////////////////////////////////////// // function set (2): Utilities template inline void copy_d2(D *src1, D *src2, D *dest1, D *dest2) { *dest1 = *src1; } template inline void copy_db2(D *src1, D *src2, D *dest1, D *dest2) { *dest1 = *src1; *dest2 = *src2; } template inline void copy_dbyb2(D *src1, D *src2, D *dest1, D *dest2) { if(tlm_bool(*src2)) *dest1 = *src1; } template inline void loop_aligned2(D *src1, D *src2, D *dest1, D *dest2, int words, int words_per_bus) { ptrdiff_t src1to2 = (char *)src2 - (char *)src1; // 64BITFIX was int and operands were cast to int // ptrdiff_t dest1to2 = (char *)dest2 - (char *)dest1; // 64BITFIX was int and operands were cast to int // D *done = src1 + ptrdiff_t(words); // 64BITFIX // D *bus_start = src1; src1 += ptrdiff_t(words_per_bus - 1); // 64BITFIX // while(true) { COPY(src1, (D *)(src1to2+(char *)src1), dest1, (D *)(dest1to2+(char *)dest1)); // 64BITFIX // dest1++; if((--src1) < bus_start) { bus_start += ptrdiff_t(words_per_bus); // 64BITFIX // if(bus_start == done) break; src1 = bus_start + ptrdiff_t(words_per_bus - 1); // 64BITFIX // } } } /////////////////////////////////////////////////////////////////////////////// // function set (2): Response template inline void tlm_from_hostendian_aligned(tlm_generic_payload *txn, unsigned int sizeof_databus) { int words_per_bus = sizeof_databus/sizeof(DATAWORD); if(words_per_bus == 1) return; int words = (txn->get_data_length())/sizeof(DATAWORD); tlm_endian_context *tc = txn->template get_extension(); if(txn->get_byte_enable_ptr() == 0) { // no byte enables if(txn->is_read()) { // RD without byte enables. Copy data to original buffer loop_aligned2 >( (DATAWORD *)(txn->get_data_ptr()), 0, (DATAWORD *)(tc->data_ptr), 0, words, words_per_bus); } } else { // byte enables present if(txn->is_read()) { // RD with byte enables. Copy data qualified by byte-enables loop_aligned2 >( (DATAWORD *)(txn->get_data_ptr()), (DATAWORD *)(txn->get_byte_enable_ptr()), (DATAWORD *)(tc->data_ptr), 0, words, words_per_bus); } } } /////////////////////////////////////////////////////////////////////////////// // function set (2): Request template inline void tlm_to_hostendian_aligned(tlm_generic_payload *txn, unsigned int sizeof_databus) { tlm_endian_context *tc = establish_context(txn); tc->from_f = &(tlm_from_hostendian_aligned); tc->sizeof_databus = sizeof_databus; int words_per_bus = sizeof_databus/sizeof(DATAWORD); if(words_per_bus == 1) return; int words = (txn->get_data_length())/sizeof(DATAWORD); DATAWORD *original_be = (DATAWORD *)(txn->get_byte_enable_ptr()); DATAWORD *original_data = (DATAWORD *)(txn->get_data_ptr()); // always allocate a new data buffer tc->establish_dbuf(txn->get_data_length()); txn->set_data_ptr(tc->new_dbuf); if(original_be == 0) { // no byte enables if(txn->is_write()) { // WR no byte enables. Copy data loop_aligned2 >(original_data, 0, (DATAWORD *)(txn->get_data_ptr()), 0, words, words_per_bus); } else { // RD no byte enables. Save original data pointer tc->data_ptr = (uchar *)original_data; } } else { // byte enables present // allocate a new buffer for them tc->establish_bebuf(txn->get_data_length()); txn->set_byte_enable_ptr(tc->new_bebuf); txn->set_byte_enable_length(txn->get_data_length()); if(txn->is_write()) { // WR with byte enables. Copy data and BEs loop_aligned2 >(original_data, original_be, (DATAWORD *)(txn->get_data_ptr()), (DATAWORD *)(txn->get_byte_enable_ptr()), words, words_per_bus); } else { // RD with byte enables. Save original data pointer tc->data_ptr = (uchar *)original_data; // Copy byte enables to new buffer loop_aligned2 >(original_be, 0, (DATAWORD *)(txn->get_byte_enable_ptr()), 0, words, words_per_bus); } } } /////////////////////////////////////////////////////////////////////////////// // function set (3): Response template inline void tlm_from_hostendian_single(tlm_generic_payload *txn, unsigned int sizeof_databus) { // nothing needs to be done here } /////////////////////////////////////////////////////////////////////////////// // function set (3): Request template inline void tlm_to_hostendian_single(tlm_generic_payload *txn, unsigned int sizeof_databus) { tlm_endian_context *tc = establish_context(txn); tc->from_f = &(tlm_from_hostendian_single); tc->sizeof_databus = sizeof_databus; // only need to change the address, always safe to work in-place sc_dt::uint64 mask = sizeof_databus-1; sc_dt::uint64 a = txn->get_address(); txn->set_address((a & ~mask) | (sizeof_databus - (a & mask) - sizeof(DATAWORD))); } /////////////////////////////////////////////////////////////////////////////// // helper function which works for all responses inline void tlm_from_hostendian(tlm_generic_payload *txn) { tlm_endian_context *tc = txn->get_extension(); (*(tc->from_f))(txn, tc->sizeof_databus); } #ifndef TLM_END_CONV_DONT_UNDEF_UCHAR #undef uchar #endif } // namespace tlm #endif // multiple-inclusion protection systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_array.h0000644000175000017500000000762614342422106024654 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ #define TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ #include #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::string,vector #endif namespace tlm { // // To the LRM writer: the below class is an artifact of the tlm_generic_payload // implementation and not part of the core TLM standard // // This implements a lean and fast array class that supports array expansion on // request. The class is primarily used in the tlm_generic_payload class for // storing the pointers to the extensions. // // Individual array elements can be accessed through the [] operators, and the // array length is returned by the size() method. // // The size can be dynamically expanded using the expand(uint) method. There // is no shrinking mechanism implemented, because the extension mechanism // does not require this feature. Bear in mind that calling the expand method // may invalidate all direct pointers into the array. //the tlm_array shall always be used with T=tlm_extension_base* template class tlm_array : private std::vector { typedef std::vector base_type; typedef typename base_type::size_type size_type; public: // constructor: tlm_array(size_type size = 0) : base_type(size) , m_entries() { //m_entries.reserve(size); // optional } // copy constructor: // tlm_array(const tlm_array& orig) = default; // destructor: // ~tlm_array() = default; // operators for dereferencing: using base_type::operator[]; // array size: using base_type::size; // expand the array if needed: void expand(size_type new_size) { if (new_size > size()) { base_type::resize(new_size); //m_entries.reserve(new_size); // optional } } static const char* const kind_string; const char* kind() const { return kind_string; } //this function shall get a pointer to a array slot // it stores this slot in a cache of active slots void insert_in_cache(T* p) { //sc_assert( (p-&(*this)[0]) < size() ); m_entries.push_back( p-&(*this)[0] ); } //this functions clears all active slots of the array void free_entire_cache() { while(m_entries.size()) { if ((*this)[m_entries.back()]) //we make sure no one cleared the slot manually (*this)[m_entries.back()]->free();//...and then we call free on the content of the slot (*this)[m_entries.back()]=0; //afterwards we set the slot to NULL m_entries.pop_back(); } } protected: std::vector m_entries; }; template const char* const tlm_array::kind_string = "tlm_array"; #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif } // namespace tlm #endif /* TLM_CORE_TLM2_TLM_ARRAY_H_INCLUDED_ */ systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_generic_payload.h0000644000175000017500000000236214342422106026653 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_GENERIC_PAYLOAD_H__ #define __TLM_GENERIC_PAYLOAD_H__ #include "tlm_core/tlm_2/tlm_generic_payload/tlm_helpers.h" #include "tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h" #include "tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h" #include "tlm_core/tlm_2/tlm_generic_payload/tlm_endian_conv.h" #endif systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h0000644000175000017500000004270714342422106024143 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // 12-Jan-2009 John Aynsley Bug fix. has_mm() and get_ref_count() should both be const // 23-Mar-2009 John Aynsley Add method update_original_from() // 20-Apr-2009 John Aynsley Bug fix for 64-bit machines: unsigned long int -> unsigned int // 5-May-2011 JA and Philipp Hartmann Add tlm_gp_option, set_gp_option, get_gp_option // 11-May-2011 John Aynsley Add run-time check to release() #ifndef TLM_CORE_TLM2_TLM_GP_H_INCLUDED_ #define TLM_CORE_TLM2_TLM_GP_H_INCLUDED_ #include "sysc/kernel/sc_cmnhdr.h" // SC_API #include "sysc/utils/sc_report.h" // sc_assert #include "sysc/datatypes/int/sc_nbdefs.h" // sc_dt::uint64 #include "tlm_core/tlm_2/tlm_generic_payload/tlm_array.h" #include // std::type_info namespace tlm { class tlm_generic_payload; class tlm_mm_interface { public: virtual void free(tlm_generic_payload*) = 0; virtual ~tlm_mm_interface() {} }; //--------------------------------------------------------------------------- // Classes and helpers for the extension mechanism //--------------------------------------------------------------------------- // Helper function: SC_API unsigned int max_num_extensions(); // This class can be used for storing pointers to the extension classes, used // in tlm_generic_payload: class SC_API tlm_extension_base { public: virtual tlm_extension_base* clone() const = 0; virtual void free() { delete this; } virtual void copy_from(tlm_extension_base const &) = 0; protected: virtual ~tlm_extension_base() {} static unsigned int register_extension(const std::type_info&); }; // Base class for all extension classes, derive your extension class in // the following way: // class my_extension : public tlm_extension { ... // This triggers proper extension registration during C++ static // contruction time. my_extension::ID will hold the unique index in the // tlm_generic_payload::m_extensions array. template class tlm_extension : public tlm_extension_base { public: virtual tlm_extension_base* clone() const = 0; virtual void copy_from(tlm_extension_base const &ext) = 0; virtual ~tlm_extension() {} const static unsigned int ID; }; template const unsigned int tlm_extension::ID = tlm_extension_base::register_extension(typeid(T)); //--------------------------------------------------------------------------- // enumeration types //--------------------------------------------------------------------------- enum tlm_command { TLM_READ_COMMAND, TLM_WRITE_COMMAND, TLM_IGNORE_COMMAND }; enum tlm_response_status { TLM_OK_RESPONSE = 1, TLM_INCOMPLETE_RESPONSE = 0, TLM_GENERIC_ERROR_RESPONSE = -1, TLM_ADDRESS_ERROR_RESPONSE = -2, TLM_COMMAND_ERROR_RESPONSE = -3, TLM_BURST_ERROR_RESPONSE = -4, TLM_BYTE_ENABLE_ERROR_RESPONSE = -5 }; enum tlm_gp_option { TLM_MIN_PAYLOAD, TLM_FULL_PAYLOAD, TLM_FULL_PAYLOAD_ACCEPTED }; #define TLM_BYTE_DISABLED 0x0 #define TLM_BYTE_ENABLED 0xff //--------------------------------------------------------------------------- // The generic payload class: //--------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ tlm_array; class SC_API tlm_generic_payload { public: //--------------- // Constructors //--------------- // Default constructor tlm_generic_payload(); explicit tlm_generic_payload(tlm_mm_interface* mm); void acquire() { sc_assert(m_mm != 0); m_ref_count++; } void release() { sc_assert(m_mm != 0 && m_ref_count > 0); if (--m_ref_count==0) m_mm->free(this); } int get_ref_count() const { return m_ref_count; } void set_mm(tlm_mm_interface* mm) { m_mm = mm; } bool has_mm() const { return m_mm != 0; } void reset(); private: //disabled copy ctor and assignment operator. tlm_generic_payload(const tlm_generic_payload& x) /* = delete */; tlm_generic_payload& operator= (const tlm_generic_payload& x) /* = delete */; public: // non-virtual deep-copying of the object void deep_copy_from(const tlm_generic_payload & other); // To update the state of the original generic payload from a deep copy // Assumes that "other" was created from the original by calling deep_copy_from // Argument use_byte_enable_on_read determines whether to use or ignores byte enables // when copying back the data array on a read command void update_original_from(const tlm_generic_payload & other, bool use_byte_enable_on_read = true); void update_extensions_from(const tlm_generic_payload & other); // Free all extensions. Useful when reusing a cloned transaction that doesn't have memory manager. // normal and sticky extensions are freed and extension array cleared. void free_all_extensions(); //-------------- // Destructor //-------------- virtual ~tlm_generic_payload(); //---------------- // API (including setters & getters) //--------------- // Command related method bool is_read() const {return (m_command == TLM_READ_COMMAND);} void set_read() {m_command = TLM_READ_COMMAND;} bool is_write() const {return (m_command == TLM_WRITE_COMMAND);} void set_write() {m_command = TLM_WRITE_COMMAND;} tlm_command get_command() const {return m_command;} void set_command(const tlm_command command) {m_command = command;} // Address related methods sc_dt::uint64 get_address() const {return m_address;} void set_address(const sc_dt::uint64 address) {m_address = address;} // Data related methods unsigned char* get_data_ptr() const {return m_data;} void set_data_ptr(unsigned char* data) {m_data = data;} // Transaction length (in bytes) related methods unsigned int get_data_length() const {return m_length;} void set_data_length(const unsigned int length) {m_length = length;} // Response status related methods bool is_response_ok() const {return (m_response_status > 0);} bool is_response_error() const {return (m_response_status <= 0);} tlm_response_status get_response_status() const {return m_response_status;} void set_response_status(const tlm_response_status response_status) {m_response_status = response_status;} std::string get_response_string() const; // Streaming related methods unsigned int get_streaming_width() const {return m_streaming_width;} void set_streaming_width(const unsigned int streaming_width) {m_streaming_width = streaming_width; } // Byte enable related methods unsigned char* get_byte_enable_ptr() const {return m_byte_enable;} void set_byte_enable_ptr(unsigned char* byte_enable){m_byte_enable = byte_enable;} unsigned int get_byte_enable_length() const {return m_byte_enable_length;} void set_byte_enable_length(const unsigned int byte_enable_length){m_byte_enable_length = byte_enable_length;} // This is the "DMI-hint" a slave can set this to true if it // wants to indicate that a DMI request would be supported: void set_dmi_allowed(bool dmi_allowed) { m_dmi = dmi_allowed; } bool is_dmi_allowed() const { return m_dmi; } // Use full set of attributes in DMI/debug? tlm_gp_option get_gp_option() const { return m_gp_option; } void set_gp_option( const tlm_gp_option gp_opt ) { m_gp_option = gp_opt; } private: /* --------------------------------------------------------------------- */ /* Generic Payload attributes: */ /* --------------------------------------------------------------------- */ /* - m_command : Type of transaction. Three values supported: */ /* - TLM_WRITE_COMMAND */ /* - TLM_READ_COMMAND */ /* - TLM_IGNORE_COMMAND */ /* - m_address : Transaction base address (byte-addressing). */ /* - m_data : When m_command = TLM_WRITE_COMMAND contains a */ /* pointer to the data to be written in the target.*/ /* When m_command = TLM_READ_COMMAND contains a */ /* pointer where to copy the data read from the */ /* target. */ /* - m_length : Total number of bytes of the transaction. */ /* - m_response_status : This attribute indicates whether an error has */ /* occurred during the transaction. */ /* Values supported are: */ /* - TLM_OK_RESP */ /* - TLM_INCOMPLETE_RESP */ /* - TLM_GENERIC_ERROR_RESP */ /* - TLM_ADDRESS_ERROR_RESP */ /* - TLM_COMMAND_ERROR_RESP */ /* - TLM_BURST_ERROR_RESP */ /* - TLM_BYTE_ENABLE_ERROR_RESP */ /* */ /* - m_byte_enable : It can be used to create burst transfers where */ /* the address increment between each beat is greater */ /* than the word length of each beat, or to place */ /* words in selected byte lanes of a bus. */ /* - m_byte_enable_length : For a read or a write command, the target */ /* interpret the byte enable length attribute as the */ /* number of elements in the bytes enable array. */ /* - m_streaming_width : */ /* --------------------------------------------------------------------- */ sc_dt::uint64 m_address; tlm_command m_command; unsigned char* m_data; unsigned int m_length; tlm_response_status m_response_status; bool m_dmi; unsigned char* m_byte_enable; unsigned int m_byte_enable_length; unsigned int m_streaming_width; tlm_gp_option m_gp_option; public: /* --------------------------------------------------------------------- */ /* Dynamic extension mechanism: */ /* --------------------------------------------------------------------- */ /* The extension mechanism is intended to enable initiator modules to */ /* optionally and transparently add data fields to the */ /* tlm_generic_payload. Target modules are free to check for extensions */ /* and may or may not react to the data in the extension fields. The */ /* definition of the extensions' semantics is solely in the */ /* responsibility of the user. */ /* */ /* The following rules apply: */ /* */ /* - Every extension class must be derived from tlm_extension, e.g.: */ /* class my_extension : public tlm_extension { ... } */ /* */ /* - A tlm_generic_payload object should be constructed after C++ */ /* static initialization time. This way it is guaranteed that the */ /* extension array is of sufficient size to hold all possible */ /* extensions. Alternatively, the initiator module can enforce a valid */ /* extension array size by calling the resize_extensions() method */ /* once before the first transaction with the payload object is */ /* initiated. */ /* */ /* - Initiators should use the the set_extension(e) or clear_extension(e)*/ /* methods for manipulating the extension array. The type of the */ /* argument must be a pointer to the specific registered extension */ /* type (my_extension in the above example) and is used to */ /* automatically locate the appropriate index in the array. */ /* */ /* - Targets can check for a specific extension by calling */ /* get_extension(e). e will point to zero if the extension is not */ /* present. */ /* */ /* --------------------------------------------------------------------- */ // Stick the pointer to an extension into the vector, return the // previous value: template T* set_extension(T* ext) { return static_cast(set_extension(T::ID, ext)); } // non-templatized version with manual index: tlm_extension_base* set_extension(unsigned int index, tlm_extension_base* ext); // Stick the pointer to an extension into the vector, return the // previous value and schedule its release template T* set_auto_extension(T* ext) { return static_cast(set_auto_extension(T::ID, ext)); } // non-templatized version with manual index: tlm_extension_base* set_auto_extension(unsigned int index, tlm_extension_base* ext); // Check for an extension, ext will point to 0 if not present template void get_extension(T*& ext) const { ext = get_extension(); } template T* get_extension() const { return static_cast(get_extension(T::ID)); } // Non-templatized version with manual index: tlm_extension_base* get_extension(unsigned int index) const; //this call just removes the extension from the txn but does not // call free() or tells the MM to do so // it return false if there was active MM so you are now in an unsafe situation // recommended use: when 100% sure there is no MM template void clear_extension(const T*) { clear_extension(); } //this call just removes the extension from the txn but does not // call free() or tells the MM to do so // it return false if there was active MM so you are now in an unsafe situation // recommended use: when 100% sure there is no MM template void clear_extension() { clear_extension(T::ID); } //this call removes the extension from the txn and does // call free() or tells the MM to do so when the txn is finally done // recommended use: when not sure there is no MM template void release_extension(T* ext) { release_extension(); } //this call removes the extension from the txn and does // call free() or tells the MM to do so when the txn is finally done // recommended use: when not sure there is no MM template void release_extension() { release_extension(T::ID); } private: // Non-templatized version with manual index void clear_extension(unsigned int index); // Non-templatized version with manual index void release_extension(unsigned int index); public: // Make sure the extension array is large enough. Can be called once by // an initiator module (before issuing the first transaction) to make // sure that the extension array is of correct size. This is only needed // if the initiator cannot guarantee that the generic payload object is // allocated after C++ static construction time. void resize_extensions(); private: tlm_array m_extensions; tlm_mm_interface* m_mm; unsigned int m_ref_count; }; } // namespace tlm #endif /* TLM_CORE_TLM2_TLM_GP_H_INCLUDED_ */ systemc-2.3.4/src/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.cpp0000644000175000017500000000626314342422106025165 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #include "tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h" #include "sysc/utils/sc_string_view.h" #include "sysc/utils/sc_typeindex.h" #include "sysc/utils/sc_report.h" #include #include using sc_core::sc_string_view; using sc_core::sc_type_index; namespace tlm { /* anonymous */ namespace { struct tlm_phase_registry { typedef unsigned int key_type; static tlm_phase_registry& instance() { static tlm_phase_registry inst; return inst; } unsigned int register_phase(sc_type_index type, sc_string_view name) { type_map::const_iterator it = ids_.find( type ); if( name.empty() ) { SC_REPORT_FATAL( sc_core::SC_ID_INTERNAL_ERROR_, "unexpected empty tlm_phase name" ); return UNINITIALIZED_PHASE; } if( it == ids_.end() ) { // new phase - generate/store ID and name type_map::value_type v( type, static_cast(names_.size()) ); names_.push_back( name_table::value_type(name.data(), name.size()) ); ids_.insert( v ); return v.second; } if( names_[it->second] != name ) { SC_REPORT_FATAL( sc_core::SC_ID_INTERNAL_ERROR_, "tlm_phase registration failed: duplicate type info" ); sc_core::sc_abort(); } return it->second; } const char* get_name( key_type id ) const { sc_assert( id < names_.size() ); return names_[id].c_str(); } private: typedef std::map type_map; typedef std::vector name_table; type_map ids_; name_table names_; tlm_phase_registry() : names_( END_RESP+1 ) { # define BUILTIN_PHASE(phase) \ names_[phase] = #phase BUILTIN_PHASE( UNINITIALIZED_PHASE ); BUILTIN_PHASE( BEGIN_REQ ); BUILTIN_PHASE( END_REQ ); BUILTIN_PHASE( BEGIN_RESP ); BUILTIN_PHASE( END_RESP ); } }; // class tlm_phase_registry } // anonymous namespace tlm_phase::tlm_phase( unsigned int id ) : m_id(id) { // TODO: validate id? // TODO: add deprecation warning? } tlm_phase::tlm_phase( const std::type_info& type, const char* name ) : m_id( tlm_phase_registry::instance().register_phase(type, name) ) {} const char* tlm_phase::get_name() const { return tlm_phase_registry::instance().get_name( m_id ); } } // namespace tlm // Taf! systemc-2.3.4/src/tlm_core/tlm_2/tlm_sockets/0000755000175000017500000000000014342422106021024 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h0000644000175000017500000000474314342422106025021 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM_BASE_SOCKET_IF_H_INCLUDED_ #define TLM_CORE_TLM_BASE_SOCKET_IF_H_INCLUDED_ #include "sysc/communication/sc_export.h" #include "sysc/communication/sc_port.h" #include "sysc/utils/sc_typeindex.h" namespace tlm { enum tlm_socket_category { TLM_UNKNOWN_SOCKET = 0, TLM_INITIATOR_SOCKET = 0x1, TLM_TARGET_SOCKET = 0x2, TLM_MULTI_SOCKET = 0x10, TLM_MULTI_INITIATOR_SOCKET = TLM_INITIATOR_SOCKET | TLM_MULTI_SOCKET, TLM_MULTI_TARGET_SOCKET = TLM_TARGET_SOCKET | TLM_MULTI_SOCKET }; class tlm_base_socket_if { public: virtual sc_core::sc_port_base & get_base_port() = 0; virtual sc_core::sc_port_base const & get_base_port() const = 0; virtual sc_core::sc_export_base & get_base_export() = 0; virtual sc_core::sc_export_base const & get_base_export() const = 0; #ifdef SC_ENABLE_COVARIANT_VIRTUAL_BASE // co-variant return types don't mix with virtual base classes // (like sc_interface) on Microsoft Visual C++ compilers // -> keep all APIs depending on this as an opt-in for now virtual sc_core::sc_interface & get_base_interface() = 0; virtual sc_core::sc_interface const & get_base_interface() const = 0; #endif // SC_ENABLE_COVARIANT_VIRTUAL_BASE virtual unsigned int get_bus_width() const = 0; virtual sc_core::sc_type_index get_protocol_types() const = 0; virtual tlm_socket_category get_socket_category() const = 0; protected: virtual ~tlm_base_socket_if() {} }; } // namespace tlm #endif // TLM_CORE_TLM_BASE_SOCKET_IF_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_2/tlm_sockets/tlm_sockets.h0000644000175000017500000000220314342422106023521 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_SOCKETS_H__ #define __TLM_SOCKETS_H__ #include "tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h" #include "tlm_core/tlm_2/tlm_sockets/tlm_target_socket.h" #endif /* __TLM_SOCKETS_H__ */ systemc-2.3.4/src/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h0000644000175000017500000001600414342422106025424 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ #define TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ #include "tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h" #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) // ignore warning about deliberately hidden "bind()" overloads #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" #endif namespace tlm { template , typename BW_IF = tlm_bw_transport_if<> > class tlm_base_initiator_socket_b : public tlm_base_socket_if { public: virtual ~tlm_base_initiator_socket_b() {} virtual sc_core::sc_port_b & get_base_port() = 0; virtual sc_core::sc_port_b const & get_base_port() const = 0; virtual sc_core::sc_export & get_base_export() = 0; virtual sc_core::sc_export const & get_base_export() const = 0; virtual BW_IF & get_base_interface() = 0; virtual BW_IF const & get_base_interface() const = 0; }; template class tlm_base_target_socket_b; template class tlm_base_target_socket; template , typename BW_IF = tlm_bw_transport_if<>, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND> class tlm_base_initiator_socket : public tlm_base_initiator_socket_b, public sc_core::sc_port { public: typedef FW_IF fw_interface_type; typedef BW_IF bw_interface_type; typedef sc_core::sc_port port_type; typedef sc_core::sc_export export_type; typedef tlm_base_target_socket_b base_target_socket_type; typedef tlm_base_initiator_socket_b base_type; template friend class tlm_base_target_socket; public: tlm_base_initiator_socket() : port_type(sc_core::sc_gen_unique_name("tlm_base_initiator_socket")) , m_export(sc_core::sc_gen_unique_name("tlm_base_initiator_socket_export")) { } explicit tlm_base_initiator_socket(const char* name) : port_type(name) , m_export(sc_core::sc_gen_unique_name((std::string(name) + "_export").c_str())) { } virtual const char* kind() const { return "tlm_base_initiator_socket"; } // // Bind initiator socket to target socket // - Binds the port of the initiator socket to the export of the target // socket // - Binds the port of the target socket to the export of the initiator // socket // virtual void bind(base_target_socket_type& s) { // initiator.port -> target.export (get_base_port())(s.get_base_interface()); // target.port -> initiator.export (s.get_base_port())(get_base_interface()); } void operator() (base_target_socket_type& s) { bind(s); } // // Bind initiator socket to initiator socket (hierarchical bind) // - Binds both the export and the port // virtual void bind(base_type& s) { // port (get_base_port())(s.get_base_port()); // export (s.get_base_export())(get_base_export()); } void operator() (base_type& s) { bind(s); } // // Bind interface to socket // - Binds the interface to the export of this socket // virtual void bind(bw_interface_type& ifs) { (get_base_export())(ifs); } void operator() (bw_interface_type& s) { bind(s); } // Implementation of tlm_base_socket_if functions virtual unsigned int get_bus_width() const { return BUSWIDTH; } virtual sc_core::sc_type_index get_protocol_types() const { return typeid(typename BW_IF::protocol_types); } virtual tlm_socket_category get_socket_category() const { return TLM_INITIATOR_SOCKET; } // Implementation of tlm_base_target_socket_b functions virtual sc_core::sc_port_b & get_base_port() { return *this; } virtual sc_core::sc_port_b const & get_base_port() const { return *this; } virtual BW_IF & get_base_interface() { return m_export; } virtual BW_IF const & get_base_interface() const { return m_export; } virtual sc_core::sc_export & get_base_export() { return m_export; } virtual sc_core::sc_export const & get_base_export() const { return m_export; } protected: export_type m_export; }; // // Convenience socket classes // template class tlm_initiator_socket : public tlm_base_initiator_socket, tlm_bw_transport_if, N, POL> { typedef tlm_base_initiator_socket, tlm_bw_transport_if, N, POL> base_socket_type; public: tlm_initiator_socket() : base_socket_type() {} explicit tlm_initiator_socket(const char* name) : base_socket_type(name) {} virtual const char* kind() const { return "tlm_initiator_socket"; } }; } // namespace tlm #if defined(__clang__) || \ (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) #pragma GCC diagnostic pop #endif #endif // TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_2/tlm_sockets/tlm_target_socket.h0000644000175000017500000001606214342422106024714 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM_TARGET_SOCKET_H_INCLUDED_ #define TLM_CORE_TLM_TARGET_SOCKET_H_INCLUDED_ #include "tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h" namespace tlm { template , typename BW_IF = tlm_bw_transport_if<> > class tlm_base_target_socket_b : public tlm_base_socket_if { public: virtual ~tlm_base_target_socket_b() {} virtual sc_core::sc_port_b & get_base_port() = 0; virtual sc_core::sc_port_b const & get_base_port() const = 0; virtual sc_core::sc_export & get_base_export() = 0; virtual sc_core::sc_export const & get_base_export() const = 0; virtual FW_IF & get_base_interface() = 0; virtual FW_IF const & get_base_interface() const = 0; }; template class tlm_base_initiator_socket_b; template class tlm_base_initiator_socket; template , typename BW_IF = tlm_bw_transport_if<>, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND> class tlm_base_target_socket : public tlm_base_target_socket_b, public sc_core::sc_export { public: typedef FW_IF fw_interface_type; typedef BW_IF bw_interface_type; typedef sc_core::sc_port port_type; typedef sc_core::sc_export export_type; typedef tlm_base_initiator_socket_b base_initiator_socket_type; typedef tlm_base_target_socket_b base_type; template friend class tlm_base_initiator_socket; public: tlm_base_target_socket() : export_type(sc_core::sc_gen_unique_name("tlm_base_target_socket")) , m_port(sc_core::sc_gen_unique_name("tlm_base_target_socket_port")) { } explicit tlm_base_target_socket(const char* name) : export_type(name) , m_port(sc_core::sc_gen_unique_name((std::string(name) + "_port").c_str())) { } virtual const char* kind() const { return "tlm_base_target_socket"; } // // Bind target socket to initiator socket // - Binds the port of the initiator socket to the export of the target // socket // - Binds the port of the target socket to the export of the initiator // socket // virtual void bind(base_initiator_socket_type& s) { // initiator.port -> target.export (s.get_base_port())(get_base_interface()); // target.port -> initiator.export get_base_port()(s.get_base_interface()); } void operator() (base_initiator_socket_type& s) { bind(s); } // // Bind target socket to target socket (hierarchical bind) // - Binds both the export and the port // virtual void bind(base_type& s) { // export (get_base_export())(s.get_base_export()); // port (s.get_base_port())(get_base_port()); } void operator() (base_type& s) { bind(s); } // // Bind interface to socket // - Binds the interface to the export // virtual void bind(fw_interface_type& ifs) { export_type* exp = &get_base_export(); if( this == exp ) { export_type::bind( ifs ); // non-virtual function call } else { exp->bind( ifs ); } } void operator() (fw_interface_type& s) { bind(s); } // // Forward to 'size()' of port class // int size() const { return m_port.size(); } // // Forward to 'operator->()' of port class // bw_interface_type* operator->() { return m_port.operator->(); } // // Forward to 'operator[]()' of port class // bw_interface_type* operator[](int i) { return m_port.operator[](i); } // Implementation of tlm_base_socket_if functions virtual unsigned int get_bus_width() const { return BUSWIDTH; } virtual sc_core::sc_type_index get_protocol_types() const { return typeid(typename FW_IF::protocol_types); } virtual tlm_socket_category get_socket_category() const { return TLM_TARGET_SOCKET; } // Implementation of tlm_base_target_socket_b functions virtual sc_core::sc_port_b & get_base_port() { return m_port; } virtual sc_core::sc_port_b const & get_base_port() const { return m_port; } virtual FW_IF & get_base_interface() { return *this; } virtual FW_IF const & get_base_interface() const { return *this; } virtual sc_core::sc_export & get_base_export() { return *this; } virtual sc_core::sc_export const & get_base_export() const { return *this; } protected: port_type m_port; }; // // Convenience blocking and non-blocking socket classes // template class tlm_target_socket : public tlm_base_target_socket , tlm_bw_transport_if, N, POL> { typedef tlm_base_target_socket, tlm_bw_transport_if, N, POL> base_socket_type; public: tlm_target_socket() : base_socket_type() {} explicit tlm_target_socket(const char* name) : base_socket_type(name) {} virtual const char* kind() const { return "tlm_target_socket"; } }; } // namespace tlm #endif // TLM_CORE_TLM_TARGET_SOCKET_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_2/tlm_version.h0000644000175000017500000001650614342422106021217 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /* --------------------------------------------------------------------------------------- @file tlm_version.h @brief TLM version header Original Author: Charles Wilson, XtremeEDA Corporation @description This header contains preprocessor and compiler symbols to allow for the determination of the TLM version information. This conforms to IEEE 1666-2005 section 8.5.5 - 8.5.7 . The following are provided: . preprocessor: TLM_VERSION_MAJOR numeric TLM_VERSION_MINOR numeric TLM_VERSION_PATCH numeric TLM_VERSION_ORIGINATOR string ([A-Z][a-z][0-9]_) TLM_VERSION_RELEASE_DATE ISO8601 date (YYYYMMDD) TLM_VERSION_PRERELEASE string ([A-Z][a-z][0-9]_) TLM_IS_PRERELEASE bool (1,0) TLM_VERSION string {2.0.0_DR3-TLMWG} TLM_COPYRIGHT string . compiler: tlm_version_major const unsigned int tlm_version_minor const unsigned int tlm_version_patch const unsigned int tlm_version_originator const std::string tlm_version_release_date const std::string tlm_version_prerelease const std::string tlm_is_prerelease const bool tlm_version const string tlm_copyright const string . accessors: inline const char* tlm_release (void) inline const char* tlm_version (void) inline const char* tlm_copyright (void) --------------------------------------------------------------------------------------- */ #ifndef __TLM_VERSION_H__ #define __TLM_VERSION_H__ namespace tlm { #define TLM_VERSION_MAJOR 2 ///< version major level ( numeric ) #define TLM_VERSION_MINOR 0 ///< version minor level ( numeric ) #define TLM_VERSION_PATCH 6 ///< version patch level ( numeric ) #define TLM_VERSION_ORIGINATOR "Accellera" ///< TLM creator string #define TLM_VERSION_SEPARATOR "." ///< version string separator #define TLM_IS_PRERELEASE 1 ///< pre-release flag ( 1 / 0 ) #if TLM_IS_PRERELEASE # define TLM_VERSION_PRERELEASE "pub_rev" ///< pre-release version string #else # define TLM_VERSION_PRERELEASE "" ///< pre-release version string #endif #define TLM_VERSION_RELEASE_YEAR "2019" ///< release year ( YYYY ) #define TLM_VERSION_RELEASE_MONTH "12" ///< release month ( MM ) #define TLM_VERSION_RELEASE_DAY "03" ///< release day ( DD ) #define TLM_COPYRIGHT \ "Copyright (c) 1996-" TLM_VERSION_RELEASE_YEAR " by all Contributors\n" \ "ALL RIGHTS RESERVED" /************************** do not modify below this line *******************************/ /******************************* preprocessor symbols ***********************************/ #define TLM_VERSION_RELEASE_DATE TLM_VERSION_RELEASE_YEAR \ TLM_VERSION_RELEASE_MONTH \ TLM_VERSION_RELEASE_DAY #define TLM_VERSION_STR(x) TLM_VERSION_STR_HELPER(x) #define TLM_VERSION_STR_HELPER(x) #x #define TLM_VERSION_STRING_MAJOR TLM_VERSION_STR(TLM_VERSION_MAJOR) #define TLM_VERSION_STRING_MINOR TLM_VERSION_STR(TLM_VERSION_MINOR) #define TLM_VERSION_STRING_PATCH TLM_VERSION_STR(TLM_VERSION_PATCH) #define TLM_VERSION_STRING_MMP TLM_VERSION_STRING_MAJOR TLM_VERSION_SEPARATOR \ TLM_VERSION_STRING_MINOR TLM_VERSION_SEPARATOR \ TLM_VERSION_STRING_PATCH #define TLM_VERSION_STRING_PRE_START "_" #define TLM_VERSION_STRING_PRE_END "-" #if ( TLM_IS_PRERELEASE == 1 ) #define TLM_VERSION_STRING_PRERELEASE TLM_VERSION_PRERELEASE #define TLM_VERSION_STRING_RELEASE_DATE "" #else /* TLM_IS_PRERELEASE == 1 */ #define TLM_VERSION_STRING_PRERELEASE "" #define TLM_VERSION_STRING_RELEASE_DATE TLM_VERSION_RELEASE_DATE #endif /* TLM_IS_PRERELEASE == 1 */ #define TLM_VERSION_STRING TLM_VERSION_STRING_MMP \ TLM_VERSION_STRING_PRE_START \ TLM_VERSION_STRING_PRERELEASE \ TLM_VERSION_STRING_PRE_END \ TLM_VERSION_ORIGINATOR #define TLM_VERSION_STRING_2 "TLM " \ TLM_VERSION_STRING_MMP \ " --- " \ TLM_VERSION_RELEASE_YEAR \ "-" \ TLM_VERSION_RELEASE_MONTH \ "-" \ TLM_VERSION_RELEASE_DAY #define TLM_VERSION TLM_VERSION_STRING /********************************* compiler symbols **************************************/ const unsigned int tlm_version_major ( TLM_VERSION_MAJOR ); const unsigned int tlm_version_minor ( TLM_VERSION_MINOR ); const unsigned int tlm_version_patch ( TLM_VERSION_PATCH ); const bool tlm_is_prerelease ( TLM_IS_PRERELEASE ); const std::string tlm_version_string ( TLM_VERSION_STRING ); const std::string tlm_version_originator ( TLM_VERSION_ORIGINATOR ); const std::string tlm_version_prerelease ( TLM_VERSION_PRERELEASE ); const std::string tlm_version_release_date ( TLM_VERSION_STRING_RELEASE_DATE ); const std::string tlm_copyright_string ( TLM_COPYRIGHT ); const std::string tlm_version_string_2 ( TLM_VERSION_STRING_2 ); inline const char* tlm_release ( void ) { return tlm_version_string.c_str (); } inline const char* tlm_version ( void ) { return tlm_version_string_2.c_str (); } inline const char* tlm_copyright ( void ) { return tlm_copyright_string.c_str (); } } // namespace tlm #endif /* __TLM_VERSION_H__ */ systemc-2.3.4/src/tlm_core/tlm_1/0000755000175000017500000000000014342422106016474 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/0000755000175000017500000000000014342422106021023 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/0000755000175000017500000000000014342422106023472 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/0000755000175000017500000000000014342422106027674 5ustar carstencarsten././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootsystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.hsystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.0000644000175000017500000001056214342422106034103 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_REQ_RSP_CHANNELS_H__ #define __TLM_REQ_RSP_CHANNELS_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h" namespace tlm { template < typename REQ , typename RSP , typename REQ_CHANNEL = tlm_fifo , typename RSP_CHANNEL = tlm_fifo > class tlm_req_rsp_channel : public sc_core::sc_module { public: // uni-directional slave interface sc_core::sc_export< tlm_fifo_get_if< REQ > > get_request_export; sc_core::sc_export< tlm_fifo_put_if< RSP > > put_response_export; // uni-directional master interface sc_core::sc_export< tlm_fifo_put_if< REQ > > put_request_export; sc_core::sc_export< tlm_fifo_get_if< RSP > > get_response_export; // master / slave interfaces sc_core::sc_export< tlm_master_if< REQ , RSP > > master_export; sc_core::sc_export< tlm_slave_if< REQ , RSP > > slave_export; tlm_req_rsp_channel( int req_size = 1 , int rsp_size = 1 ) : sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name("tlm_req_rsp_channel") ) ) , request_fifo( req_size ) , response_fifo( rsp_size ) , master( request_fifo , response_fifo ) , slave( request_fifo , response_fifo ) { bind_exports(); } tlm_req_rsp_channel( sc_core::sc_module_name module_name , int req_size = 1 , int rsp_size = 1 ) : sc_core::sc_module( module_name ) , request_fifo( req_size ) , response_fifo( rsp_size ) , master( request_fifo , response_fifo ) , slave( request_fifo , response_fifo ) { bind_exports(); } private: void bind_exports() { put_request_export( request_fifo ); get_request_export( request_fifo ); put_response_export( response_fifo ); get_response_export( response_fifo ); master_export( master ); slave_export( slave ); } protected: REQ_CHANNEL request_fifo; RSP_CHANNEL response_fifo; tlm_master_imp< REQ , RSP > master; tlm_slave_imp< REQ , RSP > slave; }; template < typename REQ , typename RSP , typename REQ_CHANNEL = tlm_fifo , typename RSP_CHANNEL = tlm_fifo > class tlm_transport_channel : public sc_core::sc_module { public: // master transport interface sc_core::sc_export< tlm_transport_if< REQ , RSP > > target_export; // slave interfaces sc_core::sc_export< tlm_fifo_get_if< REQ > > get_request_export; sc_core::sc_export< tlm_fifo_put_if< RSP > > put_response_export; sc_core::sc_export< tlm_slave_if< REQ , RSP > > slave_export; tlm_transport_channel() : sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name("transport_channel" ) ) ) , target_export("target_export") , req_rsp( "req_rsp" , 1 , 1 ) , t2m("ts2m") { do_binding(); } tlm_transport_channel( sc_core::sc_module_name nm ) : sc_core::sc_module( nm ) , target_export("target_export") , req_rsp( "req_rsp" , 1 , 1 ) , t2m("tsm" ) { do_binding(); } private: void do_binding() { target_export( t2m.target_export ); t2m.master_port( req_rsp.master_export ); get_request_export( req_rsp.get_request_export ); put_response_export( req_rsp.put_response_export ); slave_export( req_rsp.slave_export ); } tlm_req_rsp_channel< REQ , RSP , REQ_CHANNEL , RSP_CHANNEL > req_rsp; tlm_transport_to_master< REQ , RSP > t2m; }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h0000644000175000017500000000636214342422106033244 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // // To the LRM writer : these classes are purely artifacts of the implementation. // #ifndef __TLM_PUT_GET_IMP_H__ #define __TLM_PUT_GET_IMP_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h" namespace tlm { template < typename PUT_DATA , typename GET_DATA> class tlm_put_get_imp : public virtual tlm_put_if< PUT_DATA > , public virtual tlm_get_peek_if< GET_DATA > { public: tlm_put_get_imp( tlm_put_if &p , tlm_get_peek_if &g ) : put_fifo( p ) , get_fifo( g ) {} // put interface void put( const PUT_DATA &t ) { put_fifo.put( t ); } bool nb_put( const PUT_DATA &t ) { return put_fifo.nb_put( t ); } bool nb_can_put( tlm_tag *t = 0 ) const { return put_fifo.nb_can_put( t ); } const sc_core::sc_event &ok_to_put( tlm_tag *t = 0 ) const { return put_fifo.ok_to_put( t ); } // get interface GET_DATA get( tlm_tag * = 0 ) { return get_fifo.get(); } bool nb_get( GET_DATA &t ) { return get_fifo.nb_get( t ); } bool nb_can_get( tlm_tag *t = 0 ) const { return get_fifo.nb_can_get( t ); } virtual const sc_core::sc_event &ok_to_get( tlm_tag *t = 0 ) const { return get_fifo.ok_to_get( t ); } // peek interface GET_DATA peek( tlm_tag * = 0 ) const { return get_fifo.peek(); } bool nb_peek( GET_DATA &t ) const { return get_fifo.nb_peek( t ); } bool nb_can_peek( tlm_tag *t = 0 ) const { return get_fifo.nb_can_peek( t ); } virtual const sc_core::sc_event &ok_to_peek( tlm_tag *t = 0 ) const { return get_fifo.ok_to_peek( t ); } private: tlm_put_if &put_fifo; tlm_get_peek_if &get_fifo; }; template < typename REQ , typename RSP > class tlm_master_imp : private tlm_put_get_imp< REQ , RSP > , public virtual tlm_master_if< REQ , RSP > { public: tlm_master_imp( tlm_put_if &req , tlm_get_peek_if &rsp ) : tlm_put_get_imp( req , rsp ) {} }; template < typename REQ , typename RSP > class tlm_slave_imp : private tlm_put_get_imp< RSP , REQ > , public virtual tlm_slave_if< REQ , RSP > { public: tlm_slave_imp( tlm_get_peek_if &req , tlm_put_if &rsp ) : tlm_put_get_imp( rsp , req ) {} }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/0000755000175000017500000000000014342422106025271 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h0000644000175000017500000001434314342422106027246 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_FIFO_H__ #define __TLM_FIFO_H__ // // This implements put, get and peek // // It also implements 0 and infinite size fifos - but the size // zero fifos aren't rendezvous like zero length fifos, they simply are both // full and empty at the same time. // // The size can be dynamically changed using the resize interface // // To get an infinite fifo use a -ve size in the constructor. // The absolute value of the size is taken as the starting size of the // actual physical buffer. // //#include #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/circular_buffer.h" namespace tlm { template class tlm_fifo : public virtual tlm_fifo_get_if, public virtual tlm_fifo_put_if, public sc_core::sc_prim_channel { public: // constructors explicit tlm_fifo( int size_ = 1 ) : sc_core::sc_prim_channel( sc_core::sc_gen_unique_name( "fifo" ) ) { init( size_ ); } explicit tlm_fifo( const char* name_, int size_ = 1 ) : sc_core::sc_prim_channel( name_ ) { init( size_ ); } // destructor virtual ~tlm_fifo() {} // tlm get interface T get( tlm_tag * = 0 ); bool nb_get( T& ); bool nb_can_get( tlm_tag * = 0 ) const; const sc_core::sc_event &ok_to_get( tlm_tag * = 0 ) const { return m_data_written_event; } // tlm peek interface T peek( tlm_tag * = 0 ) const; bool nb_peek( T& ) const; bool nb_can_peek( tlm_tag * = 0 ) const; const sc_core::sc_event &ok_to_peek( tlm_tag * = 0 ) const { return m_data_written_event; } // tlm put interface void put( const T& ); bool nb_put( const T& ); bool nb_can_put( tlm_tag * = 0 ) const; const sc_core::sc_event& ok_to_put( tlm_tag * = 0 ) const { return m_data_read_event; } // resize if void nb_expand( unsigned int n = 1 ); void nb_unbound( unsigned int n = 16 ); bool nb_reduce( unsigned int n = 1 ); bool nb_bound( unsigned int n ); // debug interface bool nb_peek( T & , int n ) const; bool nb_poke( const T & , int n = 0 ); int used() const { return m_num_readable - m_num_read; } int size() const { return m_size; } void debug() const { if( is_empty() ) std::cout << "empty" << std::endl; if( is_full() ) std::cout << "full" << std::endl; std::cout << "size " << size() << " - " << used() << " used " << std::endl; std::cout << "readable " << m_num_readable << std::endl; std::cout << "written/read " << m_num_written << "/" << m_num_read << std::endl; } // support functions static const char* const kind_string; const char* kind() const { return kind_string; } protected: sc_core::sc_event &read_event( tlm_tag * = 0 ) { return m_data_read_event; } protected: void update(); // support methods void init( int ); protected: circular_buffer buffer; int m_size; // logical size of fifo int m_num_readable; // #samples readable int m_num_read; // #samples read during this delta cycle int m_num_written; // #samples written during this delta cycle bool m_expand; // has an expand occurred during this delta cycle ? int m_num_read_no_notify; // #samples read without notify during this delta cycle sc_core::sc_event m_data_read_event; sc_core::sc_event m_data_written_event; private: // disabled tlm_fifo( const tlm_fifo& ); tlm_fifo& operator = ( const tlm_fifo& ); // // use nb_can_get() and nb_can_put() rather than the following two // private functions // bool is_empty() const { return used() == 0; } bool is_full() const { //return size() == m_num_readable + m_num_written; // Old buggy code if( size() < 0 ) return false; else return size() <= m_num_readable + m_num_written; } }; template const char* const tlm_fifo::kind_string = "tlm_fifo"; /****************************************************************** // // init and update // ******************************************************************/ template< typename T > inline void tlm_fifo::init( int size_ ) { if( size_ > 0 ) { buffer.resize( size_ ); } else if( size_ < 0 ) { buffer.resize( -size_ ); } else { buffer.resize( 16 ); } m_size = size_; m_num_readable = 0; m_num_read = 0; m_num_written = 0; m_expand = false; m_num_read_no_notify = false; } template < typename T> inline void tlm_fifo::update() { if( m_num_read > m_num_read_no_notify || m_expand ) { m_data_read_event.notify( sc_core::SC_ZERO_TIME ); } if( m_num_written > 0 ) { m_data_written_event.notify( sc_core::SC_ZERO_TIME ); } m_expand = false; m_num_read = 0; m_num_written = 0; m_num_readable = buffer.used(); m_num_read_no_notify = 0; } } // namespace tlm #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_put_get.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_peek.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_resize.h" #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/circular_buffer.h0000644000175000017500000001257614342422106030612 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // // To the LRM writer : this class is purely an artifact of the implementation. // #ifndef __CIRCULAR_BUFFER_H__ #define __CIRCULAR_BUFFER_H__ #include namespace tlm { template < typename T > class circular_buffer { public: explicit circular_buffer( int size = 0 ); ~circular_buffer(); void resize( int size ); void clear(); T read(); void write( const T & ); bool is_empty() const { return used() == 0; } bool is_full() const { return free() == 0; } int size() const { return m_size; } int used() const { return m_used; } int free() const { return m_free; } const T& read_data() const { return buf_read( m_buf, m_ri ); } const T& peek_data( int i ) const { return buf_read( m_buf, (m_ri + i) % size() ); } T & poke_data( int i ) { return buf_read( m_buf , (m_wi + i) % size() ); } void debug() const; private: void increment_write_pos( int i = 1 ); void increment_read_pos( int i = 1 ); void init(); circular_buffer( const circular_buffer &b ); // disabled circular_buffer &operator=( const circular_buffer & ); // disabled void* buf_alloc( int size ); void buf_free( void*& buf ); void buf_write( void* buf, int n, const T & t ); T& buf_read( void* buf, int n ) const; void buf_clear( void* buf, int n ); private: int m_size; // size of the buffer void* m_buf; // the buffer int m_free; // number of free spaces int m_used; // number of used spaces int m_ri; // index of next read int m_wi; // index of next write }; template< typename T > void circular_buffer::debug() const { std::cout << "Buffer debug" << std::endl; std::cout << "Size : " << size() << std::endl; std::cout << "Free/Used " << free() << "/" << used() << std::endl; std::cout << "Indices : r/w = " << m_ri << "/" << m_wi << std::endl; if( is_empty() ) { std::cout << "empty" << std::endl; } if( is_full() ) { std::cout << "full" << std::endl; } std::cout << "Data : " << std::endl; for( int i = 0; i < used(); i++ ) { std::cout << peek_data( i ) << std::endl; } } template < typename T > circular_buffer::circular_buffer( int size ) : m_size(size) , m_buf(0) { init(); } template < typename T > void circular_buffer::clear() { for( int i=0; i < used(); i++ ) { buf_clear( m_buf, (m_ri + i) % m_size ); } m_free = m_size; m_used = m_ri = m_wi = 0; } template < typename T > circular_buffer::~circular_buffer() { clear(); buf_free( m_buf ); } template < typename T > void circular_buffer::resize( int size ) { int i; void * new_buf = buf_alloc(size); for( i = 0; i < size && i < used(); i++ ) { buf_write( new_buf, i, peek_data( i ) ); buf_clear( m_buf, (m_ri + i) % m_size ); } buf_free( m_buf ); m_size = size; m_ri = 0; m_wi = i % m_size; m_used = i; m_free = m_size - m_used; m_buf = new_buf; } template < typename T > void circular_buffer::init() { if( m_size > 0 ) { m_buf = buf_alloc( m_size ); } m_free = m_size; m_used = 0; m_ri = 0; m_wi = 0; } template < typename T > T circular_buffer::read() { T t = read_data(); buf_clear( m_buf, m_ri ); increment_read_pos(); return t; } template < typename T > void circular_buffer::write( const T &t ) { buf_write( m_buf, m_wi, t ); increment_write_pos(); } template < typename T > void circular_buffer::increment_write_pos( int i ) { m_wi = ( m_wi + i ) % m_size; m_used += i; m_free -= i; } template < typename T > void circular_buffer::increment_read_pos( int i ) { m_ri = ( m_ri + i ) % m_size; m_used -= i; m_free += i; } template < typename T > inline void* circular_buffer::buf_alloc( int size ) { return new unsigned char[ size * sizeof(T) ]; } template < typename T > inline void circular_buffer::buf_free( void* & buf ) { delete [] static_cast(buf); buf = 0; } template < typename T > inline void circular_buffer::buf_write( void* buf, int n, const T & t ) { T* p = static_cast(buf) + n; new (p) T(t); } template < typename T > inline T& circular_buffer::buf_read( void* buf, int n ) const { T* p = static_cast(buf) + n; return *p; } template < typename T > inline void circular_buffer::buf_clear( void* buf, int n ) { T* p = static_cast(buf) + n; p->~T(); } } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_resize.h0000644000175000017500000000372214342422106030626 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_FIFO_RESIZE_H__ #define __TLM_FIFO_RESIZE_H__ /****************************************************************** // // resize interface // ******************************************************************/ namespace tlm { template < typename T> inline void tlm_fifo::nb_expand( unsigned int n ) { if( m_size >= 0 ) { m_expand = true; m_size += n; request_update(); } } template < typename T> inline void tlm_fifo::nb_unbound( unsigned int n ) { m_expand = true; m_size = -n; if( buffer.size() < static_cast( n ) ) { buffer.resize( n ); } request_update(); } template < typename T> inline bool tlm_fifo::nb_reduce( unsigned int n ) { if( m_size < 0 ) { return false; } return nb_bound( size() - n ); } template < typename T> inline bool tlm_fifo::nb_bound( unsigned int new_size ) { bool ret = true; if( static_cast( new_size ) < used() ) { new_size = used(); ret = false; } m_size = new_size; return ret; } } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_peek.h0000644000175000017500000000373414342422106030254 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_FIFO_PEEK_H__ #define __TLM_FIFO_PEEK_H__ namespace tlm { template < typename T> inline T tlm_fifo::peek( tlm_tag * ) const { while( is_empty() ) { // call free-standing sc_core::wait(), // since sc_prim_channel::wait(.) is not const sc_core::wait( m_data_written_event ); } return buffer.read_data(); } template < typename T> inline bool tlm_fifo::nb_peek( T &t ) const { if( used() < 1 ) { return false; } t = buffer.peek_data( 0 ); return true; } template < typename T> inline bool tlm_fifo::nb_peek( T &t , int n ) const { if( n >= used() || n < -1 ) { return false; } if( n == -1 ) { n = used() - 1; } t = buffer.peek_data( n ); return true; } template< typename T > inline bool tlm_fifo::nb_can_peek( tlm_tag * ) const { return !is_empty(); } template < typename T> inline bool tlm_fifo::nb_poke( const T &t , int n ) { if( n >= used() || n < 0 ) { return false; } buffer.poke_data( n ) = t; return true; } } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_put_get.h0000644000175000017500000000501714342422106030773 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_FIFO_PUT_GET_IF_H__ #define __TLM_FIFO_PUT_GET_IF_H__ namespace tlm { /****************************************************************** // // get interface // ******************************************************************/ template inline T tlm_fifo::get( tlm_tag * ) { while( is_empty() ) { wait( m_data_written_event ); } m_num_read ++; request_update(); return buffer.read(); } // non-blocking read template inline bool tlm_fifo::nb_get( T& val_ ) { if( is_empty() ) { return false; } m_num_read ++; request_update(); val_ = buffer.read(); return true; } template inline bool tlm_fifo::nb_can_get( tlm_tag * ) const { return !is_empty(); } /****************************************************************** // // put interface // ******************************************************************/ template inline void tlm_fifo::put( const T& val_ ) { while( is_full() ) { wait( m_data_read_event ); } if( buffer.is_full() ) { buffer.resize( buffer.size() * 2 ); } m_num_written ++; buffer.write( val_ ); request_update(); } template inline bool tlm_fifo::nb_put( const T& val_ ) { if( is_full() ) { return false; } if( buffer.is_full() ) { buffer.resize( buffer.size() * 2 ); } m_num_written ++; buffer.write( val_ ); request_update(); return true; } template < typename T > inline bool tlm_fifo::nb_can_put( tlm_tag * ) const { return !is_full(); } } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/0000755000175000017500000000000014342422106023502 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h0000644000175000017500000000510314342422106026331 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ADAPTERS_H__ #define __TLM_ADAPTERS_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h" namespace tlm { template< typename REQ , typename RSP > class tlm_transport_to_master : public sc_core::sc_module , public virtual tlm_transport_if< REQ , RSP > { public: sc_core::sc_export< tlm_transport_if< REQ , RSP > > target_export; sc_core::sc_port< tlm_master_if< REQ , RSP > > master_port; tlm_transport_to_master( sc_core::sc_module_name nm ) : sc_core::sc_module( nm ) { target_export( *this ); } tlm_transport_to_master() : sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name( "transport_to_master" ) ) ){ target_export( *this ); } RSP transport( const REQ &req ) { mutex.lock(); master_port->put( req ); rsp = master_port->get(); mutex.unlock(); return rsp; } private: sc_core::sc_mutex mutex; RSP rsp; }; template< typename REQ , typename RSP > class tlm_slave_to_transport : public sc_core::sc_module { public: SC_HAS_PROCESS( tlm_slave_to_transport ); sc_core::sc_port< tlm_slave_if< REQ , RSP > > slave_port; sc_core::sc_port< tlm_transport_if< REQ , RSP > > initiator_port; tlm_slave_to_transport( sc_core::sc_module_name nm ) : sc_core::sc_module( nm ) {} tlm_slave_to_transport() : sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name("slave_to_transport") ) ) {} private: void run() { REQ req; RSP rsp; while( true ) { slave_port->get( req ); rsp = initiator_port->transport( req ); slave_port->put( rsp ); } } }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_ports/0000755000175000017500000000000014342422106023046 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_event_finder.h0000644000175000017500000000471414342422106026551 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef TLM_CORE_TLM_EVENT_FINDER_H_INCLUDED_ #define TLM_CORE_TLM_EVENT_FINDER_H_INCLUDED_ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h" namespace tlm { template class tlm_event_finder_t : public sc_core::sc_event_finder { public: // constructor tlm_event_finder_t( const sc_core::sc_port_base& port_, const sc_core::sc_event& (IF::*event_method_) ( tlm_tag * ) const ) : sc_core::sc_event_finder( port_ ), m_event_method( event_method_ ) {} // destructor (does nothing) virtual ~tlm_event_finder_t() {} virtual const sc_core::sc_event& find_event( sc_core::sc_interface* if_p = 0 ) const; private: const sc_core::sc_event& (IF::*m_event_method) ( tlm_tag * ) const; private: // disabled tlm_event_finder_t(); tlm_event_finder_t( const tlm_event_finder_t& ); tlm_event_finder_t& operator = ( const tlm_event_finder_t& ); }; template inline const sc_core::sc_event& tlm_event_finder_t::find_event( sc_core::sc_interface* if_p ) const { const IF* iface = ( if_p ) ? dynamic_cast( if_p ) : dynamic_cast( port().get_interface() ); if( iface == 0 ) { report_error( sc_core::SC_ID_FIND_EVENT_, "port is not bound" ); return sc_core::sc_event::none; } return (const_cast( iface )->*m_event_method) ( 0 ); } } // namespace tlm #endif // TLM_CORE_TLM_EVENT_FINDER_H_INCLUDED_ systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_nonblocking_port.h0000644000175000017500000000507014342422106027444 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_NONBLOCKING_PORT_H__ #define __TLM_NONBLOCKING_PORT_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_event_finder.h" namespace tlm { template < typename T > class tlm_nonblocking_get_port : public sc_core::sc_port< tlm_nonblocking_get_if< T > , 1 > { public: typedef tlm_nonblocking_get_if get_if_type; tlm_nonblocking_get_port( const char *port_name ) : sc_core::sc_port< tlm_nonblocking_get_if< T > , 1 >( port_name ) {} sc_core::sc_event_finder& ok_to_get() const { return *new tlm_event_finder_t< get_if_type , T >( *this, &get_if_type::ok_to_get ); } }; template < typename T > class tlm_nonblocking_peek_port : public sc_core::sc_port< tlm_nonblocking_peek_if< T > , 1 > { public: typedef tlm_nonblocking_peek_if peek_if_type; tlm_nonblocking_peek_port( const char *port_name ) : sc_core::sc_port< tlm_nonblocking_peek_if< T > , 1 >( port_name ) {} sc_core::sc_event_finder& ok_to_peek() const { return *new tlm_event_finder_t< peek_if_type , T >( *this, &peek_if_type::ok_to_peek ); } }; template < typename T > class tlm_nonblocking_put_port : public sc_core::sc_port< tlm_nonblocking_put_if< T > , 1 > { public: typedef tlm_nonblocking_put_if put_if_type; tlm_nonblocking_put_port( const char *port_name ) : sc_core::sc_port< tlm_nonblocking_put_if< T > , 1 >( port_name ) {} sc_core::sc_event_finder& ok_to_put() const { return *new tlm_event_finder_t< put_if_type , T >( *this, &put_if_type::ok_to_put ); } }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/0000755000175000017500000000000014342422106024242 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h0000644000175000017500000000763214342422106027070 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // // Note to the LRM writer : This is the core of the TLM standard // #ifndef __TLM_CORE_IFS_H__ #define __TLM_CORE_IFS_H__ //#include #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h" namespace tlm { // bidirectional blocking interfaces template < typename REQ , typename RSP > class tlm_transport_if : public virtual sc_core::sc_interface { public: virtual RSP transport( const REQ & ) = 0; virtual void transport( const REQ &req , RSP &rsp ) { rsp = transport( req ); } }; // uni-directional blocking interfaces template < typename T > class tlm_blocking_get_if : public virtual sc_core::sc_interface { public: virtual T get( tlm_tag *t = 0 ) = 0; virtual void get( T &t ) { t = get(); } }; template < typename T > class tlm_blocking_put_if : public virtual sc_core::sc_interface { public: virtual void put( const T &t ) = 0; }; // uni-directional non blocking interfaces template < typename T > class tlm_nonblocking_get_if : public virtual sc_core::sc_interface { public: virtual bool nb_get( T &t ) = 0; virtual bool nb_can_get( tlm_tag *t = 0 ) const = 0; virtual const sc_core::sc_event &ok_to_get( tlm_tag *t = 0 ) const = 0; }; template < typename T > class tlm_nonblocking_put_if : public virtual sc_core::sc_interface { public: virtual bool nb_put( const T &t ) = 0; virtual bool nb_can_put( tlm_tag *t = 0 ) const = 0; virtual const sc_core::sc_event &ok_to_put( tlm_tag *t = 0 ) const = 0; }; // combined uni-directional blocking and non blocking template < typename T > class tlm_get_if : public virtual tlm_blocking_get_if< T > , public virtual tlm_nonblocking_get_if< T > {}; template < typename T > class tlm_put_if : public virtual tlm_blocking_put_if< T > , public virtual tlm_nonblocking_put_if< T > {}; // peek interfaces template < typename T > class tlm_blocking_peek_if : public virtual sc_core::sc_interface { public: virtual T peek( tlm_tag *t = 0 ) const = 0; virtual void peek( T &t ) const { t = peek(); } }; template < typename T > class tlm_nonblocking_peek_if : public virtual sc_core::sc_interface { public: virtual bool nb_peek( T &t ) const = 0; virtual bool nb_can_peek( tlm_tag *t = 0 ) const = 0; virtual const sc_core::sc_event &ok_to_peek( tlm_tag *t = 0 ) const = 0; }; template < typename T > class tlm_peek_if : public virtual tlm_blocking_peek_if< T > , public virtual tlm_nonblocking_peek_if< T > {}; // get_peek interfaces template < typename T > class tlm_blocking_get_peek_if : public virtual tlm_blocking_get_if , public virtual tlm_blocking_peek_if {}; template < typename T > class tlm_nonblocking_get_peek_if : public virtual tlm_nonblocking_get_if , public virtual tlm_nonblocking_peek_if {}; template < typename T > class tlm_get_peek_if : public virtual tlm_get_if , public virtual tlm_peek_if , public virtual tlm_blocking_get_peek_if , public virtual tlm_nonblocking_get_peek_if {}; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h0000644000175000017500000000465014342422106027060 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // // Note to the LRM writer : These interfaces are channel specific interfaces // useful in the context of tlm_fifo. // #ifndef __TLM_FIFO_IFS_H__ #define __TLM_FIFO_IFS_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h" namespace tlm { // // Fifo specific interfaces // // Fifo Debug Interface template< typename T > class tlm_fifo_debug_if : public virtual sc_core::sc_interface { public: virtual int used() const = 0; virtual int size() const = 0; virtual void debug() const = 0; // // non blocking peek and poke - no notification // // n is index of data : // 0 <= n < size(), where 0 is most recently written, and size() - 1 // is oldest ie the one about to be read. // virtual bool nb_peek( T & , int n ) const = 0; virtual bool nb_poke( const T & , int n = 0 ) = 0; }; // fifo interfaces = extended + debug template < typename T > class tlm_fifo_put_if : public virtual tlm_put_if , public virtual tlm_fifo_debug_if {}; template < typename T > class tlm_fifo_get_if : public virtual tlm_get_peek_if , public virtual tlm_fifo_debug_if { using tlm_get_peek_if::nb_peek; using tlm_fifo_debug_if::nb_peek; }; class tlm_fifo_config_size_if : public virtual sc_core::sc_interface { public: virtual void nb_expand( unsigned int n = 1 ) = 0; virtual void nb_unbound( unsigned int n = 16 ) = 0; virtual bool nb_reduce( unsigned int n = 1 ) = 0; virtual bool nb_bound( unsigned int n ) = 0; }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h0000644000175000017500000000460014342422106030615 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_MASTER_SLAVE_IFS_H__ #define __TLM_MASTER_SLAVE_IFS_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h" namespace tlm { // // req/rsp combined interfaces // // blocking template < typename REQ , typename RSP> class tlm_blocking_master_if : public virtual tlm_blocking_put_if< REQ > , public virtual tlm_blocking_get_peek_if< RSP > {}; template < typename REQ , typename RSP> class tlm_blocking_slave_if : public virtual tlm_blocking_put_if< RSP > , public virtual tlm_blocking_get_peek_if< REQ > {}; // nonblocking template < typename REQ , typename RSP > class tlm_nonblocking_master_if : public virtual tlm_nonblocking_put_if< REQ > , public virtual tlm_nonblocking_get_peek_if< RSP > {}; template < typename REQ , typename RSP > class tlm_nonblocking_slave_if : public virtual tlm_nonblocking_put_if< RSP > , public virtual tlm_nonblocking_get_peek_if< REQ > {}; // combined template < typename REQ , typename RSP > class tlm_master_if : public virtual tlm_put_if< REQ > , public virtual tlm_get_peek_if< RSP > , public virtual tlm_blocking_master_if< REQ , RSP > , public virtual tlm_nonblocking_master_if< REQ , RSP > {}; template < typename REQ , typename RSP > class tlm_slave_if : public virtual tlm_put_if< RSP > , public virtual tlm_get_peek_if< REQ > , public virtual tlm_blocking_slave_if< REQ , RSP > , public virtual tlm_nonblocking_slave_if< REQ , RSP > {}; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h0000644000175000017500000000215414342422106026044 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ // // Note to the LRM writer : This is part of the core TLM standard // #ifndef __TLM_TAG_H__ #define __TLM_TAG_H__ namespace tlm { template class tlm_tag {}; } #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_req_rsp/tlm_req_rsp.h0000644000175000017500000000276114342422106023531 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_REQ_RSP_H__ #define __TLM_REQ_RSP_H__ // The unannotated TLM interfaces #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h" // The channels : tlm_fifo, tlm_transport_channel and tlm_req_rsp_channel #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h" // Some non blocking ports to provide static sensitivity #include "tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_nonblocking_port.h" #endif /* __TLM_REQ_RSP_H__ */ systemc-2.3.4/src/tlm_core/tlm_1/README.txt0000644000175000017500000000633014342422106020174 0ustar carstencarstenTLM-1.0 header files ==================== Dir: include/tlm_core/tlm_1/ SubDirs: tlm_analysis/ tlm_req_rsp/ Files: README.txt Comments ======== User code should only #include the tlm or tlm.h header file in the include/ directory and avoid including any of the include files in this directory directly. All objects defined in this file hierarchy are in the tlm namespace. The header files are organizated, by subdirectory, as follows: tlm_analysis/ -------------- This contains the analysis interfaces, ports, and fifos. These files were not part of the original TLM-1.0 release, but have been grouped with TLM-1.0 in this release of TLM-2.0 Files: tlm_analysis.h (includes the other header files in this directory ) tlm_analysis_fifo.h (defines tlm_analysis_fifo ) tlm_analysis_if.h (defines tlm_analysis_if and tlm_delayed_analysis_if ) tlm_analysis_port.h (defines tlm_analysis_port ) tlm_analysis_triple.h (defines tlm_analysis_triple ) tlm_write_if.h (defines tlm_write_if and tlm_delayed_write_if ) tlm_req_rsp/ ------------ This provides support for TLM modeling based on a request/response pair that are passed by value. This is the original TLM 1.0 standard, with the addition of an overloading of the blocking transport method with pass-by-reference arguments. Files: tlm_req_rsp.h (includes the key header files from the other directories) tlm_1_interfaces/ tlm_core_ifs.h (defines the TLM 1.0 core interfaces: tlm_transport_if tlm_blocking_get_if tlm_blocking_put_if tlm_nonblocking_get_if tlm_nonblocking_put_if tlm_get_if tlm_put_if tlm_blocking_peek_if tlm_nonblocking_peek_if tlm_peek_if tlm_blocking_get_peek_if tlm_nonblocking_get_peek_if tlm_get_peek_if ) tlm_fifo_ifs.h ( defines the TLM1.0 fifo interfaces: tlm_fifo_debug_if tlm_fifo_put_if tlm_fifo_get_if tlm_fifo_config_size_if ) tlm_master_slave_ifs.h ( defines the TLM1.0 master slave interfaces: tlm_blocking_master_if tlm_blocking_slave_if tlm_nonblocking_master_if tlm_nonblocking_slave_if tlm_master_if tlm_slave_if ) tlm_tag.h ( defines tlm_tag ) tlm_ports/ tlm_nonblocking_port.h (defines tlm_nonblocking_put_port, tlm_nonblocking_get_port and tlm_nonblocking_peek_port ) tlm_event_finder.h (defines tlm_event_finder_t ) tlm_channels/ tlm_fifo/ tlm_fifo.h (defines tlm_fifo, includes the other files ) tlm_fifo_peek.h (defines peek and poke interfaces for tlm_fifo ) tlm_fifo_put_get.h (defines put and get interfaces for tlm_fifo ) tlm_fifo_resize.h (defines expand, reduce, bound and unbound interfaces for tlm_fifo ) circular_buffer.h (defines circular buffer used by tlm_fifo ) tlm_req_rsp_channels/ tlm_req_rsp_channels.h (defines tlm_req_rsp_channel and tlm_transport_channel ) tlm_put_get_imp.h (contains implementatins used by the channels) tlm_adapters/ tlm_adapters.h (defines transport_to_master and tlm_slave_to_transport) systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/0000755000175000017500000000000014342422106021173 5ustar carstencarstensystemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h0000644000175000017500000000242114342422106024520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ANALYSIS_IF_H__ #define __TLM_ANALYSIS_IF_H__ #include "tlm_core/tlm_1/tlm_analysis/tlm_write_if.h" namespace tlm { template < typename T > class tlm_analysis_if : public virtual tlm_write_if { }; template < typename T > class tlm_delayed_analysis_if : public virtual tlm_delayed_write_if { }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_analysis_fifo.h0000644000175000017500000000327314342422106025053 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ANALYSIS_FIFO_H__ #define __TLM_ANALYSIS_FIFO_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_triple.h" namespace tlm { template< typename T > class tlm_analysis_fifo : public tlm_fifo< T > , public virtual tlm_analysis_if< T > , public virtual tlm_analysis_if< tlm_analysis_triple< T > > { public: // analysis fifo is an unbounded tlm_fifo tlm_analysis_fifo( const char *nm ) : tlm_fifo( nm , -16 ) {} tlm_analysis_fifo() : tlm_fifo( -16 ) {} void write( const tlm_analysis_triple &t ) { nb_put( t ); } void write( const T &t ) { nb_put( t ); } }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_analysis.h0000644000175000017500000000243514342422106024047 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ANALYSIS_H__ #define __TLM_ANALYSIS_H__ #include "tlm_core/tlm_1/tlm_analysis/tlm_write_if.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_triple.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_port.h" #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_fifo.h" #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_write_if.h0000644000175000017500000000253514342422106024035 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_WRITE_IF_H__ #define __TLM_WRITE_IF_H__ #include namespace tlm { template class tlm_write_if : public virtual sc_core::sc_interface { public: virtual void write(const T& t) = 0; }; template class tlm_delayed_write_if : public virtual sc_core::sc_interface { public: virtual void write(const T& t, const sc_core::sc_time& time) = 0; }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_analysis_triple.h0000644000175000017500000000305114342422106025421 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ANALYSIS_TRIPLE_H__ #define __TLM_ANALYSIS_TRIPLE_H__ //#include namespace tlm { template< typename T> struct tlm_analysis_triple { sc_core::sc_time start_time; T transaction; sc_core::sc_time end_time; tlm_analysis_triple() {} tlm_analysis_triple( const tlm_analysis_triple &triple ) { start_time = triple.start_time; transaction = triple.transaction; end_time = triple.end_time; } tlm_analysis_triple( const T &t ) { transaction = t; } operator T() { return transaction; } operator const T &() const { return transaction; } }; } // namespace tlm #endif systemc-2.3.4/src/tlm_core/tlm_1/tlm_analysis/tlm_analysis_port.h0000644000175000017500000000432614342422106025114 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ #ifndef __TLM_ANALYSIS_PORT_H__ #define __TLM_ANALYSIS_PORT_H__ #include "tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h" #include #include namespace tlm { template < typename T> class tlm_analysis_port : public sc_core::sc_object , public virtual tlm_analysis_if< T > { public: tlm_analysis_port() : sc_core::sc_object() {} tlm_analysis_port( const char *nm ) : sc_core::sc_object( nm ) {} // bind and () work for both interfaces and analysis ports, since // analysis ports implement the analysis interface virtual void bind( tlm_analysis_if &_if ) { m_interfaces.push_back( &_if ); } void operator() ( tlm_analysis_if &_if ) { bind( _if ); } virtual bool unbind( tlm_analysis_if &_if ) { typename std::deque< tlm_analysis_if * >::iterator i = std::remove( m_interfaces.begin(), m_interfaces.end(), &_if ); if( i != m_interfaces.end() ) { m_interfaces.erase(i, m_interfaces.end() ); return 1; } return 0; } void write( const T &t ) { typename std::deque< tlm_analysis_if * >::iterator i; for( i = m_interfaces.begin(); i != m_interfaces.end(); i++ ) { (*i)->write( t ); } } private: std::deque< tlm_analysis_if * > m_interfaces; }; } // namespace tlm #endif systemc-2.3.4/src/README_TLM.txt0000644000175000017500000000201714342422106016066 0ustar carstencarsten TLM-2.0 standard header files ============================= Dir: include/ SubDirs: tlm_core/ tlm_1/ tlm_2/ tlm_utils/ Files: README.txt tlm tlm.h Comments ======== To use the TLM-2.0 interoperability standard, a user should only include the tlm or tlm.h header file. The same holds for the TLM-1.0 implementation that is included as part of this kit; only include tlm or tlm.h. These header files refer to all the header files within the tlm_core/ subdirectory, everything within tlm or tlm.h is contained in the tlm namespace. The tlm_utils subdirectory contains a set of additional definitions supported by the TLM-2.0 standard, but which are not part of the interoperability requirements. It contains ease-of-use and convenience implementations for the interoperability standard. All objects defined in the tlm_utils directory are contained in the tlm_util namespace. See the README.txt files in the subdirectories for an explanation of the internal organization of the header files. systemc-2.3.4/src/CMakeLists.txt0000644000175000017500000006640714342422106016431 0ustar carstencarsten############################################################################### # # 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. # ############################################################################### ############################################################################### # # src/CMakeLists.txt -- # CMake script to configure the SystemC sources and to generate native # Makefiles and project workspaces for your compiler environment. # # Original Author: Torsten Maehne, Université Pierre et Marie Curie, Paris, # 2013-06-11 # ############################################################################### ############################################################################### # # MODIFICATION LOG - modifiers, enter your name, affiliation, date and # changes you are making here. # # Name, Affiliation, Date: # Description of Modification: # ############################################################################### ############################################################################### # Configure QuickThreads ############################################################################### # Set QuickThread sources used by SystemC depending on target platform if (QT_ARCH STREQUAL "sparc") add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sysc/packages/qt/md/sparc.s COMMAND sed 's/_qt_/qt_/' ${CMAKE_CURRENT_SOURCE_DIR}/sysc/packages/qt/md/sparc.s > ${CMAKE_CURRENT_BINARY_DIR}/sysc/packages/qt/md/sparc.s DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/sysc/packages/qt/md/sparc.s) endif (QT_ARCH STREQUAL "sparc") if (APPLE) if (N_OSX_ARCHITECTURES EQUAL 1) if (QT_ARCH STREQUAL "i386") set (CMAKE_ASM_FLAGS "-arch i386") elseif (QT_ARCH STREQUAL "x86_64") set (CMAKE_ASM_FLAGS "-arch x86_64") elseif (QT_ARCH STREQUAL "powerpc_mach") set (CMAKE_ASM_FLAGS "-arch ppc") endif(QT_ARCH STREQUAL "i386") else (N_OSX_ARCHITECTURES EQUAL 1) set (CMAKE_ASM_FLAGS "") endif (N_OSX_ARCHITECTURES EQUAL 1) endif (APPLE) ############################################################################### # Build rules for SystemC library ############################################################################### add_library (systemc sysc/communication/sc_clock.cpp sysc/communication/sc_event_finder.cpp sysc/communication/sc_event_queue.cpp sysc/communication/sc_export.cpp sysc/communication/sc_interface.cpp sysc/communication/sc_mutex.cpp sysc/communication/sc_port.cpp sysc/communication/sc_prim_channel.cpp sysc/communication/sc_semaphore.cpp sysc/communication/sc_signal.cpp sysc/communication/sc_signal_ports.cpp sysc/communication/sc_signal_resolved.cpp sysc/communication/sc_signal_resolved_ports.cpp sysc/datatypes/bit/sc_bit.cpp sysc/datatypes/bit/sc_bv_base.cpp sysc/datatypes/bit/sc_logic.cpp sysc/datatypes/bit/sc_lv_base.cpp sysc/datatypes/fx/sc_fxcast_switch.cpp sysc/datatypes/fx/sc_fxdefs.cpp sysc/datatypes/fx/sc_fxnum.cpp sysc/datatypes/fx/sc_fxnum_observer.cpp sysc/datatypes/fx/sc_fxtype_params.cpp sysc/datatypes/fx/sc_fxval.cpp sysc/datatypes/fx/sc_fxval_observer.cpp sysc/datatypes/fx/scfx_mant.cpp sysc/datatypes/fx/scfx_pow10.cpp sysc/datatypes/fx/scfx_rep.cpp sysc/datatypes/fx/scfx_utils.cpp sysc/datatypes/int/sc_int_base.cpp sysc/datatypes/int/sc_int_mask.cpp sysc/datatypes/int/sc_length_param.cpp sysc/datatypes/int/sc_nbexterns.cpp sysc/datatypes/int/sc_nbutils.cpp sysc/datatypes/int/sc_signed.cpp sysc/datatypes/int/sc_uint_base.cpp sysc/datatypes/int/sc_unsigned.cpp sysc/datatypes/misc/sc_concatref.cpp sysc/datatypes/misc/sc_value_base.cpp sysc/kernel/sc_attribute.cpp sysc/kernel/sc_cor_fiber.cpp sysc/kernel/sc_cor_pthread.cpp sysc/kernel/sc_cor_qt.cpp sysc/kernel/sc_cthread_process.cpp sysc/kernel/sc_event.cpp sysc/kernel/sc_except.cpp sysc/kernel/sc_join.cpp sysc/kernel/sc_main.cpp sysc/kernel/sc_main_main.cpp sysc/kernel/sc_method_process.cpp sysc/kernel/sc_module.cpp sysc/kernel/sc_module_name.cpp sysc/kernel/sc_module_registry.cpp sysc/kernel/sc_name_gen.cpp sysc/kernel/sc_object.cpp sysc/kernel/sc_object_manager.cpp sysc/kernel/sc_phase_callback_registry.cpp sysc/kernel/sc_process.cpp sysc/kernel/sc_reset.cpp sysc/kernel/sc_sensitive.cpp sysc/kernel/sc_simcontext.cpp sysc/kernel/sc_spawn_options.cpp sysc/kernel/sc_thread_process.cpp sysc/kernel/sc_time.cpp sysc/kernel/sc_ver.cpp sysc/kernel/sc_wait.cpp sysc/kernel/sc_wait_cthread.cpp sysc/tracing/sc_trace.cpp sysc/tracing/sc_trace_file_base.cpp sysc/tracing/sc_vcd_trace.cpp sysc/tracing/sc_wif_trace.cpp sysc/utils/sc_hash.cpp sysc/utils/sc_list.cpp sysc/utils/sc_mempool.cpp sysc/utils/sc_pq.cpp sysc/utils/sc_report.cpp sysc/utils/sc_report_handler.cpp sysc/utils/sc_stop_here.cpp sysc/utils/sc_string.cpp sysc/utils/sc_utils_ids.cpp sysc/utils/sc_vector.cpp # TLM sources tlm_core/tlm_2/tlm_generic_payload/tlm_gp.cpp tlm_core/tlm_2/tlm_generic_payload/tlm_phase.cpp tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.cpp tlm_utils/convenience_socket_bases.cpp tlm_utils/instance_specific_extensions.cpp # SystemC headers sysc/communication/sc_buffer.h sysc/communication/sc_clock.h sysc/communication/sc_clock_ports.h sysc/communication/sc_communication_ids.h sysc/communication/sc_event_finder.h sysc/communication/sc_event_queue.h sysc/communication/sc_export.h sysc/communication/sc_fifo.h sysc/communication/sc_fifo_ifs.h sysc/communication/sc_fifo_ports.h sysc/communication/sc_host_mutex.h sysc/communication/sc_host_semaphore.h sysc/communication/sc_interface.h sysc/communication/sc_mutex.h sysc/communication/sc_mutex_if.h sysc/communication/sc_port.h sysc/communication/sc_prim_channel.h sysc/communication/sc_semaphore.h sysc/communication/sc_semaphore_if.h sysc/communication/sc_signal.h sysc/communication/sc_signal_ifs.h sysc/communication/sc_signal_ports.h sysc/communication/sc_signal_resolved.h sysc/communication/sc_signal_resolved_ports.h sysc/communication/sc_signal_rv.h sysc/communication/sc_signal_rv_ports.h sysc/communication/sc_writer_policy.h sysc/datatypes/bit/sc_bit.h sysc/datatypes/bit/sc_bit_ids.h sysc/datatypes/bit/sc_bit_proxies.h sysc/datatypes/bit/sc_bv.h sysc/datatypes/bit/sc_bv_base.h sysc/datatypes/bit/sc_logic.h sysc/datatypes/bit/sc_lv.h sysc/datatypes/bit/sc_lv_base.h sysc/datatypes/bit/sc_proxy.h sysc/datatypes/fx/fx.h sysc/datatypes/fx/sc_context.h sysc/datatypes/fx/sc_fix.h sysc/datatypes/fx/sc_fixed.h sysc/datatypes/fx/sc_fx_ids.h sysc/datatypes/fx/sc_fxcast_switch.h sysc/datatypes/fx/sc_fxdefs.h sysc/datatypes/fx/sc_fxnum.h sysc/datatypes/fx/sc_fxnum_observer.h sysc/datatypes/fx/sc_fxtype_params.h sysc/datatypes/fx/sc_fxval.h sysc/datatypes/fx/sc_fxval_observer.h sysc/datatypes/fx/sc_ufix.h sysc/datatypes/fx/sc_ufixed.h sysc/datatypes/fx/scfx_ieee.h sysc/datatypes/fx/scfx_mant.h sysc/datatypes/fx/scfx_other_defs.h sysc/datatypes/fx/scfx_params.h sysc/datatypes/fx/scfx_pow10.h sysc/datatypes/fx/scfx_rep.h sysc/datatypes/fx/scfx_string.h sysc/datatypes/fx/scfx_utils.h sysc/datatypes/int/sc_bigint.h sysc/datatypes/int/sc_biguint.h sysc/datatypes/int/sc_int.h sysc/datatypes/int/sc_int_base.h sysc/datatypes/int/sc_int_ids.h sysc/datatypes/int/sc_length_param.h sysc/datatypes/int/sc_nbdefs.h sysc/datatypes/int/sc_nbexterns.h sysc/datatypes/int/sc_nbutils.h sysc/datatypes/int/sc_signed.h sysc/datatypes/int/sc_uint.h sysc/datatypes/int/sc_uint_base.h sysc/datatypes/int/sc_unsigned.h sysc/datatypes/misc/sc_concatref.h sysc/datatypes/misc/sc_value_base.h sysc/kernel/sc_attribute.h sysc/kernel/sc_cmnhdr.h sysc/kernel/sc_constants.h sysc/kernel/sc_cor.h sysc/kernel/sc_cor_fiber.h sysc/kernel/sc_cor_pthread.h sysc/kernel/sc_cor_qt.h sysc/kernel/sc_cthread_process.h sysc/kernel/sc_dynamic_processes.h sysc/kernel/sc_event.h sysc/kernel/sc_except.h sysc/kernel/sc_externs.h sysc/kernel/sc_join.h sysc/kernel/sc_kernel_ids.h sysc/kernel/sc_macros.h sysc/kernel/sc_method_process.h sysc/kernel/sc_module.h sysc/kernel/sc_module_name.h sysc/kernel/sc_module_registry.h sysc/kernel/sc_name_gen.h sysc/kernel/sc_object.h sysc/kernel/sc_object_int.h sysc/kernel/sc_object_manager.h sysc/kernel/sc_phase_callback_registry.h sysc/kernel/sc_process.h sysc/kernel/sc_process_handle.h sysc/kernel/sc_reset.h sysc/kernel/sc_runnable.h sysc/kernel/sc_runnable_int.h sysc/kernel/sc_sensitive.h sysc/kernel/sc_simcontext.h sysc/kernel/sc_simcontext_int.h sysc/kernel/sc_spawn.h sysc/kernel/sc_spawn_options.h sysc/kernel/sc_status.h sysc/kernel/sc_thread_process.h sysc/kernel/sc_time.h sysc/kernel/sc_ver.h sysc/kernel/sc_wait.h sysc/kernel/sc_wait_cthread.h sysc/packages/boost/bind/apply.hpp sysc/packages/boost/bind/arg.hpp sysc/packages/boost/bind/bind_cc.hpp sysc/packages/boost/bind/bind_mf_cc.hpp sysc/packages/boost/bind/bind_template.hpp sysc/packages/boost/bind/make_adaptable.hpp sysc/packages/boost/bind/mem_fn_cc.hpp sysc/packages/boost/bind/mem_fn_template.hpp sysc/packages/boost/bind/mem_fn_vw.hpp sysc/packages/boost/bind/placeholders.hpp sysc/packages/boost/bind/protect.hpp sysc/packages/boost/bind.hpp sysc/packages/boost/config/compiler/borland.hpp sysc/packages/boost/config/compiler/comeau.hpp sysc/packages/boost/config/compiler/common_edg.hpp sysc/packages/boost/config/compiler/compaq_cxx.hpp sysc/packages/boost/config/compiler/digitalmars.hpp sysc/packages/boost/config/compiler/gcc.hpp sysc/packages/boost/config/compiler/greenhills.hpp sysc/packages/boost/config/compiler/hp_acc.hpp sysc/packages/boost/config/compiler/intel.hpp sysc/packages/boost/config/compiler/kai.hpp sysc/packages/boost/config/compiler/metrowerks.hpp sysc/packages/boost/config/compiler/mpw.hpp sysc/packages/boost/config/compiler/sgi_mipspro.hpp sysc/packages/boost/config/compiler/sunpro_cc.hpp sysc/packages/boost/config/compiler/vacpp.hpp sysc/packages/boost/config/compiler/visualc.hpp sysc/packages/boost/config/platform/aix.hpp sysc/packages/boost/config/platform/amigaos.hpp sysc/packages/boost/config/platform/beos.hpp sysc/packages/boost/config/platform/bsd.hpp sysc/packages/boost/config/platform/cygwin.hpp sysc/packages/boost/config/platform/hpux.hpp sysc/packages/boost/config/platform/irix.hpp sysc/packages/boost/config/platform/linux.hpp sysc/packages/boost/config/platform/macos.hpp sysc/packages/boost/config/platform/solaris.hpp sysc/packages/boost/config/platform/win32.hpp sysc/packages/boost/config/posix_features.hpp sysc/packages/boost/config/select_compiler_config.hpp sysc/packages/boost/config/select_platform_config.hpp sysc/packages/boost/config/select_stdlib_config.hpp sysc/packages/boost/config/stdlib/dinkumware.hpp sysc/packages/boost/config/stdlib/libcomo.hpp sysc/packages/boost/config/stdlib/libstdcpp3.hpp sysc/packages/boost/config/stdlib/modena.hpp sysc/packages/boost/config/stdlib/msl.hpp sysc/packages/boost/config/stdlib/roguewave.hpp sysc/packages/boost/config/stdlib/sgi.hpp sysc/packages/boost/config/stdlib/stlport.hpp sysc/packages/boost/config/stdlib/vacpp.hpp sysc/packages/boost/config/suffix.hpp sysc/packages/boost/config/user.hpp sysc/packages/boost/config.hpp sysc/packages/boost/detail/endian.hpp sysc/packages/boost/detail/workaround.hpp sysc/packages/boost/get_pointer.hpp sysc/packages/boost/mem_fn.hpp sysc/packages/boost/mpl/aux_/adl_barrier.hpp sysc/packages/boost/mpl/aux_/config/adl.hpp sysc/packages/boost/mpl/aux_/config/gcc.hpp sysc/packages/boost/mpl/aux_/config/intel.hpp sysc/packages/boost/mpl/aux_/config/msvc.hpp sysc/packages/boost/mpl/aux_/config/static_constant.hpp sysc/packages/boost/mpl/aux_/config/workaround.hpp sysc/packages/boost/mpl/bool.hpp sysc/packages/boost/mpl/bool_fwd.hpp sysc/packages/boost/mpl/integral_c_tag.hpp sysc/packages/boost/non_type.hpp sysc/packages/boost/ref.hpp sysc/packages/boost/type.hpp sysc/packages/boost/utility/addressof.hpp sysc/packages/boost/utility/enable_if.hpp sysc/packages/boost/utility/string_view.hpp sysc/packages/boost/utility/string_view_fwd.hpp sysc/tracing/sc_trace.h sysc/tracing/sc_trace_file_base.h sysc/tracing/sc_tracing_ids.h sysc/tracing/sc_vcd_trace.h sysc/tracing/sc_wif_trace.h sysc/utils/sc_hash.h sysc/utils/sc_list.h sysc/utils/sc_machine.h sysc/utils/sc_mempool.h sysc/utils/sc_pq.h sysc/utils/sc_pvector.h sysc/utils/sc_report.h sysc/utils/sc_report_handler.h sysc/utils/sc_stop_here.h sysc/utils/sc_string.h sysc/utils/sc_string_view.h sysc/utils/sc_temporary.h sysc/utils/sc_typeindex.h sysc/utils/sc_utils_ids.h sysc/utils/sc_vector.h systemc systemc.h # TLM headers tlm tlm.h tlm_core/tlm_1/tlm_analysis/tlm_analysis.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_fifo.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_if.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_port.h tlm_core/tlm_1/tlm_analysis/tlm_analysis_triple.h tlm_core/tlm_1/tlm_analysis/tlm_write_if.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_core_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_tag.h tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/circular_buffer.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_peek.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_put_get.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo_resize.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_event_finder.h tlm_core/tlm_1/tlm_req_rsp/tlm_ports/tlm_nonblocking_port.h tlm_core/tlm_1/tlm_req_rsp/tlm_req_rsp.h tlm_core/tlm_2/tlm_2_interfaces/tlm_2_interfaces.h tlm_core/tlm_2/tlm_2_interfaces/tlm_dmi.h tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h tlm_core/tlm_2/tlm_generic_payload/tlm_array.h tlm_core/tlm_2/tlm_generic_payload/tlm_endian_conv.h tlm_core/tlm_2/tlm_generic_payload/tlm_generic_payload.h tlm_core/tlm_2/tlm_generic_payload/tlm_gp.h tlm_core/tlm_2/tlm_generic_payload/tlm_helpers.h tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h tlm_core/tlm_2/tlm_quantum/tlm_global_quantum.h tlm_core/tlm_2/tlm_quantum/tlm_quantum.h tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h tlm_core/tlm_2/tlm_sockets/tlm_sockets.h tlm_core/tlm_2/tlm_sockets/tlm_target_socket.h tlm_core/tlm_2/tlm_version.h tlm_utils/convenience_socket_bases.h tlm_utils/instance_specific_extensions.h tlm_utils/instance_specific_extensions_int.h tlm_utils/multi_passthrough_initiator_socket.h tlm_utils/multi_passthrough_target_socket.h tlm_utils/multi_socket_bases.h tlm_utils/passthrough_target_socket.h tlm_utils/peq_with_cb_and_phase.h tlm_utils/peq_with_get.h tlm_utils/simple_initiator_socket.h tlm_utils/simple_target_socket.h tlm_utils/tlm_quantumkeeper.h # QuickThreads $<$: sysc/packages/qt/qt.c $<$: ${CMAKE_CURRENT_BINARY_DIR}/sysc/packages/qt/md/sparc.s> $<$:sysc/packages/qt/md/hppa.s> $<$:sysc/packages/qt/md/iX86_64.s> $<$:sysc/packages/qt/md/i386.s> $<$:sysc/packages/qt/md/aarch64.s> $<$: sysc/packages/qt/md/powerpc_mach.s sysc/packages/qt/md/powerpc.c> $<$: sysc/packages/qt/md/powerpc_sys5.s sysc/packages/qt/md/powerpc.c> sysc/packages/qt/md/aarch64.h sysc/packages/qt/md/axp.h sysc/packages/qt/md/hppa.h sysc/packages/qt/md/i386.h sysc/packages/qt/md/iX86_64.h sysc/packages/qt/md/ksr1.h sysc/packages/qt/md/m88k.h sysc/packages/qt/md/mips.h sysc/packages/qt/md/powerpc_mach.h sysc/packages/qt/md/powerpc_sys5.h sysc/packages/qt/md/sparc.h sysc/packages/qt/md/vax.h sysc/packages/qt/qt.h sysc/packages/qt/qtmd.h >) add_library (SystemC::systemc ALIAS systemc) target_compile_definitions ( systemc PUBLIC $<$:SC_DISABLE_VIRTUAL_BIND> $<$:WIN32> $<$,$,$>>: SC_WIN_DLL> PRIVATE SC_BUILD SC_INCLUDE_FX $<$:DEBUG_SYSTEMC> $<$:SC_DISABLE_ASYNC_UPDATES> $<$:SC_DISABLE_COPYRIGHT_MESSAGE> $<$:SC_DISABLE_VCD_SCOPES> $<$:SC_ENABLE_ASSERTIONS> $<$:SC_ENABLE_EARLY_MAXTIME_CREATION> $<$: SC_ENABLE_IMMEDIATE_SELF_NOTIFICATIONS> $<$:SC_ENABLE_SIMULATION_PHASE_CALLBACKS> $<$: SC_ENABLE_SIMULATION_PHASE_CALLBACKS_TRACING> $<$:SC_USE_PTHREADS> $<$:SC_HAVE_POSIX_MEMALIGN> $<$:SC_LEGACY_MEM_MGMT> $<$: SC_OVERRIDE_DEFAULT_STACK_SIZE=${OVERRIDE_DEFAULT_STACK_SIZE}> $<$,$>:_LIB>) target_compile_options( systemc PUBLIC $<$:/vmg /MP> PRIVATE $<$,$>: -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable> $<$:/W3 /wd4244 /wd4267 /wd4996>) target_include_directories(systemc PUBLIC $ $) if (APPLE) # It's OK that _sc_main, __sanitizer_start_switch_fiber, and # __sanitizer_finish_switch_fiber are undefined symbols. set_target_properties (systemc PROPERTIES LINK_FLAGS -Wl,-U,_sc_main,-U,___sanitizer_start_switch_fiber,-U,___sanitizer_finish_switch_fiber) endif(APPLE) target_link_libraries (systemc PUBLIC $<$:Threads::Threads>) set_target_properties (systemc PROPERTIES LINKER_LANGUAGE CXX VERSION ${SystemCLanguage_VERSION} SOVERSION ${SystemCLanguage_SOVERSION} INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR}) ############################################################################### # Install rules for SystemC library ############################################################################### install (TARGETS systemc EXPORT SystemCLanguageTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) # Install the SystemC and TLM headers install (FILES systemc tlm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev) install (DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev FILES_MATCHING PATTERN "*.h") install (DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT dev FILES_MATCHING PATTERN "*.hpp") systemc-2.3.4/src/systemc.h0000644000175000017500000002163714342422106015525 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** systemc.h - Top-level include file for the SystemC library with usings. Original Author: Stan Y. Liao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte Design Systems, 31 Mar 2005 Description of Modification: Changes for namespace support. *****************************************************************************/ #ifndef SYSTEMC_H #define SYSTEMC_H // INCLUDE SYSTEM (std) DEFINITIONS: #include #include #include // math.h? #include #include #include #include #include #include #include #include #include #if defined(__sun) || defined(__sun__) # include #elif !defined(WIN32) && !defined(_WIN32) # include #endif #include #include #include // C++11 deprecates std::gets, as it can't be used safely. // Compilers are starting to remove it from their headers. #if defined(__cplusplus) && (__cplusplus >= 201103L) || \ defined(_MSC_VER) && (_MSC_VER >= 1900) #define SC_NO_STDGETS_ #endif // USINGS FOR I/O STREAM SUPPORT: using std::ios; using std::streambuf; using std::streampos; using std::streamsize; using std::iostream; using std::istream; using std::ostream; using std::cin; using std::cout; using std::cerr; using std::endl; using std::flush; using std::dec; using std::hex; using std::oct; using std::noshowbase; using std::showbase; using std::fstream; using std::ifstream; using std::ofstream; // from : using std::size_t; using std::FILE; using std::fpos_t; using std::fclose; using std::clearerr; using std::remove; using std::rename; using std::tmpfile; using std::tmpnam; using std::fflush; using std::fopen; using std::freopen; using std::setbuf; using std::setvbuf; using std::fprintf; using std::fscanf; using std::printf; using std::scanf; using std::sprintf; using std::sscanf; using std::vfprintf; using std::vprintf; using std::vsprintf; using std::fgetc; using std::fgets; using std::fputc; using std::fputs; using std::getc; using std::getchar; #ifndef SC_NO_STDGETS_ using std::gets; #endif using std::putc; using std::putchar; using std::puts; using std::ungetc; using std::fread; using std::fwrite; using std::fgetpos; using std::fseek; using std::fsetpos; using std::ftell; using std::rewind; using std::feof; using std::ferror; using std::perror; // from : using std::div_t; using std::ldiv_t; using std::atof; using std::atoi; using std::atol; using std::strtod; using std::strtol; using std::strtoul; using std::rand; using std::srand; using std::calloc; using std::free; using std::malloc; using std::realloc; using std::abort; using std::atexit; using std::exit; using std::getenv; using std::system; using std::bsearch; using std::qsort; using std::abs; using std::div; using std::labs; using std::ldiv; using std::mblen; using std::mbtowc; using std::mbstowcs; #if !defined(__CYGWIN__) && !defined(__CYGWIN32) using std::wctomb; using std::wcstombs; #endif // from : using std::memcpy; using std::memmove; using std::strcpy; using std::strncpy; using std::strcat; using std::strncat; using std::memcmp; using std::strcmp; using std::strcoll; using std::strncmp; using std::strxfrm; using std::memchr; using std::strchr; using std::strcspn; using std::strpbrk; using std::strrchr; using std::strspn; using std::strstr; using std::strtok; using std::memset; using std::strerror; using std::strlen; // deprecated strstream support #if defined( SC_INCLUDE_STRSTREAM ) #include using std::strstream; using std::strstreambuf; using std::istrstream; using std::ostrstream; #endif // SC_INCLUDE_STRSTREAM // INCLUDE SYSTEMC DEFINITIONS for sc_dt AND sc_core NAMESPACES: #include "systemc" // USINGS FOR THE sc_dt NAMESPACE: using sc_dt::SC_BIN; using sc_dt::SC_BIN_SM; using sc_dt::SC_BIN_US; using sc_dt::SC_CSD; using sc_dt::SC_DEC; using sc_dt::SC_HEX; using sc_dt::SC_HEX_SM; using sc_dt::SC_HEX_US; using sc_dt::SC_LOGIC_0; using sc_dt::SC_LOGIC_1; using sc_dt::SC_LOGIC_X; using sc_dt::SC_LOGIC_Z; using sc_dt::SC_NOBASE; using sc_dt::SC_OCT; using sc_dt::SC_OCT_SM; using sc_dt::SC_OCT_US; using sc_dt::int64; using sc_dt::sc_abs; using sc_dt::sc_bigint; using sc_dt::sc_biguint; using sc_dt::sc_bit; using sc_dt::sc_bv; using sc_dt::sc_bv_base; using sc_dt::sc_digit; using sc_dt::sc_int; using sc_dt::sc_int_base; using sc_dt::sc_io_show_base; using sc_dt::sc_length_context; using sc_dt::sc_length_param; using sc_dt::sc_logic; using sc_dt::sc_lv; using sc_dt::sc_lv_base; using sc_dt::sc_max; using sc_dt::sc_min; using sc_dt::sc_numrep; using sc_dt::sc_signed; using sc_dt::sc_uint; using sc_dt::sc_uint_base; using sc_dt::sc_unsigned; using sc_dt::uint64; // #ifdef SC_DT_DEPRECATED using sc_dt::sc_logic_0; using sc_dt::sc_logic_1; using sc_dt::sc_logic_Z; using sc_dt::sc_logic_X; // #endif #ifdef SC_INCLUDE_FX using sc_dt::sc_fxnum; using sc_dt::sc_fxnum_bitref; using sc_dt::sc_fxnum_fast; using sc_dt::sc_fix; using sc_dt::sc_fix_fast; using sc_dt::sc_ufix; using sc_dt::sc_ufix_fast; using sc_dt::sc_fixed; using sc_dt::sc_fixed_fast; using sc_dt::sc_ufixed; using sc_dt::sc_ufixed_fast; using sc_dt::sc_fxval; using sc_dt::sc_fxval_fast; using sc_dt::sc_fxcast_switch; using sc_dt::sc_fxcast_context; using sc_dt::sc_fxtype_params; using sc_dt::sc_fxtype_context; using sc_dt::sc_q_mode; using sc_dt::SC_RND; using sc_dt::SC_RND_ZERO; using sc_dt::SC_RND_MIN_INF; using sc_dt::SC_RND_INF; using sc_dt::SC_RND_CONV; using sc_dt::SC_TRN; using sc_dt::SC_TRN_ZERO; using sc_dt::sc_o_mode; using sc_dt::SC_SAT; using sc_dt::SC_SAT_ZERO; using sc_dt::SC_SAT_SYM; using sc_dt::SC_WRAP; using sc_dt::SC_WRAP_SM; using sc_dt::sc_switch; using sc_dt::SC_OFF; using sc_dt::SC_ON; using sc_dt::sc_fmt; using sc_dt::SC_F; using sc_dt::SC_E; using sc_dt::sc_context_begin; using sc_dt::SC_NOW; using sc_dt::SC_LATER; #endif // SC_INCLUDE_FX #if 0 // defined( _MSC_VER ) // supported versions of MSVC should support ADL using sc_dt::equal; using sc_dt::not_equal; using sc_dt::b_not; using sc_dt::b_and; using sc_dt::b_or; using sc_dt::b_xor; using sc_dt::lrotate; using sc_dt::rrotate; using sc_dt::reverse; using sc_dt::concat; using sc_dt::and_reduce; using sc_dt::or_reduce; using sc_dt::xor_reduce; using sc_dt::nand_reduce; using sc_dt::nor_reduce; using sc_dt::xnor_reduce; #endif // defined( _MSC_VER ) // USINGS FOR sc_core: // // The explicit using for ::sc_core::wait is to remove an ambiguity with // the constructor for the system's union wait on Unix and Linux. This // causes problems with aCC, so users of aCC should explicitly select // the SystemC wait functions using ::sc_core::wait(...). This is actually // a good idea for SystemC programmers in general. using namespace sc_core; #if !defined( __HP_aCC ) using ::sc_core::wait; #endif // !defined( __HP_aCC ) #ifdef SC_USE_SC_STRING_OLD using sc_dt::sc_string_old; typedef sc_dt::sc_string_old sc_string; #endif #ifdef SC_USE_STD_STRING typedef ::std::string sc_string; #endif #undef SC_NO_STDGETS_ #endif // SYSTEMC_H systemc-2.3.4/src/sysc/0000755000175000017500000000000014342422106014635 5ustar carstencarstensystemc-2.3.4/src/sysc/Makefile.am0000644000175000017500000000461014342422106016672 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc AM_CFLAGS += @DEFS@ AM_CXXFLAGS += @DEFS@ if WANT_QT_THREADS QT_LIB = packages/qt/libqt.la QT_SUBDIR = packages/qt endif # only build external packages separately SUBDIRS = \ packages/boost \ $(QT_SUBDIR) H_FILES = NO_H_FILES = CXX_FILES = INCDIRS = # include file lists for sub-directories include kernel/files.am include communication/files.am include datatypes/files.am include tracing/files.am include utils/files.am localincludedir = $(includedir)/sysc nobase_localinclude_HEADERS = $(H_FILES) noinst_LTLIBRARIES = libsysc.la libsysc_la_SOURCES = $(NO_H_FILES) $(CXX_FILES) # add dependent (package) libraries libsysc_la_LIBADD = \ $(QT_LIB) INCDIRS += \ packages uninstall-hook: test ! -d "$(localincludedir)" || ( set -e ; cd "$(localincludedir)"; \ for dir in $(INCDIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir "$(localincludedir)" ) ## Taf! systemc-2.3.4/src/sysc/communication/0000755000175000017500000000000014342422106017502 5ustar carstencarstensystemc-2.3.4/src/sysc/communication/sc_fifo_ports.h0000644000175000017500000001735014342422106022520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fifo_ports.h -- The sc_fifo port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_FIFO_PORTS_H #define SC_FIFO_PORTS_H #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_fifo_ifs.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_fifo_in // // The sc_fifo input port class. // ---------------------------------------------------------------------------- template class sc_fifo_in : public sc_port,0,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef T data_type; typedef sc_fifo_in_if if_type; typedef sc_port base_type; typedef sc_fifo_in this_type; typedef if_type in_if_type; typedef sc_port_b in_port_type; public: // constructors sc_fifo_in() : base_type() , m_written_finder_p() {} explicit sc_fifo_in( const char* name_ ) : base_type( name_ ) , m_written_finder_p() {} explicit sc_fifo_in( in_if_type& interface_ ) : base_type( interface_ ) , m_written_finder_p() {} sc_fifo_in( const char* name_, in_if_type& interface_ ) : base_type( name_, interface_ ) , m_written_finder_p() {} explicit sc_fifo_in( in_port_type& parent_ ) : base_type( parent_ ) , m_written_finder_p() {} sc_fifo_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ) , m_written_finder_p() {} sc_fifo_in( this_type& parent_ ) : base_type( parent_ ) , m_written_finder_p() {} sc_fifo_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) , m_written_finder_p() {} // destructor virtual ~sc_fifo_in() { delete m_written_finder_p; } // interface access shortcut methods // blocking read void read( data_type& value_ ) { (*this)->read( value_ ); } data_type read() { return (*this)->read(); } // non-blocking read bool nb_read( data_type& value_ ) { return (*this)->nb_read( value_ ); } // get the number of available samples int num_available() const { return (*this)->num_available(); } // get the data written event const sc_event& data_written_event() const { return (*this)->data_written_event(); } // use for static sensitivity to data written event sc_event_finder& data_written() const { return sc_event_finder::cached_create ( m_written_finder_p, *this, &in_if_type::data_written_event ); } virtual const char* kind() const { return "sc_fifo_in"; } private: mutable sc_event_finder* m_written_finder_p; // disabled sc_fifo_in( const this_type& ); this_type& operator = ( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fifo_out // // The sc_fifo output port class. // ---------------------------------------------------------------------------- template class sc_fifo_out : public sc_port,0,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef T data_type; typedef sc_fifo_out_if if_type; typedef sc_port base_type; typedef sc_fifo_out this_type; typedef if_type out_if_type; typedef sc_port_b out_port_type; public: // constructors sc_fifo_out() : base_type() , m_read_finder_p() {} explicit sc_fifo_out( const char* name_ ) : base_type( name_ ) , m_read_finder_p() {} explicit sc_fifo_out( out_if_type& interface_ ) : base_type( interface_ ) , m_read_finder_p() {} sc_fifo_out( const char* name_, out_if_type& interface_ ) : base_type( name_, interface_ ) , m_read_finder_p() {} explicit sc_fifo_out( out_port_type& parent_ ) : base_type( parent_ ) , m_read_finder_p() {} sc_fifo_out( const char* name_, out_port_type& parent_ ) : base_type( name_, parent_ ) , m_read_finder_p() {} sc_fifo_out( this_type& parent_ ) : base_type( parent_ ) , m_read_finder_p() {} sc_fifo_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) , m_read_finder_p() {} // destructor virtual ~sc_fifo_out() { delete m_read_finder_p; } // interface access shortcut methods // blocking write void write( const data_type& value_ ) { (*this)->write( value_ ); } // non-blocking write bool nb_write( const data_type& value_ ) { return (*this)->nb_write( value_ ); } // get the number of free spaces int num_free() const { return (*this)->num_free(); } // get the data read event const sc_event& data_read_event() const { return (*this)->data_read_event(); } // use for static sensitivity to data read event sc_event_finder& data_read() const { return sc_event_finder::cached_create ( m_read_finder_p, *this, &out_if_type::data_read_event ); } virtual const char* kind() const { return "sc_fifo_out"; } private: mutable sc_event_finder* m_read_finder_p; // disabled sc_fifo_out( const this_type& ); this_type& operator = ( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII } // namespace sc_core //$Log: sc_fifo_ports.h,v $ //Revision 1.3 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_semaphore_if.h0000644000175000017500000000556214342422106023011 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_semaphore_if.h -- The sc_semaphore_if interface class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SEMAPHORE_IF_H #define SC_SEMAPHORE_IF_H #include "sysc/communication/sc_interface.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_semaphore_if // // The sc_semaphore_if interface class. // ---------------------------------------------------------------------------- class SC_API sc_semaphore_if : virtual public sc_interface { public: // the classical operations: wait(), trywait(), and post() // lock (take) the semaphore, block if not available virtual int wait() = 0; // lock (take) the semaphore, return -1 if not available virtual int trywait() = 0; // unlock (give) the semaphore virtual int post() = 0; // get the value of the semphore virtual int get_value() const = 0; protected: // constructor sc_semaphore_if() {} private: // disabled sc_semaphore_if( const sc_semaphore_if& ); sc_semaphore_if& operator = ( const sc_semaphore_if& ); }; } // namespace sc_core //$Log: sc_semaphore_if.h,v $ //Revision 1.3 2011/08/26 20:45:42 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.8 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal.cpp0000644000175000017500000002475414342422106022164 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal.cpp -- The sc_signal primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_communication_ids.h" #include "sysc/utils/sc_utils_ids.h" #include "sysc/communication/sc_signal.h" #include "sysc/kernel/sc_reset.h" #include "sysc/kernel/sc_simcontext_int.h" #include using sc_dt::sc_logic; namespace sc_core { // to avoid code bloat in sc_signal void sc_signal_invalid_writer( sc_object* target, sc_object* first_writer, sc_object* second_writer, bool check_delta ) { if ( second_writer ) { std::stringstream msg; msg << "\n signal " "`" << target->name() << "' " "(" << target->kind() << ")" << "\n first driver " "`" << first_writer->name() << "' " "(" << first_writer->kind() << ")" << "\n second driver " "`" << second_writer->name() << "' " "(" << second_writer->kind() << ")"; if( check_delta ) { msg << "\n conflicting write in delta cycle " << sc_delta_count(); } SC_REPORT_ERROR( SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, msg.str().c_str() ); } } bool sc_writer_policy_check_write::only_delta() { return sc_get_curr_simcontext()->write_check_conflicts_only(); } bool sc_writer_policy_check_port:: check_port( sc_object* target, sc_port_base * port_, bool is_output ) { if ( is_output && sc_get_curr_simcontext()->write_check() && !sc_get_curr_simcontext()->write_check_conflicts_only() ) { // an out or inout port; only one can be connected if( m_output != 0) { sc_signal_invalid_writer( target, m_output, port_, false ); return false; } else { m_output = port_; } } return true; } sc_signal_channel::~sc_signal_channel() { delete m_change_event_p; } void sc_signal_channel::deprecated_get_data_ref() const { static bool warn_get_data_ref_deprecated=true; if ( warn_get_data_ref_deprecated ) { warn_get_data_ref_deprecated=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "sc_signal::get_data_ref() is deprecated, use read() instead" ); } } void sc_signal_channel::deprecated_get_new_value() const { static bool warn_new_value=true; if ( warn_new_value ) { warn_new_value=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "sc_signal::get_new_value() is deprecated"); } } void sc_signal_channel::deprecated_trace() const { static bool warn_trace_deprecated=true; if ( warn_trace_deprecated ) { warn_trace_deprecated=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "sc_signal::trace() is deprecated"); } } // create a (kernel) event, if needed sc_event* sc_signal_channel::lazy_kernel_event( sc_event** ev, const char* name ) const { if ( !*ev ) { *ev = new sc_event( sc_event::kernel_event, name ); } return *ev; } // get the value changed event const sc_event& sc_signal_channel::value_changed_event() const { return *lazy_kernel_event(&m_change_event_p,"value_changed_event"); } // do the generic update actions void sc_signal_channel::do_update() { notify_next_delta( m_change_event_p ); m_change_stamp = simcontext()->change_stamp(); } // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII template< sc_writer_policy POL > void sc_signal::update() { policy_type::update(); if( !( base_type::m_new_val == base_type::m_cur_val ) ) { do_update(); } } template< sc_writer_policy POL > void sc_signal::do_update() { // order of execution below is important, the notify_processes() call // must come after the update of m_cur_val for things to work properly! base_type::do_update(); if ( m_reset_p ) m_reset_p->notify_processes(); sc_event* event_p = this->m_cur_val ? m_posedge_event_p : m_negedge_event_p; sc_signal_channel::notify_next_delta( event_p ); } // edge event methods template< sc_writer_policy POL > const sc_event& sc_signal::posedge_event() const { return *this->lazy_kernel_event(&m_posedge_event_p,"posedge_event"); } template< sc_writer_policy POL > const sc_event& sc_signal::negedge_event() const { return *this->lazy_kernel_event(&m_negedge_event_p,"negedge_event"); } // reset support template< sc_writer_policy POL > sc_reset* sc_signal::is_reset() const { sc_reset* result_p; if ( !m_reset_p ) m_reset_p = new sc_reset( this ); result_p = m_reset_p; return result_p; } // destructor template< sc_writer_policy POL > sc_signal::~sc_signal() { delete m_negedge_event_p; delete m_posedge_event_p; delete m_reset_p; } // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII template< sc_writer_policy POL > void sc_signal::update() { policy_type::update(); if( !( base_type::m_new_val == base_type::m_cur_val ) ) { do_update(); } } template< sc_writer_policy POL > void sc_signal::do_update() { base_type::do_update(); if( this->m_cur_val == sc_dt::SC_LOGIC_1 ) { sc_signal_channel::notify_next_delta( m_posedge_event_p ); } else if( this->m_cur_val == sc_dt::SC_LOGIC_0 ) { sc_signal_channel::notify_next_delta( m_negedge_event_p ); } } // edge event methods template< sc_writer_policy POL > const sc_event& sc_signal::posedge_event() const { return *this->lazy_kernel_event(&m_posedge_event_p,"posedge_event"); } template< sc_writer_policy POL > const sc_event& sc_signal::negedge_event() const { return *this->lazy_kernel_event(&m_negedge_event_p,"negedge_event"); } // destructor template< sc_writer_policy POL > sc_signal::~sc_signal() { delete m_negedge_event_p; delete m_posedge_event_p; } // template instantiations for writer policies template class SC_API sc_signal_t; template class SC_API sc_signal_t; template class SC_API sc_signal_t; template class SC_API sc_signal; template class SC_API sc_signal; template class SC_API sc_signal; template class SC_API sc_signal_t; template class SC_API sc_signal_t; template class SC_API sc_signal_t; template class SC_API sc_signal; template class SC_API sc_signal; template class SC_API sc_signal; } // namespace sc_core /* $Log: sc_signal.cpp,v $ Revision 1.9 2011/08/26 20:45:42 acg Andy Goodrich: moved the modification log to the end of the file to eliminate source line number skew when check-ins are done. Revision 1.8 2011/02/18 20:23:45 acg Andy Goodrich: Copyright update. Revision 1.7 2011/02/18 20:08:14 acg Philipp A. Hartmann: addition of include for sstream for MSVC. Revision 1.6 2011/01/25 20:50:37 acg Andy Goodrich: changes for IEEE 1666 2011. Revision 1.5 2010/12/07 19:50:36 acg Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. Revision 1.3 2007/04/09 21:59:49 acg Andy Goodrich: fixed multiple write notification bug where writes done outside the simulator were being treated as multiple writes. Revision 1.2 2007/04/02 17:24:01 acg Andy Goodrich: added check for null writer pointers in sc_signal invalid writer method. Revision 1.1.1.1 2006/12/15 20:20:04 acg SystemC 2.3 Revision 1.7 2006/04/11 23:11:57 acg Andy Goodrich: Changes for reset support that only includes sc_cthread_process instances. Revision 1.6 2006/03/13 20:19:44 acg Andy Goodrich: changed sc_event instances into pointers to sc_event instances that are allocated as needed. This saves considerable storage for large numbers of signals, etc. Revision 1.5 2006/01/25 00:31:11 acg Andy Goodrich: Changed over to use a standard message id of SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. Revision 1.4 2006/01/24 20:46:32 acg Andy Goodrich: changes to eliminate use of deprecated features. For instance, using notify(SC_ZERO_TIME) in place of notify_delayed(). Revision 1.3 2006/01/18 21:42:26 acg Andy Goodrich: Changes for check writer support, and tightening up sc_clock port usage. Revision 1.2 2006/01/03 23:18:26 acg Changed copyright to include 2006. Revision 1.1.1.1 2005/12/19 23:16:43 acg First check in of SystemC 2.1 into its own archive. Revision 1.14 2005/09/15 23:01:51 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.13 2005/05/08 19:04:06 acg Fix bug in concat_set(int64,off). Other changes from 2.1 examples usage. Revision 1.12 2005/04/04 00:15:51 acg Changes for directory name change to sys from systemc. Changes for sc_string going to std::string. Changes for sc_pvector going to std::vector. Changes for reference pools for bit and part selections. Changes for const sc_concatref support. Revision 1.10 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.9 2004/09/27 21:02:54 acg Andy Goodrich - Forte Design Systems, Inc. - Added a $Log comment so that CVS checkin comments will appear in checked out source. */ // Taf! systemc-2.3.4/src/sysc/communication/sc_event_queue.cpp0000644000175000017500000001065514342422106023227 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_event_queue.cpp -- Event Queue Support Original Author: Stuart Swan, Cadence Inc. CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_event_queue.h" #include "sysc/kernel/sc_method_process.h" namespace sc_core { template class SC_API sc_ppq; template class SC_API sc_port; static int sc_time_compare( const void* p1, const void* p2 ) { const sc_time* t1 = static_cast( p1 ); const sc_time* t2 = static_cast( p2 ); if( *t1 < *t2 ) { return 1; } else if( *t1 > *t2 ) { return -1; } else { return 0; } } sc_event_queue::sc_event_queue( sc_module_name name_ ) : sc_module( name_ ), m_ppq( 128, sc_time_compare ), m_e( sc_event::kernel_event ), m_change_stamp(0), m_pending_delta(0) { SC_METHOD( fire_event ); sensitive << m_e; dont_initialize(); } sc_event_queue::~sc_event_queue() { while (m_ppq.size() > 0) { delete m_ppq.extract_top(); } } void sc_event_queue::cancel_all() { m_pending_delta = 0; while( m_ppq.size() > 0 ) delete m_ppq.extract_top(); m_e.cancel(); } void sc_event_queue::notify (const sc_time& when) { m_change_stamp = simcontext()->change_stamp(); sc_time* t = new sc_time( when+sc_time_stamp() ); if ( m_ppq.size()==0 || *t < *m_ppq.top() ) { m_e.notify( when ); } m_ppq.insert( t ); } void sc_event_queue::fire_event() { if ( m_ppq.empty() ) { // event has been cancelled return; } sc_time* t = m_ppq.extract_top(); sc_assert( *t==sc_time_stamp() ); delete t; if ( m_ppq.size() > 0 ) { m_e.notify( *m_ppq.top() - sc_time_stamp() ); } } } // namespace sc_core // $Log: sc_event_queue.cpp,v $ // Revision 1.9 2011/08/26 22:45:53 acg // Torsten Maehne: remove redundant initialization assignment. // // Revision 1.8 2011/08/26 21:44:58 acg // Andy Goodrich: fix internal event naming. // // Revision 1.7 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.6 2011/08/24 22:05:35 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.5 2011/04/08 18:22:46 acg // Philipp A. Hartmann: use the context of the primitive channel to get // the change stamp value. // // Revision 1.4 2011/04/05 20:48:09 acg // Andy Goodrich: changes to make sure that event(), posedge() and negedge() // only return true if the clock has not moved. // // Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.2 2010/07/22 20:02:30 acg // Andy Goodrich: bug fixes. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.5 2006/11/28 20:30:48 acg // Andy Goodrich: updated from 2.2 source. sc_event_queue constructors // collapsed into a single constructor with an optional argument to get // the sc_module_name stack done correctly. Class name prefixing added // to sc_semaphore calls to wait() to keep gcc 4.x happy. // // Revision 1.4 2006/01/26 21:00:50 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // taf systemc-2.3.4/src/sysc/communication/sc_mutex.cpp0000644000175000017500000000760314342422106022043 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_mutex.cpp -- The sc_mutex primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_mutex.h" #include "sysc/kernel/sc_simcontext.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_mutex // // The sc_mutex primitive channel class. // ---------------------------------------------------------------------------- // constructors sc_mutex::sc_mutex() : sc_object( sc_gen_unique_name( "mutex" ) ), m_owner( 0 ), m_free( sc_event::kernel_event, "free_event" ) {} sc_mutex::sc_mutex( const char* name_ ) : sc_object( name_ ), m_owner( 0 ), m_free( sc_event::kernel_event, "free_event" ) {} // destructor sc_mutex::~sc_mutex() {} // interface methods // blocks until mutex could be locked int sc_mutex::lock() { if ( m_owner == sc_get_current_process_b()) return 0; while( in_use() ) { sc_core::wait( m_free, sc_get_curr_simcontext() ); } m_owner = sc_get_current_process_b(); return 0; } // returns -1 if mutex could not be locked int sc_mutex::trylock() { if ( m_owner == sc_get_current_process_b()) return 0; if( in_use() ) { return -1; } m_owner = sc_get_current_process_b(); return 0; } // returns -1 if mutex was not locked by caller int sc_mutex::unlock() { if( m_owner != sc_get_current_process_b() ) { return -1; } m_owner = 0; m_free.notify(); return 0; } } // namespace sc_core // $Log: sc_mutex.cpp,v $ // Revision 1.7 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.6 2011/03/28 13:02:29 acg // Andy Goodrich: removed sc_event in sc_mutex class from the object // hierarchy since it is considered a "kernel" event. // // Revision 1.5 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.4 2010/11/02 16:31:01 acg // Andy Goodrich: changed object derivation to use sc_object rather than // sc_prim_channel as the parent class. // // Revision 1.3 2008/11/13 15:29:46 acg // David C. Black, ESLX, Inc: lock & trylock now allow owner to apply // lock more than once without incident. Previous behavior locked up the // owning process. // // Revision 1.2 2008/05/20 16:46:18 acg // Andy Goodrich: added checks for multiple writers. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/03/21 00:00:27 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_port.h0000644000175000017500000004623014342422106021331 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_port.h -- Base classes of all port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_PORT_H #define SC_PORT_H #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_interface.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_object.h" #include "sysc/kernel/sc_process.h" #include "sysc/utils/sc_typeindex.h" #if ! defined( SC_DISABLE_VIRTUAL_BIND ) # define SC_VIRTUAL_ virtual #else # define SC_VIRTUAL_ /* non-virtual */ #endif #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::vector #endif namespace sc_core { class sc_event_finder; class sc_port_base; struct sc_bind_info; enum sc_port_policy { SC_ONE_OR_MORE_BOUND, // Default SC_ZERO_OR_MORE_BOUND, SC_ALL_BOUND }; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // BEWARE: Ports can only be created and bound during elaboration. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // ---------------------------------------------------------------------------- // CLASS : sc_port_base // // Abstract base class for class sc_port_b. // ---------------------------------------------------------------------------- class SC_API sc_port_base : public sc_object { friend class sc_module; friend class sc_port_registry; friend class sc_sensitive; friend class sc_sensitive_pos; friend class sc_sensitive_neg; public: // typedefs typedef sc_port_base this_type; public: int bind_count(); // get the first interface without checking for nil virtual sc_interface* get_interface() = 0; virtual const sc_interface* get_interface() const = 0; virtual const char* kind() const { return "sc_port_base"; } // return RTTI information of associated interface virtual sc_type_index get_interface_type() const = 0; protected: // constructors explicit sc_port_base( int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND ); sc_port_base( const char* name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND ); // destructor virtual ~sc_port_base(); // bind interface to this port void bind( sc_interface& interface_ ); // bind parent port to this port void bind( this_type& parent_ ); // called by pbind (for internal use only) virtual int vbind( sc_interface& ) = 0; virtual int vbind( sc_port_base& ) = 0; private: // called by complete_binding (for internal use only) virtual void add_interface( sc_interface* ) = 0; virtual int interface_count() const = 0; const char* if_typename() const { return get_interface_type().name(); } protected: // called by construction_done (does nothing by default) virtual void before_end_of_elaboration(); // called by elaboration_done (does nothing) virtual void end_of_elaboration(); // called by start_simulation (does nothing by default) virtual void start_of_simulation(); // called by simulation_done (does nothing by default) virtual void end_of_simulation(); // error reporting void report_error( const char* id, const char* add_msg = 0) const; protected: // called by the sc_sensitive* classes virtual void make_sensitive( sc_thread_handle, sc_event_finder* = 0 ) const; virtual void make_sensitive( sc_method_handle, sc_event_finder* = 0 ) const; void add_static_event( sc_method_handle process_p, const sc_event& event) const; void add_static_event( sc_thread_handle process_p, const sc_event& event) const; private: // called by class sc_module for positional binding int pbind( sc_interface& ); int pbind( sc_port_base& ); // support methods int first_parent(); void insert_parent( int ); // called when construction is done void construction_done(); // called when elaboration is done void complete_binding(); void elaboration_done(); // called before simulation starts void start_simulation(); // called after simulation ends void simulation_done(); // called from complete_binding or during destruction void free_binding(); protected: sc_bind_info* m_bind_info; private: // disabled sc_port_base(); sc_port_base( const this_type& ); this_type& operator = ( const this_type& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_port_registry // // Registry for all ports. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- class sc_port_registry { friend class sc_simcontext; public: void insert( sc_port_base* ); void remove( sc_port_base* ); int size() const { return static_cast(m_port_vec.size()); } private: // constructor explicit sc_port_registry( sc_simcontext& simc_ ); // destructor ~sc_port_registry(); // called when by construction_done and elaboration done void complete_binding(); // called when construction is done bool construction_done(); // called when elaboration is done void elaboration_done(); // called before simulation starts void start_simulation(); // called after simulation ends void simulation_done(); static void replace_port( sc_port_registry* ); private: int m_construction_done; std::vector m_port_vec; sc_simcontext* m_simc; private: // disabled sc_port_registry(); sc_port_registry( const sc_port_registry& ); sc_port_registry& operator = ( const sc_port_registry& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_port_b // // Abstract base class for class sc_port. // ---------------------------------------------------------------------------- template class sc_port_b : public sc_port_base { public: friend class sc_sensitive; friend class sc_sensitive_neg; friend class sc_sensitive_pos; // typedefs typedef sc_port_base base_type; typedef sc_port_b this_type; typedef this_type port_type; public: // bind an interface of type IF to this port SC_VIRTUAL_ void bind( IF& interface_ ) { base_type::bind( interface_ ); } void operator () ( IF& interface_ ) { this->bind( interface_ ); } // bind a parent port with type IF to this port SC_VIRTUAL_ void bind( port_type& parent_ ) { base_type::bind( parent_ ); } void operator () ( port_type& parent_ ) { this->bind( parent_ ); } // number of connected interfaces int size() const { return static_cast(m_interface_vec.size()); } // allow to call methods provided by the first interface IF* operator -> (); const IF* operator -> () const; // allow to call methods provided by interface at index inline const IF* get_interface( int iface_i ) const; inline IF* get_interface( int iface_i ); IF* operator [] ( int index_ ) { return get_interface( index_ ); } const IF* operator [] ( int index_ ) const { return get_interface( index_ ); } // get the first interface without checking for nil virtual sc_interface* get_interface() { return m_interface; } virtual const sc_interface* get_interface() const { return m_interface; } // return RTTI information of associated interface virtual sc_type_index get_interface_type() const; protected: // constructors explicit sc_port_b( int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND ) : base_type( max_size_, policy ), m_interface( 0 ), m_interface_vec() {} sc_port_b( const char* name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND ) : base_type( name_, max_size_, policy ), m_interface( 0 ), m_interface_vec() {} // destructor (does nothing) virtual ~sc_port_b() {} // called by pbind (for internal use only) virtual int vbind( sc_interface& ); virtual int vbind( sc_port_base& ); // called by the sc_sensitive* classes virtual void make_sensitive( sc_thread_handle, sc_event_finder* = 0 ) const; virtual void make_sensitive( sc_method_handle, sc_event_finder* = 0 ) const; private: // called by complete_binding (for internal use only) virtual void add_interface( sc_interface* ); virtual int interface_count() const; // disabled sc_port_b(); sc_port_b( const this_type& ); this_type& operator = ( const this_type& ); private: IF* m_interface; // first interface in interface vec std::vector m_interface_vec; }; // ---------------------------------------------------------------------------- // CLASS : sc_port // // Generic port class and base class for other port classes. // N is the maximum number of channels (with interface IF) that can be bound // to this port. N <= 0 means no maximum. // ---------------------------------------------------------------------------- extern SC_API void sc_warn_port_constructor(); template class sc_port : public sc_port_b { // typdefs typedef sc_port_b base_type; typedef sc_port this_type; public: // constructors sc_port() : base_type( N, P ) {} explicit sc_port( const char* name_ ) : base_type( name_, N, P ) {} explicit sc_port( IF& interface_ ) : base_type( N, P ) { sc_warn_port_constructor(); base_type::bind( interface_ ); } sc_port( const char* name_, IF& interface_ ) : base_type( name_, N, P ) { sc_warn_port_constructor(); base_type::bind( interface_ ); } explicit sc_port( base_type& parent_ ) : base_type( N, P ) { sc_warn_port_constructor(); base_type::bind( parent_ ); } sc_port( const char* name_, base_type& parent_ ) : base_type( name_, N, P ) { sc_warn_port_constructor(); base_type::bind( parent_ ); } sc_port( this_type& parent_ ) : base_type( N, P ) { sc_warn_port_constructor(); base_type::bind( parent_ ); } sc_port( const char* name_, this_type& parent_ ) : base_type( name_, N, P ) { sc_warn_port_constructor(); base_type::bind( parent_ ); } // destructor (does nothing) virtual ~sc_port() {} virtual const char* kind() const { return "sc_port"; } private: // disabled sc_port( const this_type& ); this_type& operator = ( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_port_b // // Abstract base class for class sc_port. // ---------------------------------------------------------------------------- // allow to call methods provided by the first interface template inline IF* sc_port_b::operator -> () { if( m_interface == 0 ) { report_error( SC_ID_GET_IF_, "port is not bound" ); sc_core::sc_abort(); // can't recover from here } return m_interface; } template inline const IF* sc_port_b::operator -> () const { // delegate implementation to non-const overload return const_cast(*this).operator->(); } // allow to call methods provided by interface at index // // note that we special-case index of zero, since the method may be // called before binding has occurred, and we need to return a zero // in that case not an error. template inline IF* sc_port_b::get_interface( int index_ ) { if ( index_ == 0 ) { return m_interface; } else if( index_ < 0 || index_ >= size() ) { report_error( SC_ID_GET_IF_, "index out of range" ); return NULL; } return m_interface_vec[index_]; } template inline const IF* sc_port_b::get_interface( int index_ ) const { // delegate implementation to non-const overload return const_cast(*this).get_interface(index_); } // called by pbind (for internal use only) template inline int sc_port_b::vbind( sc_interface& interface_ ) { IF* iface = dynamic_cast( &interface_ ); if( iface == 0 ) { // type mismatch return 2; } base_type::bind( *iface ); return 0; } template inline int sc_port_b::vbind( sc_port_base& parent_ ) { this_type* parent = dynamic_cast( &parent_ ); if( parent == 0 ) { // type mismatch return 2; } base_type::bind( *parent ); return 0; } // called by complete_binding (for internal use only) template inline void sc_port_b::add_interface( sc_interface* interface_ ) { IF* iface = dynamic_cast( interface_ ); sc_assert( iface != 0 ); // make sure that the interface is not already bound: int if_n = size(); for ( int i = 0; i < if_n; i++ ) { if ( iface == m_interface_vec[i] ) { report_error( SC_ID_BIND_IF_TO_PORT_, "interface already bound to port" ); // may continue, if suppressed } } // "bind" the interface and make sure our short cut for 0 is set up. m_interface_vec.push_back( iface ); m_interface = m_interface_vec[0]; } template inline sc_type_index sc_port_b::get_interface_type() const { return typeid( IF ); } template inline int sc_port_b::interface_count() const { return size(); } template void sc_port_b::make_sensitive( sc_thread_handle handle_p, sc_event_finder* event_finder_ ) const { if ( m_bind_info == 0 ) { int if_n = size(); for ( int if_i = 0; if_i < if_n; if_i++ ) { IF* iface_p = m_interface_vec[if_i]; sc_assert( iface_p != 0 ); add_static_event( handle_p, iface_p->default_event() ); } } else { sc_port_base::make_sensitive( handle_p, event_finder_ ); } } template void sc_port_b::make_sensitive( sc_method_handle handle_p, sc_event_finder* event_finder_ ) const { if ( m_bind_info == 0 ) { int if_n = size(); for ( int if_i = 0; if_i < if_n; if_i++ ) { IF* iface_p = m_interface_vec[if_i]; sc_assert( iface_p != 0 ); add_static_event( handle_p, iface_p->default_event() ); } } else { sc_port_base::make_sensitive( handle_p, event_finder_ ); } } // ---------------------------------------------------------------------------- // CLASS : sc_port // // Generic port class and base class for other port classes. // N is the maximum number of channels (with interface IF) that can be bound // to this port. N <= 0 means no maximum. // ---------------------------------------------------------------------------- } // namespace sc_core #undef SC_VIRTUAL_ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte, Bishnupriya Bhattacharya, Cadence Design Systems, 25 August, 2003 Description of Modification: phase callbacks Name, Affiliation, Date: Andy Goodrich, Forte Design Systems 12 December, 2005 Description of Modification: multiport binding policy changes *****************************************************************************/ /* $Log: sc_port.h,v $ Revision 1.10 2011/08/26 20:45:41 acg Andy Goodrich: moved the modification log to the end of the file to eliminate source line number skew when check-ins are done. Revision 1.9 2011/08/24 22:05:36 acg Torsten Maehne: initialization changes to remove warnings. Revision 1.8 2011/08/07 19:08:01 acg Andy Goodrich: moved logs to end of file so line number synching works better between versions. Revision 1.7 2011/08/07 18:53:09 acg Philipp A. Hartmann: add virtual instances of the bind function for base classes to eliminate warning messages for clang platforms. Revision 1.6 2011/05/09 04:07:37 acg Philipp A. Hartmann: (1) Restore hierarchy in all phase callbacks. (2) Ensure calls to before_end_of_elaboration. Revision 1.5 2011/03/30 16:46:10 acg Andy Goodrich: added a signature and removed a virtual specification to eliminate warnings with certain compilers. Revision 1.4 2011/02/18 20:23:45 acg Andy Goodrich: Copyright update. Revision 1.3 2011/01/20 16:52:15 acg Andy Goodrich: changes for IEEE 1666 2011. Revision 1.2 2010/08/03 18:01:11 acg Andy Goodrich: formatting. Revision 1.1.1.1 2006/12/15 20:20:04 acg SystemC 2.3 Revision 1.5 2006/08/29 23:35:00 acg Andy Goodrich: added bind_count() method to allow users to determine which ports are connected in before_end_of_elaboration(). Revision 1.4 2006/05/08 17:52:47 acg Andy Goodrich: (1) added David Long's forward declarations for friend functions, methods, and operators to keep the Microsoft compiler happy. (2) Added delta_count() method to sc_prim_channel for use by sc_signal so that the friend declaration in sc_simcontext.h can be for a non-templated class (i.e., sc_prim_channel.) Revision 1.3 2006/01/24 20:46:31 acg Andy Goodrich: changes to eliminate use of deprecated features. For instance, using notify(SC_ZERO_TIME) in place of notify_delayed(). Revision 1.2 2006/01/03 23:18:26 acg Changed copyright to include 2006. Revision 1.1.1.1 2005/12/19 23:16:43 acg First check in of SystemC 2.1 into its own archive. Revision 1.10 2005/09/15 23:01:51 acg Added std:: prefix to appropriate methods and types to get around issues with the Edison Front End. Revision 1.9 2005/08/10 01:35:59 acg Changes for 64-bit support. Revision 1.8 2005/04/03 22:52:51 acg Namespace changes. Revision 1.7 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.6 2004/09/27 21:02:54 acg Andy Goodrich - Forte Design Systems, Inc. - Added a $Log comment so that CVS checkin comments will appear in checked out source. */ #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_host_semaphore.h0000644000175000017500000001112214342422106023355 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_host_semaphore.h -- A "real" semaphore for the underlying host system Original Author: Philipp A. Hartmann, Intel CHANGE LOG AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_HOST_SEMAPHORE_H_INCLUDED_ #define SC_HOST_SEMAPHORE_H_INCLUDED_ #include "sysc/kernel/sc_cmnhdr.h" // SC_CPLUSPLUS #include "sysc/communication/sc_semaphore_if.h" #if SC_CPLUSPLUS >= 201103L # include # include #elif !defined(WIN32) && !defined(_WIN32) // use POSIX semaphore # include #else // use Windows semaphore # ifndef SC_INCLUDE_WINDOWS_H # define SC_INCLUDE_WINDOWS_H // include Windows.h, if needed # include "sysc/kernel/sc_cmnhdr.h" # endif #endif // SC_CPLUSPLUS namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_host_semaphore // // Wrapping an OS semaphore on the simulation host // ---------------------------------------------------------------------------- class SC_API sc_host_semaphore : public sc_semaphore_if { #if SC_CPLUSPLUS >= 201103L struct underlying_type { std::mutex mtx; std::condition_variable cond_var; int value; }; void do_init(int init) { m_sem.value = init; } void do_wait() { std::unique_lock lock(m_sem.mtx); while (m_sem.value <= 0) { m_sem.cond_var.wait(lock); } --m_sem.value; } bool do_trywait() { std::unique_lock lock(m_sem.mtx); if (m_sem.value <= 0) return false; --m_sem.value; return true; } void do_post() { std::unique_lock lock(m_sem.mtx); ++m_sem.value; m_sem.cond_var.notify_one(); } void do_destroy() { /* no-op */ } #elif defined(WIN32) || defined(_WIN32) // use Windows Semaphore typedef HANDLE underlying_type; void do_init(int init) { m_sem = CreateSemaphore( NULL, init, LONG_MAX, NULL ); sc_assert( m_sem != NULL ); } void do_wait() { WaitForSingleObject( m_sem, INFINITE ); } bool do_trywait() { return ( WaitForSingleObject( m_sem, 0 ) == WAIT_OBJECT_0 ); } void do_post() { ReleaseSemaphore( m_sem, 1, NULL ); } void do_destroy() { CloseHandle( m_sem ); } #else // use POSIX semaphore typedef sem_t underlying_type; void do_init(int init) { int semaphore_initialized = sem_init( &m_sem, 0, init ); sc_assert(semaphore_initialized == 0); } void do_wait() { sem_wait( &m_sem ); } bool do_trywait() { return ( sem_trywait( &m_sem ) == 0 ); } void do_post() { sem_post( &m_sem ); } void do_destroy() { sem_destroy( &m_sem ); } #endif // platform-specific implementation public: // constructors and destructor explicit sc_host_semaphore(int init = 0) : m_sem() { do_init(init); } virtual ~sc_host_semaphore() { do_destroy(); } // interface methods // lock (take) the semaphore, block if not available virtual int wait() { do_wait(); return 0; } // lock (take) the semaphore, return -1 if not available virtual int trywait() { return do_trywait() ? 0 : -1; } // unlock (give) the semaphore virtual int post() { do_post(); return 0; } // get the value of the semaphore (not supported) virtual int get_value() const { sc_assert(false && "not supported on sc_host_semaphore"); return -1; } private: underlying_type m_sem; }; } // namespace sc_core #endif // SC_HOST_SEMAPHORE_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/communication/sc_semaphore.h0000644000175000017500000000751214342422106022330 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_semaphore.h -- The sc_semaphore primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SEMAPHORE_H #define SC_SEMAPHORE_H #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_object.h" #include "sysc/communication/sc_semaphore_if.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_semaphore // // The sc_semaphore primitive channel class. // ---------------------------------------------------------------------------- class SC_API sc_semaphore : public sc_semaphore_if, public sc_object { public: // constructors explicit sc_semaphore( int init_value_ ); sc_semaphore( const char* name_, int init_value_ ); // interface methods // lock (take) the semaphore, block if not available virtual int wait(); // lock (take) the semaphore, return -1 if not available virtual int trywait(); // unlock (give) the semaphore virtual int post(); // get the value of the semaphore virtual int get_value() const { return m_value; } virtual const char* kind() const { return "sc_semaphore"; } protected: // support methods bool in_use() const { return ( m_value <= 0 ); } // error reporting void report_error( const char* id, const char* add_msg = 0 ) const; protected: sc_event m_free; // event to block on when m_value is negative int m_value; // current value of the semaphore private: // disabled sc_semaphore( const sc_semaphore& ); sc_semaphore& operator = ( const sc_semaphore& ); }; } // namespace sc_core //$Log: sc_semaphore.h,v $ //Revision 1.4 2011/08/26 20:45:42 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2010/11/02 16:31:01 acg // Andy Goodrich: changed object derivation to use sc_object rather than // sc_prim_channel as the parent class. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.4 2006/11/28 20:30:49 acg // Andy Goodrich: updated from 2.2 source. sc_event_queue constructors // collapsed into a single constructor with an optional argument to get // the sc_module_name stack done correctly. Class name prefixing added // to sc_semaphore calls to wait() to keep gcc 4.x happy. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_interface.h0000644000175000017500000000555514342422106022312 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_interface.h -- Abstract base class of all interface classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_INTERFACE_H #define SC_INTERFACE_H #include "sysc/kernel/sc_cmnhdr.h" namespace sc_core { class SC_API sc_event; class SC_API sc_port_base; // ---------------------------------------------------------------------------- // CLASS : sc_interface // // Abstract base class of all interface classes. // BEWARE: Direct inheritance from this class must be done virtual. // ---------------------------------------------------------------------------- class SC_API sc_interface { public: // register a port with this interface (does nothing by default) virtual void register_port( sc_port_base& port_, const char* if_typename_ ); // get the default event virtual const sc_event& default_event() const; // destructor (does nothing) virtual ~sc_interface(); protected: // constructor (does nothing) sc_interface(); private: // disabled sc_interface( const sc_interface& ); sc_interface& operator = ( const sc_interface& ); }; } // namespace sc_core //$Log: sc_interface.h,v $ //Revision 1.3 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.7 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_resolved.h0000644000175000017500000001110714342422106023520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_resolved.h -- The resolved signal class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_RESOLVED_H #define SC_SIGNAL_RESOLVED_H #include "sysc/communication/sc_signal.h" #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::vector #endif namespace sc_core { class sc_process_b; extern SC_API const sc_dt::sc_logic_value_t sc_logic_resolution_tbl[4][4]; // ---------------------------------------------------------------------------- // CLASS : sc_signal_resolved // // The resolved signal class. // ---------------------------------------------------------------------------- class SC_API sc_signal_resolved : public sc_signal { public: // typedefs typedef sc_signal_resolved this_type; typedef sc_signal base_type; typedef sc_dt::sc_logic value_type; public: // constructors sc_signal_resolved() : base_type( sc_gen_unique_name( "signal_resolved" ) ) , m_proc_vec(), m_val_vec() {} explicit sc_signal_resolved( const char* name_ ) : base_type( name_ ) , m_proc_vec(), m_val_vec() {} sc_signal_resolved( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) , m_proc_vec() , m_val_vec() {} // interface methods virtual void register_port( sc_port_base&, const char* ) {} // write the new value virtual void write( const value_type& ); // other methods virtual const char* kind() const { return "sc_signal_resolved"; } // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } protected: virtual void update(); protected: std::vector m_proc_vec; // processes writing this signal std::vector m_val_vec; // new values written this signal private: // disabled sc_signal_resolved( const this_type& ); }; } // namespace sc_core #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif //$Log: sc_signal_resolved.h,v $ //Revision 1.6 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.5 2011/08/24 22:05:36 acg // Torsten Maehne: initialization changes to remove warnings. // //Revision 1.4 2011/04/19 02:36:26 acg // Philipp A. Hartmann: new aysnc_update and mutex support. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:52 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_rv_ports.h0000644000175000017500000002337214342422106023562 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_rv_ports.h -- The resolved vector signal ports. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_RV_PORTS_H #define SC_SIGNAL_RV_PORTS_H #include #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_signal_ports.h" #include "sysc/communication/sc_signal_rv.h" #include "sysc/datatypes/bit/sc_lv.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_in_rv // // The sc_signal_rv input port class. // ---------------------------------------------------------------------------- template class sc_in_rv : public sc_in > { public: // typedefs typedef sc_dt::sc_lv data_type; typedef sc_in_rv this_type; typedef sc_in base_type; typedef typename base_type::in_if_type in_if_type; typedef typename base_type::in_port_type in_port_type; typedef typename base_type::inout_port_type inout_port_type; public: // constructors sc_in_rv() : base_type() {} explicit sc_in_rv( const char* name_ ) : base_type( name_ ) {} explicit sc_in_rv( const in_if_type& interface_ ) : base_type( interface_ ) {} sc_in_rv( const char* name_, const in_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_in_rv( in_port_type& parent_ ) : base_type( parent_ ) {} sc_in_rv( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ) {} explicit sc_in_rv( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_in_rv( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_in_rv( this_type& parent_ ) : base_type( parent_ ) {} sc_in_rv( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_in_rv() {} // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_in_rv"; } private: // disabled sc_in_rv( const this_type& ); this_type& operator = ( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // called when elaboration is done template void sc_in_rv::end_of_elaboration() { base_type::end_of_elaboration(); // check if bound channel is a resolved signal if( dynamic_cast*>( this->get_interface() ) == 0 ) { this->report_error( SC_ID_RESOLVED_PORT_NOT_BOUND_, 0 ); } } // ---------------------------------------------------------------------------- // CLASS : sc_inout_rv // // The sc_signal_rv input/output port class. // ---------------------------------------------------------------------------- template class sc_inout_rv : public sc_inout > { public: // typedefs typedef sc_dt::sc_lv data_type; typedef sc_inout_rv this_type; typedef sc_inout base_type; typedef typename base_type::in_if_type in_if_type; typedef typename base_type::in_port_type in_port_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; public: // constructors sc_inout_rv() : base_type() {} explicit sc_inout_rv( const char* name_ ) : base_type( name_ ) {} explicit sc_inout_rv( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_inout_rv( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_inout_rv( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_inout_rv( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_inout_rv( this_type& parent_ ) : base_type( parent_ ) {} sc_inout_rv( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_inout_rv() {} // write the new value this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_inout_rv"; } private: // disabled sc_inout_rv( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // called when elaboration is done template void sc_inout_rv::end_of_elaboration() { base_type::end_of_elaboration(); // check if bound channel is a resolved signal if( dynamic_cast*>( this->get_interface() ) == 0 ) { this->report_error( SC_ID_RESOLVED_PORT_NOT_BOUND_, 0 ); } } // ---------------------------------------------------------------------------- // CLASS : sc_out_rv // // The sc_signal_rv output port class. // ---------------------------------------------------------------------------- // sc_out_rv can also read from its port, hence no difference with // sc_inout_rv. For debugging reasons, a class is provided instead // of a define. template class sc_out_rv : public sc_inout_rv { public: // typedefs typedef sc_out_rv this_type; typedef sc_inout_rv base_type; typedef typename base_type::data_type data_type; typedef typename base_type::in_if_type in_if_type; typedef typename base_type::in_port_type in_port_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; public: // constructors sc_out_rv() : base_type() {} explicit sc_out_rv( const char* name_ ) : base_type( name_ ) {} explicit sc_out_rv( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out_rv( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out_rv( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out_rv( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out_rv( this_type& parent_ ) : base_type( parent_ ) {} sc_out_rv( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_out_rv() {} // write the new value this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } virtual const char* kind() const { return "sc_out_rv"; } private: // disabled sc_out_rv( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII } // namespace sc_core //$Log: sc_signal_rv_ports.h,v $ //Revision 1.3 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:27 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.11 2005/09/15 23:01:52 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.10 2005/06/10 22:43:56 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_semaphore.cpp0000644000175000017500000001001314342422106022651 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_semaphore.cpp -- The sc_semaphore primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_semaphore.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_wait.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_semaphore // // The sc_semaphore primitive channel class. // ---------------------------------------------------------------------------- // error reporting void sc_semaphore::report_error( const char* id, const char* add_msg ) const { std::stringstream msg; if (add_msg != 0) msg << add_msg << ": "; msg << "semaphore '" << name() << "'"; SC_REPORT_ERROR( id, msg.str().c_str() ); } // constructors sc_semaphore::sc_semaphore( int init_value_ ) : sc_object( sc_gen_unique_name( "semaphore" ) ), m_free( sc_event::kernel_event, "free_event" ), m_value( init_value_ ) { if( m_value < 0 ) { report_error( SC_ID_INVALID_SEMAPHORE_VALUE_ ); } } sc_semaphore::sc_semaphore( const char* name_, int init_value_ ) : sc_object( name_ ), m_free( sc_event::kernel_event, "free_event" ), m_value( init_value_ ) { if( m_value < 0 ) { report_error( SC_ID_INVALID_SEMAPHORE_VALUE_ ); } } // interface methods // lock (take) the semaphore, block if not available int sc_semaphore::wait() { while( in_use() ) { sc_core::wait( m_free, sc_get_curr_simcontext() ); } -- m_value; return 0; } // lock (take) the semaphore, return -1 if not available int sc_semaphore::trywait() { if( in_use() ) { return -1; } -- m_value; return 0; } // unlock (give) the semaphore int sc_semaphore::post() { ++m_value; m_free.notify(); return 0; } } // namespace sc_core // $Log: sc_semaphore.cpp,v $ // Revision 1.5 2011/08/26 20:45:42 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/03/23 16:17:22 acg // Andy Goodrich: hide the sc_events that are kernel related. // // Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.2 2010/11/02 16:31:01 acg // Andy Goodrich: changed object derivation to use sc_object rather than // sc_prim_channel as the parent class. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.6 2006/11/28 20:30:49 acg // Andy Goodrich: updated from 2.2 source. sc_event_queue constructors // collapsed into a single constructor with an optional argument to get // the sc_module_name stack done correctly. Class name prefixing added // to sc_semaphore calls to wait() to keep gcc 4.x happy. // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_clock.h0000644000175000017500000001723114342422106021437 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_clock.h -- The clock channel. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_CLOCK_H #define SC_CLOCK_H #include "sysc/kernel/sc_module.h" #include "sysc/communication/sc_signal.h" #include "sysc/tracing/sc_trace.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_clock // // The clock channel. // ---------------------------------------------------------------------------- class SC_API sc_clock : public sc_signal { typedef sc_signal base_type; public: friend class sc_clock_posedge_callback; friend class sc_clock_negedge_callback; // constructors sc_clock(); explicit sc_clock( const char* name_ ); sc_clock( const char* name_, const sc_time& period_, double duty_cycle_ = 0.5, const sc_time& start_time_ = SC_ZERO_TIME, bool posedge_first_ = true ); sc_clock( const char* name_, double period_v_, sc_time_unit period_tu_, double duty_cycle_ = 0.5 ); sc_clock( const char* name_, double period_v_, sc_time_unit period_tu_, double duty_cycle_, double start_time_v_, sc_time_unit start_time_tu_, bool posedge_first_ = true ); // for backward compatibility with 1.0 sc_clock( const char* name_, double period_, // in default time units double duty_cycle_ = 0.5, double start_time_ = 0.0, // in default time units bool posedge_first_ = true ); // destructor (does nothing) virtual ~sc_clock(); virtual void register_port( sc_port_base&, const char* if_type ); virtual void write( const bool& ); // get the period const sc_time& period() const { return m_period; } // get the duty cycle double duty_cycle() const { return m_duty_cycle; } // get the current time / clock characteristics bool posedge_first() const { return m_posedge_first; } sc_time start_time() const { return m_start_time; } static const sc_time& time_stamp(); virtual const char* kind() const { return "sc_clock"; } #if 0 // @@@@#### REMOVE // for backward compatibility with 1.0 sc_signal_in_if& signal() { return *this; } const sc_signal_in_if& signal() const { return *this; } static void start( const sc_time& duration ) { sc_start( duration ); } static void start( double v, sc_time_unit tu ) { sc_start( sc_time(v, tu) ); } static void start( double duration = -1 ) { sc_start( duration ); } static void stop() { sc_stop(); } #endif protected: void before_end_of_elaboration(); // processes void posedge_action(); void negedge_action(); // error reporting void report_error( const char* id, const char* add_msg = 0 ) const; void init( const sc_time&, double, const sc_time&, bool ); bool is_clock() const { return true; } protected: sc_time m_period; // the period of this clock double m_duty_cycle; // the duty cycle (fraction of period) sc_time m_start_time; // the start time of the first edge bool m_posedge_first; // true if first edge is positive sc_time m_posedge_time; // time till next positive edge sc_time m_negedge_time; // time till next negative edge sc_event m_next_posedge_event; sc_event m_next_negedge_event; private: // disabled sc_clock( const sc_clock& ); sc_clock& operator = ( const sc_clock& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // processes inline void sc_clock::posedge_action() { m_next_negedge_event.notify_internal( m_negedge_time ); m_new_val = true; request_update(); } inline void sc_clock::negedge_action() { m_next_posedge_event.notify_internal( m_posedge_time ); m_new_val = false; request_update(); } // ---------------------------------------------------------------------------- class SC_API sc_clock_posedge_callback { public: sc_clock_posedge_callback(sc_clock* target_p) : m_target_p(target_p) {} inline void operator () () { m_target_p->posedge_action(); } protected: sc_clock* m_target_p; }; class SC_API sc_clock_negedge_callback { public: sc_clock_negedge_callback(sc_clock* target_p) : m_target_p(target_p) {} inline void operator () () { m_target_p->negedge_action(); } protected: sc_clock* m_target_p; }; } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Bishnupriya Bhattacharya, Cadence Design Systems, 3 October, 2003 Description of Modification: sc_clock inherits from sc_signal only instead of sc_signal_in_if and sc_module. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ //$Log: sc_clock.h,v $ //Revision 1.5 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.4 2011/08/24 22:05:35 acg // Torsten Maehne: initialization changes to remove warnings. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.5 2006/01/25 00:31:11 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // //Revision 1.4 2006/01/24 20:43:25 acg // Andy Goodrich: convert notify_delayed() calls into notify_internal() calls. // notify_internal() is an implementation dependent version of notify_delayed() // that is simpler, and does not trigger the deprecation warning one would get // using notify_delayed(). // //Revision 1.3 2006/01/18 21:42:26 acg //Andy Goodrich: Changes for check writer support, and tightening up sc_clock //port usage. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.14 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal.h0000644000175000017500000005021114342422106021614 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal.h -- The sc_signal primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_H #define SC_SIGNAL_H #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_signal_ifs.h" #include "sysc/communication/sc_writer_policy.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/tracing/sc_trace.h" #include namespace sc_core { inline bool sc_writer_policy_check_write::check_write( sc_object* target, bool /*value_changed*/ ) { sc_process_b* writer_p = sc_get_curr_simcontext()->get_current_writer(); if( SC_UNLIKELY_( !m_writer_p.valid() ) ) { // always store first writer sc_process_handle( writer_p ).swap( m_writer_p ); } else if( SC_UNLIKELY_(m_writer_p != writer_p && writer_p != 0) ) { // Alternative option: only flag error, if either // - we enforce conflicts across multiple evaluation phases, or // - the new value is different from the previous write //if( !m_delta_only || value_changed ) { sc_signal_invalid_writer( target, m_writer_p, writer_p, m_delta_only ); // error has been suppressed, accept check as well, // but update current writer to the last "successful" one sc_process_handle( writer_p ).swap( m_writer_p ); } } return true; } inline void sc_writer_policy_check_write::update() { if( m_delta_only ) // reset, if we're only checking for delta conflicts sc_process_handle().swap( m_writer_p ); } // ---------------------------------------------------------------------------- // CLASS : sc_signal_channel // // The sc_signal type-agnostic primitive channel base class. // ---------------------------------------------------------------------------- class SC_API sc_signal_channel : public sc_prim_channel { protected: sc_signal_channel( const char* name_ ) : sc_prim_channel( name_ ) , m_change_event_p( 0 ) , m_change_stamp( ~sc_dt::UINT64_ONE ) {} public: virtual ~sc_signal_channel(); // interface methods virtual const char* kind() const { return "sc_signal_channel"; } // get the default event const sc_event& default_event() const { return value_changed_event(); } // get the value changed event const sc_event& value_changed_event() const; // was there an event? bool event() const { return simcontext()->event_occurred(m_change_stamp); } protected: void do_update(); // reporting to avoid code bloat in sc_signal_t void deprecated_get_data_ref() const; void deprecated_get_new_value() const; void deprecated_trace() const; sc_event* lazy_kernel_event( sc_event**, const char* ) const; void notify_next_delta( sc_event* ev ) const { if( ev ) ev->notify_next_delta(); } protected: mutable sc_event* m_change_event_p; // value change event if present. sc_dt::uint64 m_change_stamp; // delta of last event private: // disabled sc_signal_channel( const sc_signal_channel& ) /* = delete */; sc_signal_channel& operator=( const sc_signal_channel& ) /* = delete */; }; inline ::std::ostream& operator << ( ::std::ostream& os, const sc_signal_channel& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_signal_t (implementation-defined) // // The generic sc_signal primitive channel base class // (to reduce complexity of specialisations for bool and sc_logic) // ---------------------------------------------------------------------------- template< class T, sc_writer_policy POL > class sc_signal_t : public sc_signal_inout_if , public sc_signal_channel , protected sc_writer_policy_check { protected: typedef sc_signal_inout_if if_type; typedef sc_signal_channel base_type; typedef sc_signal_t this_type; typedef sc_writer_policy_check policy_type; protected: // constructor and destructor sc_signal_t( const char* name_, const T& initial_value_ ) : base_type( name_ ) , m_cur_val( initial_value_ ) , m_new_val( initial_value_ ) {} virtual ~sc_signal_t() {} /* = default; */ public: // interface methods virtual const char* kind() const { return "sc_signal"; } virtual void register_port( sc_port_base&, const char* ); virtual sc_writer_policy get_writer_policy() const { return POL; } // get the default event virtual const sc_event& default_event() const { return value_changed_event(); } // get the value changed event virtual const sc_event& value_changed_event() const { return base_type::value_changed_event(); } // read the current value virtual const T& read() const { return m_cur_val; } // get a reference to the current value (for tracing) virtual const T& get_data_ref() const { deprecated_get_data_ref(); return m_cur_val; } // was there an event? virtual bool event() const { return base_type::event(); } // write the new value virtual void write( const T& ); // other methods operator const T& () const { return read(); } // assignment this_type& operator = ( const T& a ) { write( a ); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { write( a.read() ); return *this; } this_type& operator = ( const this_type& a ) { write( a.read() ); return *this; } const T& get_new_value() const { deprecated_get_new_value(); return m_new_val; } void trace( sc_trace_file* tf ) const { deprecated_trace(); # ifdef DEBUG_SYSTEMC sc_trace( tf, read(), name() ); # else if ( tf ) {} # endif } virtual void print( ::std::ostream& = ::std::cout ) const; virtual void dump( ::std::ostream& = ::std::cout ) const; protected: virtual void update(); void do_update(); protected: T m_cur_val; // current value of object. T m_new_val; // next value of object. private: // disabled sc_signal_t( const sc_signal_t& ) /* = delete */; }; // ---------------------------------------------------------------------------- template< class T, sc_writer_policy POL > inline void sc_signal_t::register_port( sc_port_base& port_ , const char* if_typename_ ) { bool is_output = std::string( if_typename_ ) == typeid(if_type).name(); if( !policy_type::check_port( this, &port_, is_output ) ) ((void)0); // fallback? error has been suppressed ... } // write the new value template< class T, sc_writer_policy POL > inline void sc_signal_t::write( const T& value_ ) { // first write per eval phase: m_new_val == m_cur_val bool value_changed = !( m_new_val == value_ ); if ( !policy_type::check_write(this, value_changed) ) return; m_new_val = value_; if( value_changed || policy_type::needs_update() ) { request_update(); } } template< class T, sc_writer_policy POL > inline void sc_signal_t::print( ::std::ostream& os ) const { os << m_cur_val; } template< class T, sc_writer_policy POL > void sc_signal_t::dump( ::std::ostream& os ) const { os << " name = " << name() << ::std::endl; os << " value = " << m_cur_val << ::std::endl; os << "new value = " << m_new_val << ::std::endl; } template< class T, sc_writer_policy POL > void sc_signal_t::update() { policy_type::update(); if( !( m_new_val == m_cur_val ) ) { do_update(); } } template< class T, sc_writer_policy POL > inline void sc_signal_t::do_update() { base_type::do_update(); m_cur_val = m_new_val; } // ---------------------------------------------------------------------------- // CLASS : sc_signal // // The sc_signal primitive channel class // ---------------------------------------------------------------------------- template< class T, sc_writer_policy POL /* = SC_DEFAULT_WRITER_POLICY */ > class sc_signal : public sc_signal_t { public: typedef sc_signal_inout_if if_type; typedef sc_signal_t base_type; typedef sc_signal this_type; typedef T value_type; typedef sc_writer_policy_check policy_type; // constructors and destructor sc_signal() : base_type( sc_gen_unique_name( "signal" ), value_type() ) {} explicit sc_signal( const char* name_ ) : base_type( name_, value_type() ) {} sc_signal( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) {} virtual ~sc_signal() {} /* = default; */ // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } private: // disabled sc_signal( const sc_signal& ) /* = delete */; }; // ---------------------------------------------------------------------------- // CLASS : sc_signal // // Specialization of sc_signal for type bool. // ---------------------------------------------------------------------------- class SC_API sc_reset; SC_API_TEMPLATE_DECL_ sc_signal_t; SC_API_TEMPLATE_DECL_ sc_signal_t; SC_API_TEMPLATE_DECL_ sc_signal_t; template< sc_writer_policy POL > class SC_API sc_signal : public sc_signal_t { protected: typedef sc_signal_t base_type; typedef sc_signal this_type; typedef bool value_type; typedef sc_writer_policy_check policy_type; public: // constructors and destructor sc_signal() : base_type( sc_gen_unique_name( "signal" ), value_type() ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) , m_reset_p( 0 ) {} explicit sc_signal( const char* name_ ) : base_type( name_, value_type() ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) , m_reset_p( 0 ) {} sc_signal( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) , m_reset_p( 0 ) {} virtual ~sc_signal(); // get the positive edge event virtual const sc_event& posedge_event() const; // get the negative edge event virtual const sc_event& negedge_event() const; // was there a positive edge event? virtual bool posedge() const { return ( this->event() && this->m_cur_val ); } // was there a negative edge event? virtual bool negedge() const { return ( this->event() && ! this->m_cur_val ); } // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } protected: virtual void update(); void do_update(); virtual bool is_clock() const { return false; } protected: mutable sc_event* m_negedge_event_p; // negative edge event if present. mutable sc_event* m_posedge_event_p; // positive edge event if present. mutable sc_reset* m_reset_p; // reset mechanism if present. private: // reset creation virtual sc_reset* is_reset() const; // disabled sc_signal( const this_type& ) /* = delete */; }; // ---------------------------------------------------------------------------- // CLASS : sc_signal // // Specialization of sc_signal for type sc_dt::sc_logic. // ---------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ sc_signal_t; SC_API_TEMPLATE_DECL_ sc_signal_t; SC_API_TEMPLATE_DECL_ sc_signal_t; template< sc_writer_policy POL > class SC_API sc_signal : public sc_signal_t { protected: typedef sc_signal_t base_type; typedef sc_signal this_type; typedef sc_dt::sc_logic value_type; typedef sc_writer_policy_check policy_type; public: sc_signal() : base_type( sc_gen_unique_name( "signal" ), value_type() ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) {} explicit sc_signal( const char* name_ ) : base_type( name_, value_type() ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) {} sc_signal( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) , m_negedge_event_p( 0 ) , m_posedge_event_p( 0 ) {} virtual ~sc_signal(); // get the positive edge event virtual const sc_event& posedge_event() const; // get the negative edge event virtual const sc_event& negedge_event() const; // was there a positive edge event? virtual bool posedge() const { return ( this->event() && this->m_cur_val == sc_dt::SC_LOGIC_1 ); } // was there a negative edge event? virtual bool negedge() const { return ( this->event() && this->m_cur_val == sc_dt::SC_LOGIC_0 ); } // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } protected: virtual void update(); void do_update(); protected: mutable sc_event* m_negedge_event_p; // negative edge event if present. mutable sc_event* m_posedge_event_p; // positive edge event if present. private: // disabled sc_signal( const this_type& ) /* = delete */; }; } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ //$Log: sc_signal.h,v $ //Revision 1.16 2011/08/26 20:45:42 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.15 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // //Revision 1.14 2011/06/25 17:08:38 acg // Andy Goodrich: Jerome Cornet's changes to use libtool to build the // library. // //Revision 1.13 2011/04/13 02:59:09 acg // Andy Goodrich: made events internal to signals into kernel events. // //Revision 1.12 2011/04/08 18:22:46 acg // Philipp A. Hartmann: use the context of the primitive channel to get // the change stamp value. // //Revision 1.11 2011/04/05 20:48:09 acg // Andy Goodrich: changes to make sure that event(), posedge() and negedge() // only return true if the clock has not moved. // //Revision 1.10 2011/04/05 07:10:55 acg // Andy Goodrich: added line that I dropped in sc_signal. // //Revision 1.9 2011/04/05 06:15:18 acg // Philipp A. Hartmann: sc_writer_policy: ignore no-ops in delta check. // //Revision 1.8 2011/03/23 16:17:22 acg // Andy Goodrich: hide the sc_events that are kernel related. // //Revision 1.7 2011/03/06 15:55:08 acg // Andy Goodrich: Changes for named events. // //Revision 1.6 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.5 2011/02/07 19:16:50 acg // Andy Goodrich: changes for handling multiple writers. // //Revision 1.4 2011/01/25 20:50:37 acg // Andy Goodrich: changes for IEEE 1666 2011. // //Revision 1.3 2010/12/07 19:50:37 acg // Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.14 2006/05/08 17:52:47 acg // Andy Goodrich: // (1) added David Long's forward declarations for friend functions, // methods, and operators to keep the Microsoft compiler happy. // (2) Added delta_count() method to sc_prim_channel for use by // sc_signal so that the friend declaration in sc_simcontext.h // can be for a non-templated class (i.e., sc_prim_channel.) // //Revision 1.12 2006/04/11 23:11:57 acg // Andy Goodrich: Changes for reset support that only includes // sc_cthread_process instances. // //Revision 1.11 2006/03/13 20:19:44 acg // Andy Goodrich: changed sc_event instances into pointers to sc_event instances // that are allocated as needed. This saves considerable storage for large // numbers of signals, etc. // //Revision 1.10 2006/01/26 21:00:50 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // //Revision 1.9 2006/01/24 20:45:41 acg //Andy Goodrich: converted notify_delayed() calls into notify_next_delta() calls //to eliminate deprecation warnings. notify_next_delta() is an implemenation- //dependent method of sc_event. It is simpler than notify_delayed(), and should //speed up simulation speeds. // //Revision 1.8 2006/01/19 19:18:25 acg //Andy Goodrich: eliminated check_writer in favor of inline code within the //write() method since we always execute the check_writer code even when //check writing is turned off. // //Revision 1.7 2006/01/19 00:30:57 acg //Andy Goodrich: Yet another implementation for disabling write checks on //signals. This version uses an environment variable, SC_SIGNAL_WRITE_CHECK, //that when set to DISABLE will turn off write checking. // //Revision 1.6 2006/01/18 21:42:26 acg //Andy Goodrich: Changes for check writer support, and tightening up sc_clock //port usage. // //Revision 1.5 2006/01/13 20:41:59 acg //Andy Goodrich: Changes to add port registration to the things that are //checked when SC_NO_WRITE_CHECK is not defined. // //Revision 1.4 2006/01/13 18:47:20 acg //Reversed sense of multiwriter signal check. It now defaults to ON unless the //user defines SC_NO_WRITE_CHEK before inclusion of the file. // //Revision 1.3 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.2 2005/12/20 21:58:18 acg //Removed Makefile.in, changed the event() methods to use sc_simcontext::event_occurred. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.19 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.18 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_export.h0000644000175000017500000001754514342422106021675 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_export.h -- Base classes of all export classes. Original Author: Andy Goodrich, Forte Design Systems Bishnupriya Bhattacharya, Cadence Design Systems CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_EXPORT_H #define SC_EXPORT_H #include #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_interface.h" #include "sysc/kernel/sc_object.h" #include "sysc/utils/sc_typeindex.h" #if ! defined( SC_DISABLE_VIRTUAL_BIND ) # define SC_VIRTUAL_ virtual #else # define SC_VIRTUAL_ /* non-virtual */ #endif namespace sc_core { //============================================================================= // CLASS : sc_export_base // // Abstract base class for class sc_export. //============================================================================= class SC_API sc_export_base : public sc_object { friend class sc_export_registry; public: // typedefs typedef sc_export_base this_type; public: virtual sc_interface* get_interface() = 0; virtual const sc_interface* get_interface() const = 0; // return RTTI information of associated interface virtual sc_type_index get_interface_type() const = 0; protected: // constructors sc_export_base(); sc_export_base(const char* name); // destructor virtual ~sc_export_base(); protected: // called when construction is done virtual void before_end_of_elaboration(); // called when elaboration is done (does nothing by default) virtual void end_of_elaboration(); // called before simulation starts (does nothing by default) virtual void start_of_simulation(); // called after simulation ends (does nothing) virtual void end_of_simulation(); // error reporting void report_error( const char* id, const char* add_msg = 0) const; private: const char* if_typename() const { return get_interface_type().name(); } void construction_done(); void elaboration_done(); void start_simulation(); void simulation_done(); // disabled sc_export_base(const this_type&); this_type& operator = (const this_type& ); }; //============================================================================= // CLASS : sc_export // // Generic export class for other export classes. This // class provides a binding point for access to an interface. //============================================================================= template class sc_export : public sc_export_base { typedef sc_export this_type; public: // constructors: sc_export() : sc_export_base() { m_interface_p = 0; } explicit sc_export( const char* name_ ) : sc_export_base(name_) { m_interface_p = 0; } public: // destructor: virtual ~sc_export() { } public: // interface access: virtual sc_interface* get_interface() { return m_interface_p; } virtual const sc_interface* get_interface() const { return m_interface_p; } const IF* operator -> () const { if ( m_interface_p == 0 ) { SC_REPORT_ERROR(SC_ID_SC_EXPORT_HAS_NO_INTERFACE_,name()); // may continue, if suppressed } return m_interface_p; } IF* operator -> () { if ( m_interface_p == 0 ) { SC_REPORT_ERROR(SC_ID_SC_EXPORT_HAS_NO_INTERFACE_,name()); // may continue, if suppressed } return m_interface_p; } operator IF& () { if ( m_interface_p == 0 ) { SC_REPORT_ERROR(SC_ID_SC_EXPORT_HAS_NO_INTERFACE_,name()); sc_abort(); // can't recover from here } return *m_interface_p; } operator const IF&() const { return *const_cast(this); } public: // binding: SC_VIRTUAL_ void bind( IF& interface_ ) { if ( m_interface_p ) { SC_REPORT_ERROR(SC_ID_SC_EXPORT_ALREADY_BOUND_,name()); return; } m_interface_p = &interface_; } void operator () ( IF& interface_ ) { this->bind(interface_); } public: // identification: virtual const char* kind() const { return "sc_export"; } // return RTTI information of associated interface virtual sc_type_index get_interface_type() const { return typeid( IF ); } private: // disabled sc_export( const this_type& ); this_type& operator = ( const this_type& ); protected: // data fields: IF* m_interface_p; // Interface this port provides. }; // ---------------------------------------------------------------------------- // CLASS : sc_export_registry // // Registry for all exports. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- class sc_export_registry { friend class sc_simcontext; public: void insert( sc_export_base* ); void remove( sc_export_base* ); int size() const { return static_cast(m_export_vec.size()); } private: // constructor explicit sc_export_registry( sc_simcontext& simc_ ); // destructor ~sc_export_registry(); // called when construction is done bool construction_done(); // called when elaboration is done void elaboration_done(); // called before simulation starts void start_simulation(); // called after simulation ends void simulation_done(); private: int m_construction_done; std::vector m_export_vec; sc_simcontext* m_simc; private: // disabled sc_export_registry(); sc_export_registry( const sc_export_registry& ); sc_export_registry& operator = ( const sc_export_registry& ); }; } // namespace sc_core #undef SC_VIRTUAL_ // $Log: sc_export.h,v $ // Revision 1.7 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.6 2011/05/09 04:07:37 acg // Philipp A. Hartmann: // (1) Restore hierarchy in all phase callbacks. // (2) Ensure calls to before_end_of_elaboration. // // Revision 1.5 2011/04/02 00:02:14 acg // Philipp A. Hartmann: add const overload for sc_export::operator IF& // // Revision 1.4 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.3 2011/02/14 17:50:16 acg // Andy Goodrich: testing for sc_port and sc_export instantiations during // end of elaboration and issuing appropriate error messages. // // Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_ports.cpp0000644000175000017500000002646114342422106023410 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_ports.cpp -- The sc_signal port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-08-20 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_signal_ports.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/utils/sc_utils_ids.h" namespace sc_core { template class SC_API sc_port,1,SC_ONE_OR_MORE_BOUND>; template class SC_API sc_port,1,SC_ONE_OR_MORE_BOUND>; template class SC_API sc_port,1,SC_ONE_OR_MORE_BOUND>; template class SC_API sc_port,1,SC_ONE_OR_MORE_BOUND>; // ---------------------------------------------------------------------------- // CLASS : sc_in // // Specialization of sc_in for type bool. // ---------------------------------------------------------------------------- // called when elaboration is done void sc_in::end_of_elaboration() { if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace void sc_in::add_trace_internal(sc_trace_file* tf_, const std::string& name_) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } void sc_in::add_trace(sc_trace_file* tf_, const std::string& name_) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } void sc_in::remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } // called by pbind (for internal use only) int sc_in::vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } int sc_in::vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // ---------------------------------------------------------------------------- // CLASS : sc_in // // Specialization of sc_in for type sc_logic. // ---------------------------------------------------------------------------- // called when elaboration is done void sc_in::end_of_elaboration() { if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace void sc_in::add_trace_internal( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } void sc_in::add_trace( sc_trace_file* tf_, const std::string& name_ ) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } void sc_in::remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } // called by pbind (for internal use only) int sc_in::vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } int sc_in::vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // ---------------------------------------------------------------------------- // CLASS : sc_inout // // Specialization of sc_inout for type bool. // ---------------------------------------------------------------------------- // destructor sc_inout::~sc_inout() { delete m_change_finder_p; delete m_neg_finder_p; delete m_pos_finder_p; delete m_init_val; remove_traces(); } // set initial value (can also be called when port is not bound yet) void sc_inout::initialize( const data_type& value_ ) { inout_if_type* iface = dynamic_cast( get_interface() ); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val == 0 ) { m_init_val = new data_type; } *m_init_val = value_; } } // called when elaboration is done void sc_inout::end_of_elaboration() { if( m_init_val != 0 ) { write( *m_init_val ); delete m_init_val; m_init_val = 0; } if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace void sc_inout::add_trace_internal( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } void sc_inout::add_trace( sc_trace_file* tf_, const std::string& name_ ) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } void sc_inout::remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } // ---------------------------------------------------------------------------- // CLASS : sc_inout // // Specialization of sc_inout for type sc_dt::sc_logic. // ---------------------------------------------------------------------------- // destructor sc_inout::~sc_inout() { delete m_change_finder_p; delete m_neg_finder_p; delete m_pos_finder_p; delete m_init_val; remove_traces(); } // set initial value (can also be called when port is not bound yet) void sc_inout::initialize( const data_type& value_ ) { inout_if_type* iface = dynamic_cast( get_interface() ); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val == 0 ) { m_init_val = new data_type; } *m_init_val = value_; } } // called when elaboration is done void sc_inout::end_of_elaboration() { if( m_init_val != 0 ) { write( *m_init_val ); delete m_init_val; m_init_val = 0; } if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace void sc_inout::add_trace_internal( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } void sc_inout::add_trace( sc_trace_file* tf_, const std::string& name_ ) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } void sc_inout::remove_traces() const { if( m_traces != 0 ) { for( int i = m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } void sc_deprecated_add_trace() { static bool warn_add_trace_deprecated=true; if ( warn_add_trace_deprecated ) { warn_add_trace_deprecated=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "sc_signal::addtrace() is deprecated"); } } } // namespace sc_core // $Log: sc_signal_ports.cpp,v $ // Revision 1.3 2011/08/26 20:45:43 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.8 2006/05/08 17:52:47 acg // Andy Goodrich: // (1) added David Long's forward declarations for friend functions, // methods, and operators to keep the Microsoft compiler happy. // (2) Added delta_count() method to sc_prim_channel for use by // sc_signal so that the friend declaration in sc_simcontext.h // can be for a non-templated class (i.e., sc_prim_channel.) // // Revision 1.7 2006/04/18 18:01:26 acg // Andy Goodrich: added an add_trace_internal() method to the various port // classes so that sc_trace has something to call that won't emit an // IEEE 1666 deprecation message. // // Revision 1.6 2006/02/02 23:42:37 acg // Andy Goodrich: implemented a much better fix to the sc_event_finder // proliferation problem. This new version allocates only a single event // finder for each port for each type of event, e.g., pos(), neg(), and // value_change(). The event finder persists as long as the port does, // which is what the LRM dictates. Because only a single instance is // allocated for each event type per port there is not a potential // explosion of storage as was true in the 2.0.1/2.1 versions. // // Revision 1.5 2006/01/25 00:31:11 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.4 2006/01/24 20:46:32 acg // Andy Goodrich: changes to eliminate use of deprecated features. For instance, // using notify(SC_ZERO_TIME) in place of notify_delayed(). // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_rv.h0000644000175000017500000001464214342422106022333 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_rv.h -- The resolved vector signal class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_RV_H #define SC_SIGNAL_RV_H #include "sysc/communication/sc_signal.h" #include "sysc/datatypes/bit/sc_lv.h" namespace sc_core { class sc_process_b; // ---------------------------------------------------------------------------- // CLASS sc_lv_resolve // // Resolution function for sc_dt::sc_lv. // ---------------------------------------------------------------------------- extern SC_API const sc_dt::sc_logic_value_t sc_logic_resolution_tbl[4][4]; template class sc_lv_resolve { public: // resolves sc_dt::sc_lv values and returns the resolved value static void resolve(sc_dt::sc_lv&, const std::vector*>&); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // resolves sc_dt::sc_lv values and returns the resolved value template inline void sc_lv_resolve::resolve( sc_dt::sc_lv& result_, const std::vector*>& values_ ) { int sz = values_.size(); sc_assert( sz != 0 ); if( sz == 1 ) { result_ = *values_[0]; return; } for( int j = result_.length() - 1; j >= 0; -- j ) { sc_dt::sc_logic_value_t res = (*values_[0])[j].value(); for( int i = sz - 1; i > 0 && res != 3; -- i ) { res = sc_logic_resolution_tbl[res][(*values_[i])[j].value()]; } result_[j] = res; } } // ---------------------------------------------------------------------------- // CLASS : sc_signal_rv // // The resolved vector signal class. // ---------------------------------------------------------------------------- template class sc_signal_rv : public sc_signal, SC_MANY_WRITERS> { public: // typedefs typedef sc_signal_rv this_type; typedef sc_signal, SC_MANY_WRITERS> base_type; typedef sc_dt::sc_lv value_type; public: // constructors sc_signal_rv() : base_type( sc_gen_unique_name( "signal_rv" ) ) {} explicit sc_signal_rv( const char* name_ ) : base_type( name_, value_type() ) {} sc_signal_rv( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) {} // destructor virtual ~sc_signal_rv(); // interface methods virtual void register_port( sc_port_base&, const char* ) {} // write the new value virtual void write( const value_type& ); // other methods virtual const char* kind() const { return "sc_signal_rv"; } // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } protected: virtual void update(); protected: std::vector m_proc_vec; // processes writing this signal std::vector m_val_vec; // new values written this signal private: // disabled sc_signal_rv( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // destructor template inline sc_signal_rv::~sc_signal_rv() { for( int i = m_val_vec.size() - 1; i >= 0; -- i ) { delete m_val_vec[i]; } } // write the new value template inline void sc_signal_rv::write( const value_type& value_ ) { sc_process_b* cur_proc = sc_get_current_process_b(); bool value_changed = false; bool found = false; for( int i = m_proc_vec.size() - 1; i >= 0; -- i ) { if( cur_proc == m_proc_vec[i] ) { if( value_ != *m_val_vec[i] ) { *m_val_vec[i] = value_; value_changed = true; } found = true; break; } } if( ! found ) { m_proc_vec.push_back( cur_proc ); m_val_vec.push_back( new value_type( value_ ) ); value_changed = true; } if( value_changed ) { this->request_update(); } } template inline void sc_signal_rv::update() { sc_lv_resolve::resolve( this->m_new_val, m_val_vec ); base_type::update(); } } // namespace sc_core //$Log: sc_signal_rv.h,v $ //Revision 1.4 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.3 2011/04/19 02:36:26 acg // Philipp A. Hartmann: new aysnc_update and mutex support. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.3 2006/03/21 00:00:27 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:52 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_event_finder.cpp0000644000175000017500000000775614342422106023362 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_event_finder.cpp -- Original Author: Martin Janssen, Synopsys, Inc. Stan Y. Liao, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_event_finder.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_event_finder // // Event finder base class. // ---------------------------------------------------------------------------- // error reporting void sc_event_finder::report_error( const char* id, const char* add_msg ) const { std::stringstream msg; if (add_msg != 0) msg << add_msg << ": "; msg << "port '" << m_port.name() << "' (" << m_port.kind() << ")"; SC_REPORT_ERROR( id, msg.str().c_str() ); } // constructor sc_event_finder::sc_event_finder( const sc_port_base& port_ ) : m_port( port_ ) { } // destructor (does nothing) sc_event_finder::~sc_event_finder() {} } // namespace sc_core // $Log: sc_event_finder.cpp,v $ // Revision 1.3 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.7 2006/02/02 23:42:37 acg // Andy Goodrich: implemented a much better fix to the sc_event_finder // proliferation problem. This new version allocates only a single event // finder for each port for each type of event, e.g., pos(), neg(), and // value_change(). The event finder persists as long as the port does, // which is what the LRM dictates. Because only a single instance is // allocated for each event type per port there is not a potential // explosion of storage as was true in the 2.0.1/2.1 versions. // // Revision 1.6 2006/02/02 21:26:34 acg // Andy Goodrich: pulled out the check I just stuck into the // sc_event_finder::free_instances() method. It turns out the LRM says that // sc_event_finder instances are valid as long as the sc_module hierarchy is // valid, so we can't give the user a call to free the instances. // // Revision 1.5 2006/02/02 21:10:52 acg // Andy Goodrich: added check for end of elaboration to the static method // sc_event_finder::free_instances(). This will allow the method to be // made public if that is desired. // // Revision 1.4 2006/02/02 20:43:09 acg // Andy Goodrich: Added an existence linked list to sc_event_finder so that // the dynamically allocated instances can be freed after port binding // completes. This replaces the individual deletions in ~sc_bind_ef, as these // caused an exception if an sc_event_finder instance was used more than // once, due to a double freeing of the instance. // // Revision 1.3 2006/01/13 18:47:41 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_ifs.h0000644000175000017500000001765414342422106022473 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_ifs.h -- The sc_signal interface classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_IFS_H #define SC_SIGNAL_IFS_H #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_writer_policy.h" namespace sc_dt { class SC_API sc_logic; } namespace sc_core { class sc_signal_bool_deval; class sc_signal_logic_deval; // ---------------------------------------------------------------------------- // CLASS : sc_signal_in_if // // The sc_signal input interface class. // ---------------------------------------------------------------------------- template class sc_signal_in_if : virtual public sc_interface { public: // get the value changed event virtual const sc_event& value_changed_event() const = 0; // read the current value virtual const T& read() const = 0; // get a reference to the current value (for tracing) virtual const T& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const sc_signal_in_if& ); sc_signal_in_if& operator = ( const sc_signal_in_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_signal_in_if // // Specialization of sc_signal_in_if for type bool. // ---------------------------------------------------------------------------- class SC_API sc_reset; template <> class sc_signal_in_if : virtual public sc_interface { friend class sc_reset; public: // get the value changed event virtual const sc_event& value_changed_event() const = 0; // get the positive edge event virtual const sc_event& posedge_event() const = 0; // get the negative edge event virtual const sc_event& negedge_event() const = 0; // read the current value virtual const bool& read() const = 0; // get a reference to the current value (for tracing) virtual const bool& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; // was there a positive edge event? virtual bool posedge() const = 0; // was there a negative edge event? virtual bool negedge() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const sc_signal_in_if& ); sc_signal_in_if& operator = ( const sc_signal_in_if& ); // designate this object as a reset signal virtual sc_reset* is_reset() const { return NULL; } }; // ---------------------------------------------------------------------------- // CLASS : sc_signal_in_if // // Specialization of sc_signal_in_if for type sc_dt::sc_logic. // ---------------------------------------------------------------------------- template <> class SC_API sc_signal_in_if : virtual public sc_interface { public: // get the value changed event virtual const sc_event& value_changed_event() const = 0; // get the positive edge event virtual const sc_event& posedge_event() const = 0; // get the negative edge event virtual const sc_event& negedge_event() const = 0; // read the current value virtual const sc_dt::sc_logic& read() const = 0; // get a reference to the current value (for tracing) virtual const sc_dt::sc_logic& get_data_ref() const = 0; // was there a value changed event? virtual bool event() const = 0; // was there a positive edge event? virtual bool posedge() const = 0; // was there a negative edge event? virtual bool negedge() const = 0; protected: // constructor sc_signal_in_if() {} private: // disabled sc_signal_in_if( const sc_signal_in_if& ); sc_signal_in_if& operator = ( const sc_signal_in_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_signal_write_if // // The standard output interface class. // ---------------------------------------------------------------------------- template< typename T > class sc_signal_write_if : public virtual sc_interface { public: sc_signal_write_if() {} // write the new value virtual void write( const T& ) = 0; virtual sc_writer_policy get_writer_policy() const { return SC_DEFAULT_WRITER_POLICY; } private: // disabled sc_signal_write_if( const sc_signal_write_if& ); sc_signal_write_if& operator = ( const sc_signal_write_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_signal_inout_if // // The sc_signal input/output interface class. // ---------------------------------------------------------------------------- template class sc_signal_inout_if : public sc_signal_in_if, public sc_signal_write_if { protected: // constructor sc_signal_inout_if() {} private: // disabled sc_signal_inout_if( const sc_signal_inout_if& ); sc_signal_inout_if& operator = ( const sc_signal_inout_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_signal_out_if // // The sc_signal output interface class. // ---------------------------------------------------------------------------- // sc_signal_out_if can also be read from, hence no difference with // sc_signal_inout_if. #define sc_signal_out_if sc_signal_inout_if } // namespace sc_core //$Log: sc_signal_ifs.h,v $ //Revision 1.4 2011/08/26 20:45:43 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2010/12/07 19:50:37 acg // Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.4 2006/08/29 23:35:00 acg // Andy Goodrich: added bind_count() method to allow users to determine which // ports are connected in before_end_of_elaboration(). // //Revision 1.3 2006/04/11 23:11:57 acg // Andy Goodrich: Changes for reset support that only includes // sc_cthread_process instances. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/29 18:12:12 acg //Added $log. // //Revision 1.8 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_fifo.h0000644000175000017500000002522414342422106021270 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fifo.h -- The sc_fifo primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_FIFO_H #define SC_FIFO_H #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_fifo_ifs.h" #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/tracing/sc_trace.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_fifo // // The sc_fifo primitive channel class. // ---------------------------------------------------------------------------- template class sc_fifo : public sc_fifo_in_if, public sc_fifo_out_if, public sc_prim_channel { public: // constructors explicit sc_fifo( int size_ = 16 ) : sc_prim_channel( sc_gen_unique_name( "fifo" ) ), m_data_read_event( sc_event::kernel_event, "read_event" ), m_data_written_event( sc_event::kernel_event, "write_event" ) { init( size_ ); } explicit sc_fifo( const char* name_, int size_ = 16 ) : sc_prim_channel( name_ ), m_data_read_event( sc_event::kernel_event, "read_event" ), m_data_written_event( sc_event::kernel_event, "write_event" ) { init( size_ ); } // destructor virtual ~sc_fifo() { delete [] m_buf; } // interface methods virtual void register_port( sc_port_base&, const char* ); // blocking read virtual void read( T& ); virtual T read(); // non-blocking read virtual bool nb_read( T& ); // get the number of available samples virtual int num_available() const { return ( m_num_readable - m_num_read ); } // get the data written event virtual const sc_event& data_written_event() const { return m_data_written_event; } // blocking write virtual void write( const T& ); // non-blocking write virtual bool nb_write( const T& ); // get the number of free spaces virtual int num_free() const { return ( m_size - m_num_readable - m_num_written ); } // get the data read event virtual const sc_event& data_read_event() const { return m_data_read_event; } // other methods operator T () { return read(); } sc_fifo& operator = ( const T& a ) { write( a ); return *this; } void trace( sc_trace_file* tf ) const; virtual void print( ::std::ostream& = ::std::cout ) const; virtual void dump( ::std::ostream& = ::std::cout ) const; virtual const char* kind() const { return "sc_fifo"; } protected: virtual void update(); // support methods void init( int ); void buf_init( int ); bool buf_write( const T& ); bool buf_read( T& ); protected: int m_size; // size of the buffer T* m_buf; // the buffer int m_free; // number of free spaces int m_ri; // index of next read int m_wi; // index of next write sc_port_base* m_reader; // used for static design rule checking sc_port_base* m_writer; // used for static design rule checking int m_num_readable; // #samples readable int m_num_read; // #samples read during this delta cycle int m_num_written; // #samples written during this delta cycle sc_event m_data_read_event; sc_event m_data_written_event; private: // disabled sc_fifo( const sc_fifo& ); sc_fifo& operator = ( const sc_fifo& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII template inline void sc_fifo::register_port( sc_port_base& port_, const char* if_typename_ ) { std::string nm( if_typename_ ); if( nm == typeid( sc_fifo_in_if ).name() || nm == typeid( sc_fifo_blocking_in_if ).name() ) { // only one reader can be connected if( m_reader != 0 ) { SC_REPORT_ERROR( SC_ID_MORE_THAN_ONE_FIFO_READER_, 0 ); // may continue, if suppressed } m_reader = &port_; } else if( nm == typeid( sc_fifo_out_if ).name() || nm == typeid( sc_fifo_blocking_out_if ).name() ) { // only one writer can be connected if( m_writer != 0 ) { SC_REPORT_ERROR( SC_ID_MORE_THAN_ONE_FIFO_WRITER_, 0 ); // may continue, if suppressed } m_writer = &port_; } else { SC_REPORT_ERROR( SC_ID_BIND_IF_TO_PORT_, "sc_fifo port not recognized" ); // may continue, if suppressed } } // blocking read template inline void sc_fifo::read( T& val_ ) { while( num_available() == 0 ) { sc_core::wait( m_data_written_event ); } bool read_success = sc_fifo::nb_read(val_); sc_assert( read_success ); } template inline T sc_fifo::read() { T tmp; read( tmp ); return tmp; } // non-blocking read template inline bool sc_fifo::nb_read( T& val_ ) { if( num_available() == 0 ) { return false; } bool read_success = buf_read( val_ ); if( SC_LIKELY_(read_success) ) { m_num_read ++; request_update(); } return read_success; } // blocking write template inline void sc_fifo::write( const T& val_ ) { while( num_free() == 0 ) { sc_core::wait( m_data_read_event ); } bool write_success = sc_fifo::nb_write(val_); sc_assert( write_success ); } // non-blocking write template inline bool sc_fifo::nb_write( const T& val_ ) { if( num_free() == 0 ) { return false; } bool write_success = buf_write( val_ ); if( SC_LIKELY_(write_success) ) { m_num_written ++; request_update(); } return write_success; } template inline void sc_fifo::trace( sc_trace_file* tf ) const { (void) tf; /* ignore potentially unused parameter */ #if defined(DEBUG_SYSTEMC) char buf[32]; std::string nm = name(); for( int i = 0; i < m_size; ++ i ) { std::sprintf( buf, "_%d", i ); sc_trace( tf, m_buf[i], nm + buf ); } #endif } template inline void sc_fifo::print( ::std::ostream& os ) const { if( m_free != m_size ) { int i = m_ri; do { os << m_buf[i] << ::std::endl; i = ( i + 1 ) % m_size; } while( i != m_wi ); } } template inline void sc_fifo::dump( ::std::ostream& os ) const { os << "name = " << name() << ::std::endl; if( m_free != m_size ) { int i = m_ri; int j = 0; do { os << "value[" << i << "] = " << m_buf[i] << ::std::endl; i = ( i + 1 ) % m_size; j ++; } while( i != m_wi ); } } template inline void sc_fifo::update() { if( m_num_read > 0 ) { m_data_read_event.notify(SC_ZERO_TIME); } if( m_num_written > 0 ) { m_data_written_event.notify(SC_ZERO_TIME); } m_num_readable = m_size - m_free; m_num_read = 0; m_num_written = 0; } // support methods template inline void sc_fifo::init( int size_ ) { buf_init( size_ ); m_reader = 0; m_writer = 0; m_num_readable = 0; m_num_read = 0; m_num_written = 0; } template inline void sc_fifo::buf_init( int size_ ) { if( size_ <= 0 ) { SC_REPORT_ERROR( SC_ID_INVALID_FIFO_SIZE_, 0 ); return; } m_size = size_; m_buf = new T[m_size]; m_free = m_size; m_ri = 0; m_wi = 0; } template inline bool sc_fifo::buf_write( const T& val_ ) { if( m_free == 0 ) { return false; } m_buf[m_wi] = val_; m_wi = ( m_wi + 1 ) % m_size; m_free --; return true; } template inline bool sc_fifo::buf_read( T& val_ ) { if( m_free == m_size ) { return false; } val_ = m_buf[m_ri]; m_buf[m_ri] = T(); // clear entry for boost::shared_ptr, et al. m_ri = ( m_ri + 1 ) % m_size; m_free ++; return true; } // ---------------------------------------------------------------------------- template inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fifo& a ) { a.print( os ); return os; } } // namespace sc_core //$Log: sc_fifo.h,v $ //Revision 1.6 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.5 2011/03/23 16:17:22 acg // Andy Goodrich: hide the sc_events that are kernel related. // //Revision 1.4 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.3 2009/10/14 19:05:40 acg // Andy Goodrich: added check for blocking interfaces in addition to the // combined blocking/nonblocking interface. // //Revision 1.2 2009/05/22 16:06:24 acg // Andy Goodrich: process control updates. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.4 2006/01/24 20:46:31 acg //Andy Goodrich: changes to eliminate use of deprecated features. For instance, //using notify(SC_ZERO_TIME) in place of notify_delayed(). // //Revision 1.3 2006/01/13 20:41:59 acg //Andy Goodrich: Changes to add port registration to the things that are //checked when SC_NO_WRITE_CHECK is not defined. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.12 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.11 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_host_mutex.h0000644000175000017500000001205614342422106022543 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_host_mutex.h -- A "real" mutex for the underlying host system Original Author: Philipp A. Hartmann, OFFIS CHANGE LOG AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_HOST_MUTEX_H_INCLUDED_ #define SC_HOST_MUTEX_H_INCLUDED_ #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/communication/sc_mutex_if.h" #if SC_CPLUSPLUS >= 201103L # include #elif !defined(WIN32) && !defined(_WIN32) // use pthread mutex # include #else // use Windows critical section # ifndef SC_INCLUDE_WINDOWS_H # define SC_INCLUDE_WINDOWS_H // include Windows.h, if needed # include "sysc/kernel/sc_cmnhdr.h" # endif #endif // SC_CPLUSPLUS #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) # pragma warning(push) # pragma warning(disable: 4251) // DLL import for std::mutex #endif namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_host_mutex // // The sc_host_mutex class, wrapping an OS mutex on the simulation host // ---------------------------------------------------------------------------- class SC_API sc_host_mutex : public sc_mutex_if { #if SC_CPLUSPLUS >= 201103L typedef std::mutex underlying_type; void do_init() { /* no-op */ } void do_lock() { m_mtx.lock(); } bool do_trylock() { return m_mtx.try_lock(); } void do_unlock() { m_mtx.unlock(); } void do_destroy() { /* no-op */ } #elif defined(WIN32) || defined(_WIN32) // use CRITICAL_SECTION on Windows typedef CRITICAL_SECTION underlying_type; void do_init() { InitializeCriticalSection( &m_mtx ); } void do_lock() { EnterCriticalSection( &m_mtx ); } bool do_trylock() { return ( TryEnterCriticalSection( &m_mtx ) != 0 ); } void do_unlock() { LeaveCriticalSection( &m_mtx ); } void do_destroy() { DeleteCriticalSection( &m_mtx ); } #else // use pthread mutex # if defined(__hpux) # define SC_PTHREAD_NULL_ cma_c_null # else // !defined(__hpux) # define SC_PTHREAD_NULL_ NULL # endif typedef pthread_mutex_t underlying_type; void do_init() { pthread_mutex_init( &m_mtx, SC_PTHREAD_NULL_ ); } void do_lock() { pthread_mutex_lock( &m_mtx ); } # ifdef _XOPEN_SOURCE bool do_trylock() { return ( pthread_mutex_trylock( &m_mtx ) == 0 ); } # else bool do_trylock() { return /* not supported */ false; } # endif void do_unlock() { pthread_mutex_unlock( &m_mtx ); } void do_destroy() { pthread_mutex_destroy( &m_mtx ); } # undef SC_PTHREAD_NULL_ #endif // platform-specific implementation public: // constructors and destructor sc_host_mutex() : m_mtx() { do_init(); } virtual ~sc_host_mutex() { do_destroy(); } // interface methods // blocks until mutex could be locked virtual int lock() { do_lock(); return 0; } // returns -1 if mutex could not be locked virtual int trylock() { return do_trylock() ? 0 : -1; } // should return -1 if mutex was not locked by caller, // but is not yet able to check this virtual int unlock() { do_unlock(); return 0; } private: underlying_type m_mtx; }; } // namespace sc_core #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) # pragma warning(pop) #endif /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ //$Log: sc_host_mutex.h,v $ //Revision 1.4 2011/08/30 21:53:23 acg // Jerome Cornet: include window.h for gnu c in windows case. // //Revision 1.3 2011/08/07 19:08:01 acg // Andy Goodrich: moved logs to end of file so line number synching works // better between versions. // //Revision 1.2 2011/06/25 17:08:38 acg // Andy Goodrich: Jerome Cornet's changes to use libtool to build the // library. // //Revision 1.1 2011/04/18 19:04:11 acg // Philipp A. Hartmann: first check in of file. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_clock.cpp0000644000175000017500000003203414342422106021770 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_clock.cpp -- The clock channel. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ // using notify_delayed(). // // Revision 1.4 2006/01/18 21:42:26 acg // Andy Goodrich: Changes for check writer support, and tightening up sc_clock // port usage. // // Revision 1.3 2006/01/13 18:47:41 acg // Added $Log command so that CVS comments are reproduced in the source. // #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) // disable warning about explicit instantiation of sc_signal // without implementation in this translation unit (-> sc_signal.cpp) #pragma warning(disable:4661) #endif #include "sysc/communication/sc_clock.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_spawn.h" #include "sysc/utils/sc_utils_ids.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_clock // // The clock channel. // ---------------------------------------------------------------------------- // constructors sc_clock::sc_clock() : base_type( sc_gen_unique_name( "clock" ) ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { init( sc_time::from_value(simcontext()->m_time_params->default_time_unit), 0.5, SC_ZERO_TIME, true ); m_next_posedge_event.notify_internal( m_start_time ); } sc_clock::sc_clock( const char* name_ ) : base_type( name_ ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { init( sc_time::from_value(simcontext()->m_time_params->default_time_unit), 0.5, SC_ZERO_TIME, true ); m_next_posedge_event.notify_internal( m_start_time ); } sc_clock::sc_clock( const char* name_, const sc_time& period_, double duty_cycle_, const sc_time& start_time_, bool posedge_first_ ) : base_type( name_ ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { init( period_, duty_cycle_, start_time_, posedge_first_ ); if( posedge_first_ ) { // posedge first m_next_posedge_event.notify_internal( m_start_time ); } else { // negedge first m_next_negedge_event.notify_internal( m_start_time ); } } sc_clock::sc_clock( const char* name_, double period_v_, sc_time_unit period_tu_, double duty_cycle_ ) : base_type( name_ ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { init( sc_time( period_v_, period_tu_, simcontext() ), duty_cycle_, SC_ZERO_TIME, true ); // posedge first m_next_posedge_event.notify_internal( m_start_time ); } sc_clock::sc_clock( const char* name_, double period_v_, sc_time_unit period_tu_, double duty_cycle_, double start_time_v_, sc_time_unit start_time_tu_, bool posedge_first_ ) : base_type( name_ ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { init( sc_time( period_v_, period_tu_, simcontext() ), duty_cycle_, sc_time( start_time_v_, start_time_tu_, simcontext() ), posedge_first_ ); if( posedge_first_ ) { // posedge first m_next_posedge_event.notify_internal( m_start_time ); } else { // negedge first m_next_negedge_event.notify_internal( m_start_time ); } } // for backward compatibility with 1.0 sc_clock::sc_clock( const char* name_, double period_, // in default time units double duty_cycle_, double start_time_, // in default time units bool posedge_first_ ) : base_type( name_ ), m_period(), m_duty_cycle(), m_start_time(), m_posedge_first(), m_posedge_time(), m_negedge_time(), m_next_posedge_event( sc_event::kernel_event, "next_posedge_event" ), m_next_negedge_event( sc_event::kernel_event, "next_negedge_event" ) { static bool warn_sc_clock=true; if ( warn_sc_clock ) { warn_sc_clock = false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "\n sc_clock(const char*, double, double, double, bool)\n" " is deprecated use a form that includes sc_time or\n" " sc_time_unit"); } sc_time default_time = sc_time::from_value( simcontext()->m_time_params->default_time_unit ); init( ( period_ * default_time ), duty_cycle_, ( start_time_ * default_time ), posedge_first_ ); if( posedge_first_ ) { // posedge first m_next_posedge_event.notify_internal( m_start_time ); } else { // negedge first m_next_negedge_event.notify_internal( m_start_time ); } } //------------------------------------------------------------------------------ //"sc_clock::before_end_of_elaboration" // // This callback is used to spawn the edge processes for this object instance. // The processes are created here rather than the constructor for the object // so that the processes are registered with the global simcontext rather // than the scope of the clock's parent. //------------------------------------------------------------------------------ #if ( defined(_MSC_VER) && _MSC_VER < 1300 ) //VC++6.0 doesn't support sc_spawn with functor. # define sc_clock_posedge_callback(ptr) sc_clock_posedge_callback # define sc_clock_negedge_callback(ptr) sc_clock_negedge_callback # define sc_spawn(a,b,c) { \ sc_process_handle result(new sc_spawn_object(a(this),b,c)); \ } #endif // ( defined(_MSC_VER) && _MSC_VER < 1300 ) void sc_clock::before_end_of_elaboration() { std::string gen_base; sc_spawn_options posedge_options; // Options for posedge process. sc_spawn_options negedge_options; // Options for negedge process. posedge_options.spawn_method(); posedge_options.dont_initialize(); posedge_options.set_sensitivity(&m_next_posedge_event); gen_base = basename(); gen_base += "_posedge_action"; sc_spawn(sc_clock_posedge_callback(this), sc_gen_unique_name( gen_base.c_str() ), &posedge_options); negedge_options.spawn_method(); negedge_options.dont_initialize(); negedge_options.set_sensitivity(&m_next_negedge_event); gen_base = basename(); gen_base += "_negedge_action"; sc_spawn( sc_clock_negedge_callback(this), sc_gen_unique_name( gen_base.c_str() ), &negedge_options ); } //clear VC++6.0 macros #undef sc_clock_posedge_callback #undef sc_clock_negedge_callback #undef sc_spawn // destructor (does nothing) sc_clock::~sc_clock() {} void sc_clock::register_port( sc_port_base& /*port*/, const char* if_typename_ ) { std::string nm( if_typename_ ); if( nm == typeid( sc_signal_inout_if ).name() ) { report_error(SC_ID_ATTEMPT_TO_BIND_CLOCK_TO_OUTPUT_); // may continue, if suppressed } } void sc_clock::write( const bool& /* value */ ) { report_error(SC_ID_ATTEMPT_TO_WRITE_TO_CLOCK_); // may continue, if suppressed } // interface methods // get the current time const sc_time& sc_clock::time_stamp() { return sc_time_stamp(); } // error reporting void sc_clock::report_error( const char* id, const char* add_msg ) const { std::stringstream msg; if( add_msg != 0 ) msg << add_msg << ": "; msg << "clock '" << name() << "'"; SC_REPORT_ERROR( id, msg.str().c_str() ); } void sc_clock::init( const sc_time& period_, double duty_cycle_, const sc_time& start_time_, bool posedge_first_ ) { if( period_ == SC_ZERO_TIME ) { report_error( SC_ID_CLOCK_PERIOD_ZERO_, "increase the period" ); // may continue, if suppressed } m_period = period_; m_posedge_first = posedge_first_; if( duty_cycle_ <= 0.0 || duty_cycle_ >= 1.0 ) { m_duty_cycle = 0.5; } else { m_duty_cycle = duty_cycle_; } m_negedge_time = m_period * m_duty_cycle; m_posedge_time = m_period - m_negedge_time; if( m_negedge_time == SC_ZERO_TIME ) { report_error( SC_ID_CLOCK_HIGH_TIME_ZERO_, "increase the period or increase the duty cycle" ); // may continue, if suppressed } if( m_posedge_time == SC_ZERO_TIME ) { report_error( SC_ID_CLOCK_LOW_TIME_ZERO_, "increase the period or decrease the duty cycle" ); // may continue, if suppressed } if( posedge_first_ ) { this->m_cur_val = false; this->m_new_val = false; } else { this->m_cur_val = true; this->m_new_val = true; } m_start_time = start_time_; } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Bishnupriya Bhattacharya, Cadence Design Systems, Andy Goodrich, Forte Design Systems, 3 October, 2003 Description of Modification: sc_clock inherits from sc_signal only instead of sc_signal_in_if and sc_module. The 2 methods posedge_action() and negedge_action() are created using sc_spawn(). boost::bind() is not required, instead a local bind function can be used since the signatures of the spawned functions are statically known. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_clock.cpp,v $ // Revision 1.7 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.6 2011/08/24 22:05:35 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.5 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.4 2011/03/12 21:07:42 acg // Andy Goodrich: changes to kernel generated event support. // // Revision 1.3 2011/03/06 15:55:08 acg // Andy Goodrich: Changes for named events. // // Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.8 2006/04/18 23:36:50 acg // Andy Goodrich: made add_trace_internal public until I can figure out // how to do a friend specification for sc_trace in an environment where // there are partial template and full template specifications for its // arguments. // // Revision 1.7 2006/04/17 16:38:42 acg // Andy Goodrich: added more context to the deprecation message for the // sc_clock constructor. // // Revision 1.6 2006/01/25 00:31:11 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.5 2006/01/24 20:43:24 acg // Andy Goodrich: convert notify_delayed() calls into notify_internal() calls. // notify_internal() is an implementation dependent version of notify_delayed() // that is simpler, and does not trigger the deprecation warning one would get // Taf! systemc-2.3.4/src/sysc/communication/sc_export.cpp0000644000175000017500000001707714342422106022230 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_export.cpp -- Original Author: Bishnupriya Bhattachary, Cadence, Design Systems, 25 August, 2003 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_export.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_module.h" #include "sysc/kernel/sc_object_int.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_export_base // // ---------------------------------------------------------------------------- sc_export_base::sc_export_base() : sc_object(sc_gen_unique_name("export")) { simcontext()->get_export_registry()->insert(this); } sc_export_base::sc_export_base(const char* name_) : sc_object(name_) { simcontext()->get_export_registry()->insert(this); } sc_export_base::~sc_export_base() { simcontext()->get_export_registry()->remove(this); } // called by construction_done() (does nothing by default) void sc_export_base::before_end_of_elaboration() { } // called when construction is done void sc_export_base::construction_done() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); before_end_of_elaboration(); } // called by elaboration_done() (does nothing by default) void sc_export_base::end_of_elaboration() {} // called when elaboration is done void sc_export_base::elaboration_done() { if ( get_interface() == 0 ) { report_error( SC_ID_COMPLETE_BINDING_, "export not bound" ); // may continue, if suppressed } sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); end_of_elaboration(); } // called by start_simulation (does nothing) void sc_export_base::start_of_simulation() {} // called before simulation starts void sc_export_base::start_simulation() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); start_of_simulation(); } // called by simulation_done (does nothing) void sc_export_base::end_of_simulation() {} // called after simulation ends void sc_export_base::simulation_done() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); end_of_simulation(); } void sc_export_base::report_error( const char* id, const char* add_msg ) const { std::stringstream msg; if (add_msg != 0) msg << add_msg << ": "; msg << "export '" << name() << "' (" << kind() << ")"; SC_REPORT_ERROR( id, msg.str().c_str() ); } // ---------------------------------------------------------------------------- // CLASS : sc_export_registry // // Registry for all exports. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- void sc_export_registry::insert( sc_export_base* export_ ) { if( sc_is_running() ) { export_->report_error(SC_ID_INSERT_EXPORT_, "simulation running"); return; } if( m_simc->elaboration_done() ) { export_->report_error(SC_ID_INSERT_EXPORT_, "elaboration done"); return; } #ifdef DEBUG_SYSTEMC // check if port_ is already inserted for( int i = size() - 1; i >= 0; -- i ) { if( export_ == m_export_vec[i] ) { export_->report_error( SC_ID_INSERT_EXPORT_, "export already inserted "); return; } } #endif sc_module* curr_module = m_simc->hierarchy_curr(); if( curr_module == 0 ) { export_->report_error( SC_ID_EXPORT_OUTSIDE_MODULE_ ); return; } // insert m_export_vec.push_back( export_ ); } void sc_export_registry::remove( sc_export_base* export_ ) { if (size()==0) return; int i; for( i = size() - 1; i >= 0; -- i ) { if( export_ == m_export_vec[i] ) { break; } } if( i == -1 ) { export_->report_error( SC_ID_SC_EXPORT_NOT_REGISTERED_ ); return; } // remove m_export_vec[i] = m_export_vec.back(); m_export_vec.pop_back(); } // constructor sc_export_registry::sc_export_registry( sc_simcontext& simc_ ) : m_construction_done(0), m_export_vec(), m_simc( &simc_ ) { } // destructor sc_export_registry::~sc_export_registry() { } // called when construction is done bool sc_export_registry::construction_done() { if( m_construction_done == size() ) // nothing has been updated return true; for( int i = size()-1; i >= m_construction_done; --i ) { m_export_vec[i]->construction_done(); } m_construction_done = size(); return false; } // called when elaboration is done void sc_export_registry::elaboration_done() { for( int i = size() - 1; i >= 0; -- i ) { m_export_vec[i]->elaboration_done(); } } // called before simulation begins void sc_export_registry::start_simulation() { for( int i = size() - 1; i >= 0; -- i ) { m_export_vec[i]->start_simulation(); } } void sc_export_registry::simulation_done() { for( int i = size() - 1; i >= 0; -- i ) { m_export_vec[i]->simulation_done(); } } } // namespace sc_core // $Log: sc_export.cpp,v $ // Revision 1.8 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.7 2011/08/24 22:05:36 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.6 2011/05/09 04:07:37 acg // Philipp A. Hartmann: // (1) Restore hierarchy in all phase callbacks. // (2) Ensure calls to before_end_of_elaboration. // // Revision 1.5 2011/02/18 20:31:05 acg // Philipp A. Hartmann: added error messages for calls that cannot be done // after elaboration. // // Revision 1.4 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.3 2011/02/18 20:07:04 acg // Philipp A. Hartmann: Patch to revert to sprintf from snprintf to keep // some versions of MSVC happy. // // Revision 1.2 2011/02/14 17:50:16 acg // Andy Goodrich: testing for sc_port and sc_export instantiations during // end of elaboration and issuing appropriate error messages. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/01/26 21:00:50 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_ports.h0000644000175000017500000014146414342422106023056 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_ports.h -- The sc_signal port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG APPEARS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_PORTS_H #define SC_SIGNAL_PORTS_H #include "sysc/communication/sc_event_finder.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_signal_ifs.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/tracing/sc_trace.h" #if ! defined( SC_DISABLE_VIRTUAL_BIND ) # define SC_VIRTUAL_ virtual #else # define SC_VIRTUAL_ /* non-virtual */ #endif #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::string #endif namespace sc_core { // ---------------------------------------------------------------------------- // STRUCT : sc_trace_params // // Struct for storing the trace file and object name of an sc_trace call. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- extern SC_API void sc_deprecated_add_trace(); struct SC_API sc_trace_params { sc_trace_file* tf; std::string name; sc_trace_params( sc_trace_file* tf_, const std::string& name_ ) : tf( tf_ ), name( name_ ) {} }; typedef std::vector sc_trace_params_vec; // ---------------------------------------------------------------------------- // CLASS : sc_in // // The sc_signal input port class. // ---------------------------------------------------------------------------- template class sc_in : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef T data_type; typedef sc_signal_in_if if_type; typedef sc_port base_type; typedef sc_in this_type; typedef typename base_type::port_type base_port_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if inout_if_type; typedef sc_port inout_port_type; public: // constructors sc_in() : base_type(), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ), m_change_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0) {} // destructor virtual ~sc_in() { remove_traces(); delete m_change_finder_p; } // bind to in interface SC_VIRTUAL_ void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_ ) ); } SC_VIRTUAL_ void bind( in_if_type& interface_ ) { this->bind( const_cast( interface_ ) ); } void operator () ( const in_if_type& interface_ ) { this->bind( interface_ ); } // bind to parent in port SC_VIRTUAL_ void bind( in_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( in_port_type& parent_ ) { this->bind( parent_ ); } // bind to parent inout port SC_VIRTUAL_ void bind( inout_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( inout_port_type& parent_ ) { this->bind( parent_ ); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_in"; } void add_trace( sc_trace_file*, const std::string& ) const; // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; protected: // called by pbind (for internal use only) virtual int vbind( sc_interface& ); virtual int vbind( sc_port_base& ); // implement virtual base_type port-binding function // - avoids warnings on some compilers // - should only be called, when using sc_port_b explicitly // - errors are detected during elaboration SC_VIRTUAL_ void bind( base_port_type& parent_ ) { sc_port_base::bind( parent_ ); } private: mutable sc_event_finder* m_change_finder_p; private: // disabled sc_in( const this_type& ); this_type& operator = ( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; template ::std::ostream& operator << ( ::std::ostream& os, const sc_in& a ) { return os << a->read(); } // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // called when elaboration is done template inline void sc_in::end_of_elaboration() { if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( this->get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace template inline void sc_in::add_trace_internal( sc_trace_file* tf_, const std::string& name_ ) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } template inline void sc_in::add_trace( sc_trace_file* tf_, const std::string& name_ ) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } template inline void sc_in::remove_traces() const { if( m_traces != 0 ) { for( int i = (int)m_traces->size() - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } // called by pbind (for internal use only) template inline int sc_in::vbind( sc_interface& interface_ ) { return sc_port_b::vbind( interface_ ); } template inline int sc_in::vbind( sc_port_base& parent_ ) { in_port_type* in_parent = dynamic_cast( &parent_ ); if( in_parent != 0 ) { sc_port_base::bind( *in_parent ); return 0; } inout_port_type* inout_parent = dynamic_cast( &parent_ ); if( inout_parent != 0 ) { sc_port_base::bind( *inout_parent ); return 0; } // type mismatch return 2; } // ---------------------------------------------------------------------------- // CLASS : sc_in // // Specialization of sc_in for type bool. // ---------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ sc_port,1,SC_ONE_OR_MORE_BOUND>; template <> class SC_API sc_in : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef bool data_type; typedef sc_signal_in_if if_type; typedef sc_port base_type; typedef sc_in this_type; typedef /* typename */ base_type::port_type base_port_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if inout_if_type; typedef sc_port inout_port_type; public: // constructors sc_in() : base_type(), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} #if defined(TESTING) sc_in( const this_type& parent_ ) : base_type( *(in_if_type*)parent_.get_interface() ) , m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} #endif sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} // destructor virtual ~sc_in() { remove_traces(); delete m_change_finder_p; delete m_neg_finder_p; delete m_pos_finder_p; } // bind to in interface SC_VIRTUAL_ void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_ ) ); } SC_VIRTUAL_ void bind( in_if_type& interface_ ) { this->bind( const_cast( interface_ ) ); } void operator () ( const in_if_type& interface_ ) { this->bind( interface_ ); } // bind to parent in port SC_VIRTUAL_ void bind( in_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( in_port_type& parent_ ) { this->bind( parent_ ); } // bind to parent inout port SC_VIRTUAL_ void bind( inout_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( inout_port_type& parent_ ) { this->bind( parent_ ); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // get the positive edge event const sc_event& posedge_event() const { return (*this)->posedge_event(); } // get the negative edge event const sc_event& negedge_event() const { return (*this)->negedge_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // use for positive edge sensitivity sc_event_finder& pos() const { return sc_event_finder::cached_create ( m_pos_finder_p, *this, &in_if_type::posedge_event ); } // use for negative edge sensitivity sc_event_finder& neg() const { return sc_event_finder::cached_create ( m_neg_finder_p, *this, &in_if_type::negedge_event ); } // was there a value changed event? bool event() const { return (*this)->event(); } // was there a positive edge event? bool posedge() const { return (*this)->posedge(); } // was there a negative edge event? bool negedge() const { return (*this)->negedge(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_in"; } void add_trace( sc_trace_file*, const std::string& ) const; // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; protected: // called by pbind (for internal use only) virtual int vbind( sc_interface& ); virtual int vbind( sc_port_base& ); // implement virtual base_type port-binding function // - avoids warnings on some compilers // - should only be called, when using sc_port_b explicitly // - errors are detected during elaboration SC_VIRTUAL_ void bind( base_port_type& parent_ ) { sc_port_base::bind( parent_ ); } private: mutable sc_event_finder* m_change_finder_p; mutable sc_event_finder* m_neg_finder_p; mutable sc_event_finder* m_pos_finder_p; private: // disabled #if defined(TESTING) #else sc_in( const this_type& ); #endif this_type& operator = ( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; // ---------------------------------------------------------------------------- // CLASS : sc_in // // Specialization of sc_in for type sc_dt::sc_logic. // ---------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ sc_port,1,SC_ONE_OR_MORE_BOUND>; template <> class SC_API sc_in : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef sc_dt::sc_logic data_type; typedef sc_signal_in_if if_type; typedef sc_port base_type; typedef sc_in this_type; typedef /* typename */ base_type::port_type base_port_type; typedef if_type in_if_type; typedef base_type in_port_type; typedef sc_signal_inout_if inout_if_type; typedef sc_port inout_port_type; public: // constructors sc_in() : base_type(), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( const char* name_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( const in_if_type& interface_ ) : base_type( const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_in( const char* name_, const in_if_type& interface_ ) : base_type( name_, const_cast( interface_ ) ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( in_port_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_in( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_in( inout_port_type& parent_ ) : base_type(), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( const char* name_, inout_port_type& parent_ ) : base_type( name_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) { sc_port_base::bind( parent_ ); } sc_in( this_type& parent_ ) : base_type( parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_in( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} // destructor virtual ~sc_in() { remove_traces(); delete m_change_finder_p; delete m_neg_finder_p; delete m_pos_finder_p; } // bind to in interface SC_VIRTUAL_ void bind( const in_if_type& interface_ ) { sc_port_base::bind( const_cast( interface_ ) ); } SC_VIRTUAL_ void bind( in_if_type& interface_ ) { this->bind( const_cast( interface_ ) ); } void operator () ( const in_if_type& interface_ ) { this->bind( interface_ ); } // bind to parent in port SC_VIRTUAL_ void bind( in_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( in_port_type& parent_ ) { this->bind( parent_ ); } // bind to parent inout port SC_VIRTUAL_ void bind( inout_port_type& parent_ ) { sc_port_base::bind( parent_ ); } void operator () ( inout_port_type& parent_ ) { this->bind( parent_ ); } // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // get the positive edge event const sc_event& posedge_event() const { return (*this)->posedge_event(); } // get the negative edge event const sc_event& negedge_event() const { return (*this)->negedge_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // use for positive edge sensitivity sc_event_finder& pos() const { return sc_event_finder::cached_create ( m_pos_finder_p, *this, &in_if_type::posedge_event ); } // use for negative edge sensitivity sc_event_finder& neg() const { return sc_event_finder::cached_create ( m_neg_finder_p, *this, &in_if_type::negedge_event ); } // was there a value changed event? bool event() const { return (*this)->event(); } // was there a positive edge event? bool posedge() const { return (*this)->posedge(); } // was there a negative edge event? bool negedge() const { return (*this)->negedge(); } // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_in"; } void add_trace( sc_trace_file*, const std::string& ) const; // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; protected: // called by pbind (for internal use only) virtual int vbind( sc_interface& ); virtual int vbind( sc_port_base& ); // implement virtual base_type port-binding function // - avoids warnings on some compilers // - should only be called, when using sc_port_b explicitly // - errors are detected during elaboration SC_VIRTUAL_ void bind( base_port_type& parent_ ) { sc_port_base::bind( parent_ ); } private: mutable sc_event_finder* m_change_finder_p; mutable sc_event_finder* m_neg_finder_p; mutable sc_event_finder* m_pos_finder_p; private: // disabled sc_in( const this_type& ); this_type& operator = ( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; // ---------------------------------------------------------------------------- // CLASS : sc_inout // // The sc_signal input/output port class. // ---------------------------------------------------------------------------- template class sc_inout : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef T data_type; typedef sc_signal_inout_if if_type; typedef sc_port base_type; typedef sc_inout this_type; typedef sc_signal_in_if in_if_type; typedef sc_port in_port_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // constructors sc_inout() : base_type(), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0) {} // destructor virtual ~sc_inout(); // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // was there a value changed event? bool event() const { return (*this)->event(); } // write the new value void write( const data_type& value_ ) { (*this)->write( value_ ); } this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } // set initial value (can also be called when port is not bound yet) void initialize( const data_type& value_ ); void initialize( const in_if_type& interface_ ) { initialize( interface_.read() ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } virtual const char* kind() const { return "sc_inout"; } protected: data_type* m_init_val; public: // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; void add_trace( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; private: mutable sc_event_finder* m_change_finder_p; private: // disabled sc_inout( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; template ::std::ostream& operator << ( ::std::ostream& os, const sc_inout& a ) { return os << a->read(); } // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // destructor template inline sc_inout::~sc_inout() { delete m_change_finder_p; delete m_init_val; remove_traces(); } // set initial value (can also be called when port is not bound yet) template inline void sc_inout::initialize( const data_type& value_ ) { inout_if_type* iface = dynamic_cast( this->get_interface() ); if( iface != 0 ) { iface->write( value_ ); } else { if( m_init_val == 0 ) { m_init_val = new data_type; } *m_init_val = value_; } } // called when elaboration is done template inline void sc_inout::end_of_elaboration() { if( m_init_val != 0 ) { write( *m_init_val ); delete m_init_val; m_init_val = 0; } if( m_traces != 0 ) { for( int i = 0; i < (int)m_traces->size(); ++ i ) { sc_trace_params* p = (*m_traces)[i]; in_if_type* iface = dynamic_cast( this->get_interface() ); sc_trace( p->tf, iface->read(), p->name ); } remove_traces(); } } // called by sc_trace template inline void sc_inout::add_trace_internal( sc_trace_file* tf_, const std::string& name_) const { if( tf_ != 0 ) { if( m_traces == 0 ) { m_traces = new sc_trace_params_vec; } m_traces->push_back( new sc_trace_params( tf_, name_ ) ); } } template inline void sc_inout::add_trace( sc_trace_file* tf_, const std::string& name_) const { sc_deprecated_add_trace(); add_trace_internal(tf_, name_); } template inline void sc_inout::remove_traces() const { if( m_traces != 0 ) { for( int i = static_cast(m_traces->size()) - 1; i >= 0; -- i ) { delete (*m_traces)[i]; } delete m_traces; m_traces = 0; } } // ---------------------------------------------------------------------------- // CLASS : sc_inout // // Specialization of sc_inout for type bool. // ---------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ sc_port,1,SC_ONE_OR_MORE_BOUND>; template <> class SC_API sc_inout : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef bool data_type; typedef sc_signal_inout_if if_type; typedef sc_port base_type; typedef sc_inout this_type; typedef sc_signal_in_if in_if_type; typedef sc_port in_port_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // constructors sc_inout() : base_type(), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} // destructor virtual ~sc_inout(); // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // get the positive edge event const sc_event& posedge_event() const { return (*this)->posedge_event(); } // get the negative edge event const sc_event& negedge_event() const { return (*this)->negedge_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // use for positive edge sensitivity sc_event_finder& pos() const { return sc_event_finder::cached_create ( m_pos_finder_p, *this, &in_if_type::posedge_event ); } // use for negative edge sensitivity sc_event_finder& neg() const { return sc_event_finder::cached_create ( m_neg_finder_p, *this, &in_if_type::negedge_event ); } // was there a value changed event? bool event() const { return (*this)->event(); } // was there a positive edge event? bool posedge() const { return (*this)->posedge(); } // was there a negative edge event? bool negedge() const { return (*this)->negedge(); } // write the new value void write( const data_type& value_ ) { (*this)->write( value_ ); } this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } // set initial value (can also be called when port is not bound yet) void initialize( const data_type& value_ ); void initialize( const in_if_type& interface_ ) { initialize( interface_.read() ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } virtual const char* kind() const { return "sc_inout"; } protected: data_type* m_init_val; public: // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; void add_trace( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; private: mutable sc_event_finder* m_change_finder_p; mutable sc_event_finder* m_neg_finder_p; mutable sc_event_finder* m_pos_finder_p; private: // disabled sc_inout( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; // ---------------------------------------------------------------------------- // CLASS : sc_inout // // Specialization of sc_inout for type sc_dt::sc_logic. // ---------------------------------------------------------------------------- SC_API_TEMPLATE_DECL_ sc_port,1,SC_ONE_OR_MORE_BOUND>; template <> class SC_API sc_inout : public sc_port,1,SC_ONE_OR_MORE_BOUND> { public: // typedefs typedef sc_dt::sc_logic data_type; typedef sc_signal_inout_if if_type; typedef sc_port base_type; typedef sc_inout this_type; typedef sc_signal_in_if in_if_type; typedef sc_port in_port_type; typedef if_type inout_if_type; typedef base_type inout_port_type; public: // constructors sc_inout() : base_type(), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( const char* name_ ) : base_type( name_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( inout_if_type& interface_ ) : base_type( interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} explicit sc_inout( inout_port_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( this_type& parent_ ) : base_type( parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} sc_inout( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ), m_init_val( 0 ), m_traces( 0 ), m_change_finder_p(0), m_neg_finder_p(0), m_pos_finder_p(0) {} // destructor virtual ~sc_inout(); // interface access shortcut methods // get the default event const sc_event& default_event() const { return (*this)->default_event(); } // get the value changed event const sc_event& value_changed_event() const { return (*this)->value_changed_event(); } // get the positive edge event const sc_event& posedge_event() const { return (*this)->posedge_event(); } // get the negative edge event const sc_event& negedge_event() const { return (*this)->negedge_event(); } // read the current value const data_type& read() const { return (*this)->read(); } operator const data_type& () const { return (*this)->read(); } // use for positive edge sensitivity sc_event_finder& pos() const { return sc_event_finder::cached_create ( m_pos_finder_p, *this, &in_if_type::posedge_event ); } // use for negative edge sensitivity sc_event_finder& neg() const { return sc_event_finder::cached_create ( m_neg_finder_p, *this, &in_if_type::negedge_event ); } // was there a value changed event? bool event() const { return (*this)->event(); } // was there a positive edge event? bool posedge() const { return (*this)->posedge(); } // was there a negative edge event? bool negedge() const { return (*this)->negedge(); } // write the new value void write( const data_type& value_ ) { (*this)->write( value_ ); } this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } // set initial value (can also be called when port is not bound yet) void initialize( const data_type& value_ ); void initialize( const in_if_type& interface_ ) { initialize( interface_.read() ); } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); // (other) event finder method(s) sc_event_finder& value_changed() const { return sc_event_finder::cached_create ( m_change_finder_p, *this, &in_if_type::value_changed_event ); } virtual const char* kind() const { return "sc_inout"; } protected: data_type* m_init_val; public: // called by sc_trace void add_trace_internal( sc_trace_file*, const std::string& ) const; void add_trace( sc_trace_file*, const std::string& ) const; protected: void remove_traces() const; mutable sc_trace_params_vec* m_traces; private: mutable sc_event_finder* m_change_finder_p; mutable sc_event_finder* m_neg_finder_p; mutable sc_event_finder* m_pos_finder_p; private: // disabled sc_inout( const this_type& ); #ifdef __GNUC__ // Needed to circumvent a problem in the g++-2.95.2 compiler: // This unused variable forces the compiler to instantiate // an object of T template so an implicit conversion from // read() to a C++ intrinsic data type will work. static data_type dummy; #endif }; // ---------------------------------------------------------------------------- // CLASS : sc_out // // The sc_signal output port class. // ---------------------------------------------------------------------------- // sc_out can also read from its port, hence no difference with sc_inout. // For debugging reasons, a class is provided instead of a define. template class sc_out : public sc_inout { public: // typedefs typedef T data_type; typedef sc_out this_type; typedef sc_inout base_type; typedef typename base_type::in_if_type in_if_type; typedef typename base_type::in_port_type in_port_type; typedef typename base_type::inout_if_type inout_if_type; typedef typename base_type::inout_port_type inout_port_type; public: // constructors sc_out() : base_type() {} explicit sc_out( const char* name_ ) : base_type( name_ ) {} explicit sc_out( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out( this_type& parent_ ) : base_type( parent_ ) {} sc_out( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_out() {} // write the new value this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } virtual const char* kind() const { return "sc_out"; } private: // disabled sc_out( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // FUNCTION : sc_trace // ---------------------------------------------------------------------------- template inline void sc_trace(sc_trace_file* tf, const sc_in& port, const std::string& name) { const sc_signal_in_if* iface = 0; if (sc_get_curr_simcontext()->elaboration_done() ) { iface = dynamic_cast*>( port.get_interface() ); } if ( iface ) sc_trace( tf, iface->read(), name ); else port.add_trace_internal( tf, name ); } template inline void sc_trace( sc_trace_file* tf, const sc_inout& port, const std::string& name ) { const sc_signal_in_if* iface = 0; if (sc_get_curr_simcontext()->elaboration_done() ) { iface = dynamic_cast*>( port.get_interface() ); } if ( iface ) sc_trace( tf, iface->read(), name ); else port.add_trace_internal( tf, name ); } } // namespace sc_core #undef SC_VIRTUAL_ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Jason Elbaum, Motorola, Inc., 2001-11-12 Description of Modification: Added a static, private, otherwise unused data member to the sc_in and sc_inout classes to address a bug in the GNU compiler *only*. This works around a bug in g++ 2.95.2 regarding implicit casting from a templated class to a C++ intrinsic type. *****************************************************************************/ //$Log: sc_signal_ports.h,v $ //Revision 1.10 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // //Revision 1.9 2011/08/26 20:45:43 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.8 2011/08/07 19:08:01 acg // Andy Goodrich: moved logs to end of file so line number synching works // better between versions. // //Revision 1.7 2011/08/07 18:53:09 acg // Philipp A. Hartmann: add virtual instances of the bind function for // base classes to eliminate warning messages for clang platforms. // //Revision 1.6 2011/04/02 00:03:23 acg // Andy Goodrich: catch the other bind()'s that I missed in Philipp's update. // //Revision 1.5 2011/04/01 22:33:31 acg // Philipp A. Harmann: Use const interface signature to implement non-const // interface signature for virtual bind(...). // //Revision 1.4 2011/03/30 16:46:10 acg // Andy Goodrich: added a signature and removed a virtual specification // to eliminate warnings with certain compilers. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.11 2006/04/18 23:36:50 acg // Andy Goodrich: made add_trace_internal public until I can figure out // how to do a friend specification for sc_trace in an environment where // there are partial template and full template specifications for its // arguments. // //Revision 1.10 2006/04/18 18:01:26 acg // Andy Goodrich: added an add_trace_internal() method to the various port // classes so that sc_trace has something to call that won't emit an // IEEE 1666 deprecation message. // //Revision 1.9 2006/03/13 20:19:44 acg // Andy Goodrich: changed sc_event instances into pointers to sc_event instances // that are allocated as needed. This saves considerable storage for large // numbers of signals, etc. // //Revision 1.8 2006/02/02 23:42:37 acg // Andy Goodrich: implemented a much better fix to the sc_event_finder // proliferation problem. This new version allocates only a single event // finder for each port for each type of event, e.g., pos(), neg(), and // value_change(). The event finder persists as long as the port does, // which is what the LRM dictates. Because only a single instance is // allocated for each event type per port there is not a potential // explosion of storage as was true in the 2.0.1/2.1 versions. // //Revision 1.7 2006/02/02 21:38:12 acg // Andy Goodrich: fix to the comment log. // //Revision 1.4 2006/01/24 20:46:32 acg //Andy Goodrich: changes to eliminate use of deprecated features. For instance, //using notify(SC_ZERO_TIME) in place of notify_delayed(). // //Revision 1.3 2006/01/13 18:47:42 acg //Added $Log command so that CVS comments are reproduced in the source. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.18 2005/09/15 23:01:52 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.17 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_resolved_ports.h0000644000175000017500000002126214342422106024752 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_resolved_ports.h -- The sc_signal_resolved port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-08-20 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_SIGNAL_RESOLVED_PORTS_H #define SC_SIGNAL_RESOLVED_PORTS_H #include "sysc/communication/sc_signal_ports.h" #include "sysc/datatypes/bit/sc_logic.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_in_resolved // // The sc_signal_resolved input port class. // ---------------------------------------------------------------------------- class SC_API sc_in_resolved : public sc_in { public: // typedefs typedef sc_dt::sc_logic data_type; typedef sc_in_resolved this_type; typedef sc_in base_type; typedef base_type::in_if_type in_if_type; typedef base_type::in_port_type in_port_type; typedef base_type::inout_port_type inout_port_type; public: // constructors sc_in_resolved() : base_type() {} explicit sc_in_resolved( const char* name_ ) : base_type( name_ ) {} explicit sc_in_resolved( const in_if_type& interface_ ) : base_type( interface_ ) {} sc_in_resolved( const char* name_, const in_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_in_resolved( in_port_type& parent_ ) : base_type( parent_ ) {} sc_in_resolved( const char* name_, in_port_type& parent_ ) : base_type( name_, parent_ ) {} explicit sc_in_resolved( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_in_resolved( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_in_resolved( this_type& parent_ ) : base_type( parent_ ) {} sc_in_resolved( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_in_resolved() {} // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_in_resolved"; } private: // disabled sc_in_resolved( const this_type& ); this_type& operator = ( const this_type& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_inout_resolved // // The sc_signal_resolved input/output port class. // ---------------------------------------------------------------------------- class SC_API sc_inout_resolved : public sc_inout { public: // typedefs typedef sc_dt::sc_logic data_type; typedef sc_inout_resolved this_type; typedef sc_inout base_type; typedef base_type::in_if_type in_if_type; typedef base_type::in_port_type in_port_type; typedef base_type::inout_if_type inout_if_type; typedef base_type::inout_port_type inout_port_type; public: // constructors sc_inout_resolved() : base_type() {} explicit sc_inout_resolved( const char* name_ ) : base_type( name_ ) {} explicit sc_inout_resolved( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_inout_resolved( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_inout_resolved( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_inout_resolved( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_inout_resolved( this_type& parent_ ) : base_type( parent_ ) {} sc_inout_resolved( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_inout_resolved() {} // write the new value this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } // called when elaboration is done /* WHEN DEFINING THIS METHOD IN A DERIVED CLASS, */ /* MAKE SURE THAT THIS METHOD IS CALLED AS WELL. */ virtual void end_of_elaboration(); virtual const char* kind() const { return "sc_inout_resolved"; } private: // disabled sc_inout_resolved( const this_type& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_out_resolved // // The sc_signal_resolved output port class. // ---------------------------------------------------------------------------- // sc_out_resolved can also read from its port, hence no difference with // sc_inout_resolved. For debugging reasons, a class is provided instead // of a typedef. class SC_API sc_out_resolved : public sc_inout_resolved { public: // typedefs typedef sc_out_resolved this_type; typedef sc_inout_resolved base_type; typedef base_type::data_type data_type; typedef base_type::in_if_type in_if_type; typedef base_type::in_port_type in_port_type; typedef base_type::inout_if_type inout_if_type; typedef base_type::inout_port_type inout_port_type; public: // constructors sc_out_resolved() : base_type() {} explicit sc_out_resolved( const char* name_ ) : base_type( name_ ) {} explicit sc_out_resolved( inout_if_type& interface_ ) : base_type( interface_ ) {} sc_out_resolved( const char* name_, inout_if_type& interface_ ) : base_type( name_, interface_ ) {} explicit sc_out_resolved( inout_port_type& parent_ ) : base_type( parent_ ) {} sc_out_resolved( const char* name_, inout_port_type& parent_ ) : base_type( name_, parent_ ) {} sc_out_resolved( this_type& parent_ ) : base_type( parent_ ) {} sc_out_resolved( const char* name_, this_type& parent_ ) : base_type( name_, parent_ ) {} // destructor (does nothing) virtual ~sc_out_resolved() {} // write the new value this_type& operator = ( const data_type& value_ ) { (*this)->write( value_ ); return *this; } this_type& operator = ( const in_if_type& interface_ ) { (*this)->write( interface_.read() ); return *this; } this_type& operator = ( const in_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const inout_port_type& port_ ) { (*this)->write( port_->read() ); return *this; } this_type& operator = ( const this_type& port_ ) { (*this)->write( port_->read() ); return *this; } virtual const char* kind() const { return "sc_out_resolved"; } private: // disabled sc_out_resolved( const this_type& ); }; } // namespace sc_core //$Log: sc_signal_resolved_ports.h,v $ //Revision 1.3 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_fifo_ifs.h0000644000175000017500000001332414342422106022127 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fifo_ifs.h -- The sc_fifo interface classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_FIFO_IFS_H #define SC_FIFO_IFS_H #include "sysc/communication/sc_interface.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_fifo_nonblocking_in_if // // The sc_fifo input nonblocking interface class. // ---------------------------------------------------------------------------- template class sc_fifo_nonblocking_in_if : virtual public sc_interface { public: // non-blocking read virtual bool nb_read( T& ) = 0; // get the data written event virtual const sc_event& data_written_event() const = 0; }; // ---------------------------------------------------------------------------- // CLASS : sc_fifo_blocking_in_if // // The sc_fifo input blocking interface class. // ---------------------------------------------------------------------------- template class sc_fifo_blocking_in_if : virtual public sc_interface { public: // blocking read virtual void read( T& ) = 0; virtual T read() = 0; }; // ---------------------------------------------------------------------------- // CLASS : sc_fifo_in_if // // The sc_fifo input interface class. // ---------------------------------------------------------------------------- template class sc_fifo_in_if : public sc_fifo_nonblocking_in_if, public sc_fifo_blocking_in_if { public: // get the number of available samples virtual int num_available() const = 0; protected: // constructor sc_fifo_in_if() {} private: // disabled sc_fifo_in_if( const sc_fifo_in_if& ); sc_fifo_in_if& operator = ( const sc_fifo_in_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fifo_nonblocking_out_if // // The sc_fifo nonblocking output interface class. // ---------------------------------------------------------------------------- template class sc_fifo_nonblocking_out_if : virtual public sc_interface { public: // non-blocking write virtual bool nb_write( const T& ) = 0; // get the data read event virtual const sc_event& data_read_event() const = 0; }; // ---------------------------------------------------------------------------- // CLASS : sc_fifo_blocking_out_if // // The sc_fifo blocking output interface class. // ---------------------------------------------------------------------------- template class sc_fifo_blocking_out_if : virtual public sc_interface { public: // blocking write virtual void write( const T& ) = 0; }; // ---------------------------------------------------------------------------- // CLASS : sc_fifo_out_if // // The sc_fifo output interface class. // ---------------------------------------------------------------------------- template class sc_fifo_out_if : public sc_fifo_nonblocking_out_if, public sc_fifo_blocking_out_if { public: // get the number of free spaces virtual int num_free() const = 0; protected: // constructor sc_fifo_out_if() {} private: // disabled sc_fifo_out_if( const sc_fifo_out_if& ); sc_fifo_out_if& operator = ( const sc_fifo_out_if& ); }; /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Bishnupriya Bhattacharye, Cadence Design Systems, 30 Jan, 2004 Description of Modification: Split up the interfaces into blocking and non blocking parts Name, Affiliation, Date: Description of Modification: *****************************************************************************/ //$Log: sc_fifo_ifs.h,v $ //Revision 1.3 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/06/10 22:43:55 acg //Added CVS change log annotation. // } // namespace sc_core #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_prim_channel.cpp0000644000175000017500000003300714342422106023335 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_prim_channel.cpp -- Abstract base class of all primitive channel classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_prim_channel.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_module.h" #include "sysc/kernel/sc_object_int.h" #ifndef SC_DISABLE_ASYNC_UPDATES # include "sysc/communication/sc_host_mutex.h" # include "sysc/communication/sc_host_semaphore.h" #endif #include // std::find namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel // // Abstract base class of all primitive channel classes. // ---------------------------------------------------------------------------- // constructors sc_prim_channel::sc_prim_channel() : sc_object( 0 ), m_registry( simcontext()->get_prim_channel_registry() ), m_update_next_p( 0 ) { m_registry->insert( *this ); } sc_prim_channel::sc_prim_channel( const char* name_ ) : sc_object( name_ ), m_registry( simcontext()->get_prim_channel_registry() ), m_update_next_p( 0 ) { m_registry->insert( *this ); } // destructor sc_prim_channel::~sc_prim_channel() { m_registry->remove( *this ); } // the update method (does nothing by default) void sc_prim_channel::update() {} // called by construction_done (does nothing by default) void sc_prim_channel::before_end_of_elaboration() {} // called when construction is done void sc_prim_channel::construction_done() { sc_object::hierarchy_scope scope( get_parent_object() ); before_end_of_elaboration(); } // called by elaboration_done (does nothing by default) void sc_prim_channel::end_of_elaboration() {} // called when elaboration is done void sc_prim_channel::elaboration_done() { sc_object::hierarchy_scope scope( get_parent_object() ); end_of_elaboration(); } // called by start_simulation (does nothing) void sc_prim_channel::start_of_simulation() {} // called before simulation begins void sc_prim_channel::start_simulation() { sc_object::hierarchy_scope scope( get_parent_object() ); start_of_simulation(); } // called by simulation_done (does nothing) void sc_prim_channel::end_of_simulation() {} // called after simulation ends void sc_prim_channel::simulation_done() { sc_object::hierarchy_scope scope( get_parent_object() ); end_of_simulation(); } // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel_registry::async_update_list // // Thread-safe list of pending external updates // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- class sc_prim_channel_registry::async_update_list { #ifndef SC_DISABLE_ASYNC_UPDATES public: bool pending() const { return m_push_queue.size() != 0; } void suspend() { if( m_has_suspending_channels ) { m_suspend_semaphore.wait(); m_suspend_semaphore.post(); // replace token } } void append( sc_prim_channel& prim_channel_ ) { sc_scoped_lock lock( m_mutex ); m_push_queue.push_back( &prim_channel_ ); m_suspend_semaphore.post(); // return releases the mutex } void accept_updates() { sc_assert( ! m_pop_queue.size() ); { sc_scoped_lock lock( m_mutex ); m_push_queue.swap( m_pop_queue ); // leaving the block releases the mutex } std::vector< sc_prim_channel* >::const_iterator it = m_pop_queue.begin(), end = m_pop_queue.end(); while( it!= end ) { // we use request_update instead of perform_update // to skip duplicates (*it++)->request_update(); int sem_trywait = m_suspend_semaphore.trywait(); // this must never block ! sc_assert( sem_trywait == 0 ); } m_pop_queue.clear(); } bool attach_suspending( sc_prim_channel& p ) { sc_scoped_lock lock( m_mutex ); std::vector::iterator it = std::find(m_suspending_channels.begin(), m_suspending_channels.end(), &p); if ( it == m_suspending_channels.end() ) { m_suspending_channels.push_back(&p); m_has_suspending_channels = true; return true; } return false; // return releases the mutex } bool detach_suspending( sc_prim_channel& p ) { sc_scoped_lock lock( m_mutex ); std::vector::iterator it = std::find(m_suspending_channels.begin(), m_suspending_channels.end(), &p); if ( it != m_suspending_channels.end() ) { *it = m_suspending_channels.back(); m_suspending_channels.pop_back(); m_has_suspending_channels = (m_suspending_channels.size() > 0); return true; } return false; // return releases the mutex } async_update_list() : m_has_suspending_channels() {} private: sc_host_mutex m_mutex; sc_host_semaphore m_suspend_semaphore; std::vector< sc_prim_channel* > m_push_queue; std::vector< sc_prim_channel* > m_pop_queue; std::vector< sc_prim_channel* > m_suspending_channels; bool m_has_suspending_channels; #endif // ! SC_DISABLE_ASYNC_UPDATES }; // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel_registry // // Registry for all primitive channels. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- void sc_prim_channel_registry::insert( sc_prim_channel& prim_channel_ ) { if( sc_is_running() ) { SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "simulation running" ); return; } if( m_simc->elaboration_done() ) { SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "elaboration done" ); return; } #ifdef DEBUG_SYSTEMC // check if prim_channel_ is already inserted for( int i = 0; i < size(); ++ i ) { if( &prim_channel_ == m_prim_channel_vec[i] ) { SC_REPORT_ERROR( SC_ID_INSERT_PRIM_CHANNEL_, "already inserted" ); return; } } #endif // insert m_prim_channel_vec.push_back( &prim_channel_ ); } void sc_prim_channel_registry::remove( sc_prim_channel& prim_channel_ ) { int i; for( i = 0; i < size(); ++ i ) { if( &prim_channel_ == m_prim_channel_vec[i] ) { break; } } if( i == size() ) { SC_REPORT_ERROR( SC_ID_REMOVE_PRIM_CHANNEL_, 0 ); return; } // remove m_prim_channel_vec[i] = m_prim_channel_vec.back(); m_prim_channel_vec.pop_back(); #ifndef SC_DISABLE_ASYNC_UPDATES // remove, if async suspending channel m_async_update_list_p->detach_suspending(prim_channel_); #endif } bool sc_prim_channel_registry::pending_async_updates() const { #ifndef SC_DISABLE_ASYNC_UPDATES return m_async_update_list_p->pending(); #else return false; #endif } bool sc_prim_channel_registry::async_suspend() { #ifndef SC_DISABLE_ASYNC_UPDATES m_async_update_list_p->suspend(); return !pending_async_updates(); #else return true; #endif } void sc_prim_channel_registry::async_request_update( sc_prim_channel& prim_channel_ ) { #ifndef SC_DISABLE_ASYNC_UPDATES m_async_update_list_p->append( prim_channel_ ); #else SC_REPORT_ERROR( SC_ID_NO_ASYNC_UPDATE_, prim_channel_.name() ); #endif } bool sc_prim_channel_registry::async_attach_suspending(sc_prim_channel& p) { #ifndef SC_DISABLE_ASYNC_UPDATES return m_async_update_list_p->attach_suspending( p ); #else SC_REPORT_ERROR( SC_ID_NO_ASYNC_UPDATE_, p.name() ); return false; #endif } bool sc_prim_channel_registry::async_detach_suspending(sc_prim_channel& p) { #ifndef SC_DISABLE_ASYNC_UPDATES return m_async_update_list_p->detach_suspending( p ); #else SC_REPORT_ERROR( SC_ID_NO_ASYNC_UPDATE_, p.name() ); return false; #endif } // +---------------------------------------------------------------------------- // |"sc_prim_channel_registry::perform_update" // | // | This method updates the values of the primitive channels in its update // | lists. // +---------------------------------------------------------------------------- void sc_prim_channel_registry::perform_update() { // Update the values for the primitive channels set external to the // simulator. #ifndef SC_DISABLE_ASYNC_UPDATES if( m_async_update_list_p->pending() ) m_async_update_list_p->accept_updates(); #endif sc_prim_channel* next_p; // Next update to perform. sc_prim_channel* now_p; // Update now performing. // Update the values for the primitive channels in the simulator's list. now_p = m_update_list_p; m_update_list_p = (sc_prim_channel*)sc_prim_channel::list_end; for ( ; now_p != (sc_prim_channel*)sc_prim_channel::list_end; now_p = next_p ) { next_p = now_p->m_update_next_p; now_p->perform_update(); } } // constructor sc_prim_channel_registry::sc_prim_channel_registry( sc_simcontext& simc_ ) : m_async_update_list_p(0) , m_construction_done(0) , m_prim_channel_vec() , m_simc( &simc_ ) , m_update_list_p((sc_prim_channel*)sc_prim_channel::list_end) { # ifndef SC_DISABLE_ASYNC_UPDATES m_async_update_list_p = new async_update_list(); # endif } // destructor sc_prim_channel_registry::~sc_prim_channel_registry() { delete m_async_update_list_p; } // called when construction is done bool sc_prim_channel_registry::construction_done() { if( size() == m_construction_done ) // nothing has been updated return true; for( ; m_construction_done < size(); ++m_construction_done ) { m_prim_channel_vec[m_construction_done]->construction_done(); } return false; } // called when elaboration is done void sc_prim_channel_registry::elaboration_done() { for( int i = 0; i < size(); ++ i ) { m_prim_channel_vec[i]->elaboration_done(); } } // called before simulation begins void sc_prim_channel_registry::start_simulation() { for( int i = 0; i < size(); ++ i ) { m_prim_channel_vec[i]->start_simulation(); } } // called after simulation ends void sc_prim_channel_registry::simulation_done() { for( int i = 0; i < size(); ++ i ) { m_prim_channel_vec[i]->simulation_done(); } } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte, Bishnupriya Bhattacharya, Cadence Design Systems, 25 August, 2003 Description of Modification: phase callbacks *****************************************************************************/ // $Log: sc_prim_channel.cpp,v $ // Revision 1.11 2011/08/26 21:38:32 acg // Philipp A. Hartmann: removed unused switch m_construction_done. // // Revision 1.10 2011/08/26 20:45:41 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.9 2011/08/24 22:05:36 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.8 2011/05/09 04:07:37 acg // Philipp A. Hartmann: // (1) Restore hierarchy in all phase callbacks. // (2) Ensure calls to before_end_of_elaboration. // // Revision 1.7 2011/04/19 02:36:26 acg // Philipp A. Hartmann: new aysnc_update and mutex support. // // Revision 1.6 2011/02/18 20:31:05 acg // Philipp A. Hartmann: added error messages for calls that cannot be done // after elaboration. // // Revision 1.5 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.4 2011/02/14 17:50:16 acg // Andy Goodrich: testing for sc_port and sc_export instantiations during // end of elaboration and issuing appropriate error messages. // // Revision 1.3 2010/12/07 20:36:49 acg // Andy Goodrich: fix pointer that should have been initialized to zero. // // Revision 1.2 2010/12/07 19:50:36 acg // Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/01/26 21:00:50 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_writer_policy.h0000644000175000017500000001106614342422106023237 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_writer_policy.h -- The sc_signal writer policy definition Original Author: Philipp A: Hartmann, OFFIS CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_WRITER_POLICY_H_INCLUDED_ #define SC_WRITER_POLICY_H_INCLUDED_ #if !defined(SC_DEFAULT_WRITER_POLICY) # if defined(SC_NO_WRITE_CHECK) # define SC_DEFAULT_WRITER_POLICY SC_UNCHECKED_WRITERS # else # define SC_DEFAULT_WRITER_POLICY SC_ONE_WRITER # endif #endif #include "sysc/kernel/sc_process_handle.h" #if defined(_MSC_VER) && _MSC_VER < 1800 # pragma warning(push) # pragma warning(disable:4512) // assignment operator could not be generated #endif // _MSC_VER < 1800 namespace sc_core { class sc_object; class sc_port_base; extern SC_API void sc_signal_invalid_writer( sc_object* target, sc_object* first_writer, sc_object* second_writer, bool check_delta ); // SIGNAL WRITING POLICIES // // Note: if you add a new policy to the enum below you will need to add // an additional overload of sc_reset::reset_signal_is() for the sc_signal // instance. That will require changes to sysc/kernel/sc_reset.cpp and // sysc/kernel/sc_reset.h enum sc_writer_policy { SC_ONE_WRITER = 0, ///< unique writer (from a unique port) SC_MANY_WRITERS = 1, ///< allow multiple writers (with different ports) SC_UNCHECKED_WRITERS = 3 ///< even allow delta cycle conflicts (non-standard) }; // signal forward declaration template< typename T, sc_writer_policy POL = SC_DEFAULT_WRITER_POLICY > class sc_signal; template< sc_writer_policy > struct sc_writer_policy_check; struct SC_API sc_writer_policy_nocheck_write { bool check_write( sc_object* /* target */, bool /* value_changed */ ) { return true; } bool needs_update() const { return false; } void update() {} }; struct SC_API sc_writer_policy_check_write { bool check_write( sc_object* target, bool value_changed ); bool needs_update() const { return m_delta_only; } void update(); private: static bool only_delta(); protected: sc_writer_policy_check_write( bool delta_only = only_delta() ) : m_delta_only( delta_only ), m_writer_p() {} const bool m_delta_only; sc_process_handle m_writer_p; }; struct SC_API sc_writer_policy_check_delta : sc_writer_policy_check_write { // bool write_check(sc_object*, bool); /* inherited */ // always force update phase to reset process bool needs_update() const { return true; } // reset current writer during update phase void update() { sc_process_handle().swap( m_writer_p ); } protected: sc_writer_policy_check_delta() : sc_writer_policy_check_write(true) {} }; struct SC_API sc_writer_policy_nocheck_port { bool check_port( sc_object*, sc_port_base*, bool ) { return true; } }; struct SC_API sc_writer_policy_check_port { bool check_port( sc_object* target, sc_port_base* port, bool is_output ); protected: sc_writer_policy_check_port() : m_output(0) {} sc_port_base* m_output; }; template<> struct SC_API sc_writer_policy_check : sc_writer_policy_check_port , sc_writer_policy_check_write {}; template<> struct SC_API sc_writer_policy_check : sc_writer_policy_nocheck_port , sc_writer_policy_check_delta {}; template<> struct SC_API sc_writer_policy_check : sc_writer_policy_nocheck_port , sc_writer_policy_nocheck_write {}; } // namespace sc_core #if defined(_MSC_VER) && _MSC_VER < 1800 # pragma warning(pop) #endif // _MSC_VER < 1800 #endif // SC_WRITER_POLICY_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/communication/sc_communication_ids.h0000644000175000017500000001455514342422106024056 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_communication_ids.h -- Report ids for the communication code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_COMMUNICATION_IDS_H #define SC_COMMUNICATION_IDS_H #include "sysc/utils/sc_report.h" // ---------------------------------------------------------------------------- // Report ids (communication) // // Report ids in the range of 100-199. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } namespace sc_core { extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; // in sc_report_handler.cpp } // namespace sc_core #endif SC_DEFINE_MESSAGE( SC_ID_PORT_OUTSIDE_MODULE_, 100, "port specified outside of module" ) SC_DEFINE_MESSAGE( SC_ID_CLOCK_PERIOD_ZERO_, 101, "sc_clock period is zero" ) SC_DEFINE_MESSAGE( SC_ID_CLOCK_HIGH_TIME_ZERO_, 102, "sc_clock high time is zero" ) SC_DEFINE_MESSAGE( SC_ID_CLOCK_LOW_TIME_ZERO_, 103, "sc_clock low time is zero" ) SC_DEFINE_MESSAGE( SC_ID_MORE_THAN_ONE_FIFO_READER_, 104, "sc_fifo cannot have more than one reader" ) SC_DEFINE_MESSAGE( SC_ID_MORE_THAN_ONE_FIFO_WRITER_, 105, "sc_fifo cannot have more than one writer" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_FIFO_SIZE_, 106, "sc_fifo must have a size of at least 1" ) SC_DEFINE_MESSAGE( SC_ID_BIND_IF_TO_PORT_, 107, "bind interface to port failed" ) SC_DEFINE_MESSAGE( SC_ID_BIND_PORT_TO_PORT_, 108, "bind parent port to port failed" ) SC_DEFINE_MESSAGE( SC_ID_COMPLETE_BINDING_, 109, "complete binding failed" ) SC_DEFINE_MESSAGE( SC_ID_INSERT_PORT_, 110, "insert port failed" ) SC_DEFINE_MESSAGE( SC_ID_REMOVE_PORT_, 111, "remove port failed" ) SC_DEFINE_MESSAGE( SC_ID_GET_IF_, 112, "get interface failed" ) SC_DEFINE_MESSAGE( SC_ID_INSERT_PRIM_CHANNEL_, 113, "insert primitive channel failed" ) SC_DEFINE_MESSAGE( SC_ID_REMOVE_PRIM_CHANNEL_, 114, "remove primitive channel failed" ) SC_DEFINE_MESSAGE( SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, 115, "sc_signal cannot have more than one driver" ) SC_DEFINE_MESSAGE( SC_ID_NO_DEFAULT_EVENT_, 116, "channel doesn't have a default event" ) SC_DEFINE_MESSAGE( SC_ID_RESOLVED_PORT_NOT_BOUND_, 117, "resolved port not bound to resolved signal" ) SC_DEFINE_MESSAGE( SC_ID_FIND_EVENT_, 118, "find event failed" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_SEMAPHORE_VALUE_, 119, "sc_semaphore requires an initial value >= 0" ) SC_DEFINE_MESSAGE( SC_ID_SC_EXPORT_HAS_NO_INTERFACE_, 120, "sc_export instance has no interface" ) SC_DEFINE_MESSAGE( SC_ID_INSERT_EXPORT_, 121, "insert sc_export failed" ) SC_DEFINE_MESSAGE( SC_ID_EXPORT_OUTSIDE_MODULE_, 122, "sc_export specified outside of module" ) SC_DEFINE_MESSAGE( SC_ID_SC_EXPORT_NOT_REGISTERED_, 123, "remove sc_export failed, sc_export not registered" ) SC_DEFINE_MESSAGE( SC_ID_SC_EXPORT_NOT_BOUND_AFTER_CONSTRUCTION_, 124, "sc_export instance not bound to interface at end of construction" ) SC_DEFINE_MESSAGE( SC_ID_ATTEMPT_TO_WRITE_TO_CLOCK_, 125, "attempt to write the value of an sc_clock instance" ) SC_DEFINE_MESSAGE( SC_ID_SC_EXPORT_ALREADY_BOUND_, 126, "sc_export instance already bound" ) SC_DEFINE_MESSAGE( SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_, 127, "attempted specalized signal operation on non-specialized signal" ) SC_DEFINE_MESSAGE( SC_ID_ATTEMPT_TO_BIND_CLOCK_TO_OUTPUT_, 128, "attempted to bind sc_clock instance to sc_inout or sc_out" ) SC_DEFINE_MESSAGE( SC_ID_NO_ASYNC_UPDATE_, 129, "this build has no asynchronous update support" ) /* $Log: sc_communication_ids.h,v $ Revision 1.5 2011/08/26 20:45:39 acg Andy Goodrich: moved the modification log to the end of the file to eliminate source line number skew when check-ins are done. Revision 1.4 2011/04/19 02:36:26 acg Philipp A. Hartmann: new aysnc_update and mutex support. Revision 1.3 2011/02/18 20:23:45 acg Andy Goodrich: Copyright update. Revision 1.2 2011/02/14 17:50:16 acg Andy Goodrich: testing for sc_port and sc_export instantiations during end of elaboration and issuing appropriate error messages. Revision 1.1.1.1 2006/12/15 20:20:04 acg SystemC 2.3 Revision 1.5 2006/01/25 00:31:11 acg Andy Goodrich: Changed over to use a standard message id of SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. Revision 1.4 2006/01/24 20:46:31 acg Andy Goodrich: changes to eliminate use of deprecated features. For instance, using notify(SC_ZERO_TIME) in place of notify_delayed(). Revision 1.3 2006/01/18 21:42:26 acg Andy Goodrich: Changes for check writer support, and tightening up sc_clock port usage. Revision 1.2 2006/01/03 23:18:26 acg Changed copyright to include 2006. Revision 1.1.1.1 2005/12/19 23:16:43 acg First check in of SystemC 2.1 into its own archive. Revision 1.12 2005/04/03 22:52:51 acg Namespace changes. Revision 1.11 2005/03/21 22:31:32 acg Changes to sc_core namespace. Revision 1.10 2004/10/28 00:21:48 acg Added check that sc_export instances are not bound twice. Revision 1.9 2004/09/27 21:02:54 acg Andy Goodrich - Forte Design Systems, Inc. - Added a $Log comment so that CVS checkin comments will appear in checked out source. */ #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_event_queue.h0000644000175000017500000001323314342422106022667 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_event_queue.h -- Event Queue Facility Definitions Original Author: Ulli Holtmann, Synopsys, Inc. CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_EVENT_QUEUE_H #define SC_EVENT_QUEUE_H /* Class sc_event_queue A queue that can contain any number of pending notifications. The queue has a similiar interface like an sc_event but has different semantics: it can carry any number of pending notification. The general rule is that _every_ call to notify() will cause a corresponding trigger at the specified wall-clock time that can be observed (the only exception is when notifications are explicitly cancelled). If multiple notifications are pending at the same wall-clock time, then the event queue will trigger in different delta cycles in order to ensure that sensitive processes can notice each trigger. The first trigger happens in the earliest delta cycle possible which is the same behavior as a normal timed event. */ #include "sysc/communication/sc_interface.h" #include "sysc/kernel/sc_module.h" #include "sysc/kernel/sc_event.h" #include "sysc/communication/sc_port.h" namespace sc_core { SC_API_TEMPLATE_DECL_ sc_ppq; // --------------------------------------------------------------------------- // sc_event_queue_if // --------------------------------------------------------------------------- class SC_API sc_event_queue_if : public virtual sc_interface { public: virtual void notify (double when, sc_time_unit base) =0; virtual void notify (const sc_time& when) =0; virtual void cancel_all() =0; }; // --------------------------------------------------------------------------- // sc_event_queue: a queue that can contain any number of pending // delta, or timed events. // --------------------------------------------------------------------------- class SC_API sc_event_queue: public sc_event_queue_if, public sc_module { public: SC_HAS_PROCESS( sc_event_queue ); sc_event_queue( sc_module_name name_ = sc_gen_unique_name("event_queue") ); ~sc_event_queue(); // API of sc_object inline virtual const char* kind() const { return "sc_event_queue"; } // // API of sc_event_queue_if // inline virtual void notify (double when, sc_time_unit base); virtual void notify (const sc_time& when); virtual void cancel_all(); // // API for using the event queue in processes // // get the default event inline virtual const sc_event& default_event() const; /* // // Possible extensions: // // Cancel an events at a specific time void cancel (const sc_time& when); void cancel (double when, sc_time_unit base); // How many events are pending altogether? unsigned pending() const; // How many events are pending at the specific time? unsigned pending(const sc_time& when) const; unsigned pending(double when, sc_time_unit base) const; */ private: void fire_event(); private: sc_ppq m_ppq; sc_event m_e; sc_dt::uint64 m_change_stamp; unsigned m_pending_delta; }; inline void sc_event_queue::notify (double when, sc_time_unit base ) { notify( sc_time(when,base) ); } inline const sc_event& sc_event_queue::default_event() const { return m_e; } // // Using event queue as a port // typedef sc_port sc_event_queue_port; SC_API_TEMPLATE_DECL_ sc_port; } // namespace sc_core // $Log: sc_event_queue.h,v $ // Revision 1.5 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/04/05 20:48:09 acg // Andy Goodrich: changes to make sure that event(), posedge() and negedge() // only return true if the clock has not moved. // // Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.2 2008/05/20 16:45:52 acg // Andy Goodrich: changed which unique name generator is used from the // global one to the one for sc_modules. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/11/28 20:30:48 acg // Andy Goodrich: updated from 2.2 source. sc_event_queue constructors // collapsed into a single constructor with an optional argument to get // the sc_module_name stack done correctly. Class name prefixing added // to sc_semaphore calls to wait() to keep gcc 4.x happy. // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // #endif // SC_EVENT_QUEUE_H systemc-2.3.4/src/sysc/communication/sc_prim_channel.h0000644000175000017500000003320514342422106023002 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_prim_channel.h -- Abstract base class of all primitive channel classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_PRIM_CHANNEL_H #define SC_PRIM_CHANNEL_H #include "sysc/kernel/sc_object.h" #include "sysc/kernel/sc_wait.h" #include "sysc/kernel/sc_wait_cthread.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel // // Abstract base class of all primitive channel classes. // ---------------------------------------------------------------------------- class SC_API sc_prim_channel : public sc_object { friend class sc_prim_channel_registry; public: enum { list_end = 0xdb }; public: virtual const char* kind() const { return "sc_prim_channel"; } inline bool update_requested() { return m_update_next_p != (sc_prim_channel*)list_end; } // request the update method to be executed during the update phase inline void request_update(); // request the update method to be executed during the update phase // from a process external to the simulator. void async_request_update(); protected: // constructors sc_prim_channel(); explicit sc_prim_channel( const char* ); // destructor virtual ~sc_prim_channel(); // the update method (does nothing by default) virtual void update(); // called by construction_done (does nothing by default) virtual void before_end_of_elaboration(); // called by elaboration_done (does nothing by default) virtual void end_of_elaboration(); // called by start_simulation (does nothing by default) virtual void start_of_simulation(); // called by simulation_done (does nothing by default) virtual void end_of_simulation(); // indicate that this channel is async and could call async_request_update // therefore, the kernel should arrange to suspend rather than exit while // this channel is attached. bool async_attach_suspending(); bool async_detach_suspending(); protected: // to avoid calling sc_get_curr_simcontext() // static sensitivity for SC_THREADs and SC_CTHREADs void wait() { sc_core::wait( simcontext() ); } // dynamic sensitivity for SC_THREADs and SC_CTHREADs void wait( const sc_event& e ) { sc_core::wait( e, simcontext() ); } void wait( const sc_event_or_list& el ) { sc_core::wait( el, simcontext() ); } void wait( const sc_event_and_list& el ) { sc_core::wait( el, simcontext() ); } void wait( const sc_time& t ) { sc_core::wait( t, simcontext() ); } void wait( double v, sc_time_unit tu ) { sc_core::wait( sc_time( v, tu, simcontext() ), simcontext() ); } void wait( const sc_time& t, const sc_event& e ) { sc_core::wait( t, e, simcontext() ); } void wait( double v, sc_time_unit tu, const sc_event& e ) { sc_core::wait( sc_time( v, tu, simcontext() ), e, simcontext() ); } void wait( const sc_time& t, const sc_event_or_list& el ) { sc_core::wait( t, el, simcontext() ); } void wait( double v, sc_time_unit tu, const sc_event_or_list& el ) { sc_core::wait( sc_time( v, tu, simcontext() ), el, simcontext() ); } void wait( const sc_time& t, const sc_event_and_list& el ) { sc_core::wait( t, el, simcontext() ); } void wait( double v, sc_time_unit tu, const sc_event_and_list& el ) { sc_core::wait( sc_time( v, tu, simcontext() ), el, simcontext() ); } void wait( int n ) { sc_core::wait( n, simcontext() ); } // static sensitivity for SC_METHODs void next_trigger() { sc_core::next_trigger( simcontext() ); } // dynamic sensitivity for SC_METHODs void next_trigger( const sc_event& e ) { sc_core::next_trigger( e, simcontext() ); } void next_trigger( const sc_event_or_list& el ) { sc_core::next_trigger( el, simcontext() ); } void next_trigger( const sc_event_and_list& el ) { sc_core::next_trigger( el, simcontext() ); } void next_trigger( const sc_time& t ) { sc_core::next_trigger( t, simcontext() ); } void next_trigger( double v, sc_time_unit tu ) {sc_core::next_trigger( sc_time( v, tu, simcontext() ), simcontext() );} void next_trigger( const sc_time& t, const sc_event& e ) { sc_core::next_trigger( t, e, simcontext() ); } void next_trigger( double v, sc_time_unit tu, const sc_event& e ) { sc_core::next_trigger( sc_time( v, tu, simcontext() ), e, simcontext() ); } void next_trigger( const sc_time& t, const sc_event_or_list& el ) { sc_core::next_trigger( t, el, simcontext() ); } void next_trigger( double v, sc_time_unit tu, const sc_event_or_list& el ) { sc_core::next_trigger( sc_time( v, tu, simcontext() ), el, simcontext() ); } void next_trigger( const sc_time& t, const sc_event_and_list& el ) { sc_core::next_trigger( t, el, simcontext() ); } void next_trigger( double v, sc_time_unit tu, const sc_event_and_list& el ) { sc_core::next_trigger( sc_time( v, tu, simcontext() ), el, simcontext() ); } // for SC_METHODs and SC_THREADs and SC_CTHREADs bool timed_out() { return sc_core::timed_out( simcontext() ); } #if 0 // @@@@#### // delta count maintenance sc_dt::uint64 delta_count() { return simcontext()->m_delta_count; } #endif private: // called during the update phase of a delta cycle (if requested) void perform_update(); // called when construction is done void construction_done(); // called when elaboration is done void elaboration_done(); // called before simulation starts void start_simulation(); // called after simulation ends void simulation_done(); // disabled sc_prim_channel( const sc_prim_channel& ); sc_prim_channel& operator = ( const sc_prim_channel& ); private: sc_prim_channel_registry* m_registry; // Update list manager. sc_prim_channel* m_update_next_p; // Next entry in update list. }; // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel_registry // // Registry for all primitive channels. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- class sc_prim_channel_registry { friend class sc_simcontext; public: void insert( sc_prim_channel& ); void remove( sc_prim_channel& ); int size() const { return static_cast(m_prim_channel_vec.size()); } inline void request_update( sc_prim_channel& ); void async_request_update( sc_prim_channel& ); bool pending_updates() const { return m_update_list_p != (sc_prim_channel*)sc_prim_channel::list_end || pending_async_updates(); } bool pending_async_updates() const; // synchronization with attached async suspending channels // - potentially blocks the current thread, if no explicitly // attached async channels have posted updates, yet // - returns true, if and only if there are NO pending synchronous // updates after resuming from the external synchronization bool async_suspend(); // (un)register a channel as being asynchronous // - presence of asynchronous channels leads async_suspend() to // block until any external async updates have been received // (instead of exiting the simulation upon starvation) bool async_attach_suspending(sc_prim_channel&); bool async_detach_suspending(sc_prim_channel&); private: // constructor explicit sc_prim_channel_registry( sc_simcontext& simc_ ); // destructor ~sc_prim_channel_registry(); // called during the update phase of a delta cycle void perform_update(); // called when construction is done bool construction_done(); // called when elaboration is done void elaboration_done(); // called before simulation starts void start_simulation(); // called after simulation ends void simulation_done(); // disabled sc_prim_channel_registry(); sc_prim_channel_registry( const sc_prim_channel_registry& ); sc_prim_channel_registry& operator = ( const sc_prim_channel_registry& ); private: class async_update_list; async_update_list* m_async_update_list_p; // external updates. int m_construction_done; // # of constructs. std::vector m_prim_channel_vec; // existing channels. sc_simcontext* m_simc; // simulator context. sc_prim_channel* m_update_list_p; // internal updates. }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel_registry // // Registry for all primitive channels. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- inline void sc_prim_channel_registry::request_update( sc_prim_channel& prim_channel_ ) { prim_channel_.m_update_next_p = m_update_list_p; m_update_list_p = &prim_channel_; } // ---------------------------------------------------------------------------- // CLASS : sc_prim_channel // // Abstract base class of all primitive channel classes. // ---------------------------------------------------------------------------- // request the update method (to be executed during the update phase) inline void sc_prim_channel::request_update() { if( ! m_update_next_p ) { m_registry->request_update( *this ); } } // request the update method from external to the simulator (to be executed // during the update phase) inline void sc_prim_channel::async_request_update() { m_registry->async_request_update(*this); } inline bool sc_prim_channel::async_attach_suspending() { return m_registry->async_attach_suspending(*this); } inline bool sc_prim_channel::async_detach_suspending() { return m_registry->async_detach_suspending(*this); } // called during the update phase of a delta cycle (if requested) inline void sc_prim_channel::perform_update() { update(); m_update_next_p = 0; } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte, Bishnupriya Bhattacharya, Cadence Design Systems, 25 August, 2003 Description of Modification: phase callbacks *****************************************************************************/ //$Log: sc_prim_channel.h,v $ //Revision 1.10 2011/08/26 21:38:32 acg // Philipp A. Hartmann: removed unused switch m_construction_done. // //Revision 1.9 2011/08/07 19:08:01 acg // Andy Goodrich: moved logs to end of file so line number synching works // better between versions. // //Revision 1.8 2011/05/09 04:07:37 acg // Philipp A. Hartmann: // (1) Restore hierarchy in all phase callbacks. // (2) Ensure calls to before_end_of_elaboration. // //Revision 1.7 2011/05/05 17:44:01 acg // Philip A. Hartmann: change in the name of pending_async_updates. // //Revision 1.6 2011/04/19 15:03:48 acg // Philipp A. Hartmann: remove ASYNC_UPDATE preprocessor check from header. // //Revision 1.5 2011/04/19 02:36:26 acg // Philipp A. Hartmann: new aysnc_update and mutex support. // //Revision 1.4 2011/04/05 20:48:09 acg // Andy Goodrich: changes to make sure that event(), posedge() and negedge() // only return true if the clock has not moved. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.3 2006/05/08 17:52:47 acg // Andy Goodrich: // (1) added David Long's forward declarations for friend functions, // methods, and operators to keep the Microsoft compiler happy. // (2) Added delta_count() method to sc_prim_channel for use by // sc_signal so that the friend declaration in sc_simcontext.h // can be for a non-templated class (i.e., sc_prim_channel.) // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/07/30 03:44:11 acg //Changes from 2.1. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_port.cpp0000644000175000017500000005341214342422106021664 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_port.cpp -- Base classes of all port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG AT THE END OF THE FILE *****************************************************************************/ #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_module.h" #include "sysc/kernel/sc_object_int.h" #include "sysc/kernel/sc_method_process.h" #include "sysc/kernel/sc_thread_process.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/utils/sc_utils_ids.h" #include "sysc/communication/sc_event_finder.h" #include "sysc/communication/sc_port.h" #include "sysc/communication/sc_signal_ifs.h" #include namespace sc_core { // ---------------------------------------------------------------------------- // STRUCT : sc_bind_elem // ---------------------------------------------------------------------------- struct sc_bind_elem { // constructors sc_bind_elem(); explicit sc_bind_elem( sc_interface* interface_ ); explicit sc_bind_elem( sc_port_base* parent_ ); sc_interface* iface; sc_port_base* parent; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // constructors sc_bind_elem::sc_bind_elem() : iface( 0 ), parent( 0 ) {} sc_bind_elem::sc_bind_elem( sc_interface* interface_ ) : iface( interface_ ), parent( 0 ) {} sc_bind_elem::sc_bind_elem( sc_port_base* parent_ ) : iface( 0 ), parent( parent_ ) {} // ---------------------------------------------------------------------------- // STRUCT : sc_bind_ef // ---------------------------------------------------------------------------- struct sc_bind_ef { // constructor sc_bind_ef( sc_process_b* , sc_event_finder* ); // destructor ~sc_bind_ef(); sc_process_b* handle; sc_event_finder* event_finder; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // constructor sc_bind_ef::sc_bind_ef( sc_process_b* handle_, sc_event_finder* event_finder_ ) : handle( handle_ ), event_finder( event_finder_ ) {} // destructor sc_bind_ef::~sc_bind_ef() { } // ---------------------------------------------------------------------------- // STRUCT : sc_bind_info // ---------------------------------------------------------------------------- struct sc_bind_info { typedef std::vector ef_vector; // constructor explicit sc_bind_info( int max_size_, sc_port_policy policy_=SC_ONE_OR_MORE_BOUND ); // destructor ~sc_bind_info(); int max_size() const; sc_port_policy policy() const; int size() const; int m_max_size; sc_port_policy m_policy; std::vector vec; bool has_parent; int last_add; bool is_leaf; bool complete; ef_vector thread_vec; ef_vector method_vec; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // constructor sc_bind_info::sc_bind_info( int max_size_, sc_port_policy policy_ ) : m_max_size( max_size_ ), m_policy( policy_ ), vec(), has_parent( false ), last_add( -1 ), is_leaf( true ), complete( false ), thread_vec(), method_vec() {} // destructor sc_bind_info::~sc_bind_info() { for( int i = size() - 1; i >= 0; -- i ) { delete vec[i]; } } int sc_bind_info::max_size() const { return m_max_size ? m_max_size : (int) vec.size(); } sc_port_policy sc_bind_info::policy() const { return m_policy; } int sc_bind_info::size() const { return vec.size(); } // ---------------------------------------------------------------------------- // CLASS : sc_port_base // // Abstract base class for class sc_port_b. // ---------------------------------------------------------------------------- // This method exists to get around a problem in VCC 6.0 where you cannot // have a friend class that is templated. So sc_port_b calls this class // instead of sc_process_b::add_static_event. void sc_port_base::add_static_event( sc_method_handle process_p, const sc_event& event ) const { process_p->add_static_event( event ); } void sc_port_base::add_static_event( sc_thread_handle process_p, const sc_event& event ) const { process_p->add_static_event( event ); } // return number of interfaces that will be bound, or are bound: int sc_port_base::bind_count() { if ( m_bind_info ) return m_bind_info->size(); else return interface_count(); } // error reporting void sc_port_base::report_error( const char* id, const char* add_msg ) const { std::stringstream msg; if (add_msg != 0) msg << add_msg << ": "; msg << "port '" << name() << "' (" << kind() << ")"; SC_REPORT_ERROR( id, msg.str().c_str() ); } // constructors sc_port_base::sc_port_base( int max_size_, sc_port_policy policy ) : sc_object( sc_gen_unique_name( "port" ) ), m_bind_info(NULL) { simcontext()->get_port_registry()->insert( this ); m_bind_info = new sc_bind_info( max_size_, policy ); } sc_port_base::sc_port_base( const char* name_, int max_size_, sc_port_policy policy ) : sc_object( name_ ), m_bind_info(NULL) { simcontext()->get_port_registry()->insert( this ); m_bind_info = new sc_bind_info( max_size_, policy ); } // destructor sc_port_base::~sc_port_base() { simcontext()->get_port_registry()->remove( this ); free_binding(); delete m_bind_info; } // bind interface to this port void sc_port_base::bind( sc_interface& interface_ ) { if( m_bind_info == 0 ) { // cannot bind an interface after elaboration report_error( SC_ID_BIND_IF_TO_PORT_, "simulation running" ); return; } m_bind_info->vec.push_back( new sc_bind_elem( &interface_ ) ); if( ! m_bind_info->has_parent ) { // add (cache) the interface add_interface( &interface_ ); m_bind_info->last_add ++; } } // bind parent port to this port void sc_port_base::bind( this_type& parent_ ) { if( m_bind_info == 0 ) { // cannot bind a parent port after elaboration report_error( SC_ID_BIND_PORT_TO_PORT_, "simulation running" ); return; } if( &parent_ == this ) { report_error( SC_ID_BIND_PORT_TO_PORT_, "same port" ); return; } // check if parent port is already bound to this port #if 0 for( int i = m_bind_info->size() - 1; i >= 0; -- i ) { if( &parent_ == m_bind_info->vec[i]->parent ) { report_error( SC_ID_BIND_PORT_TO_PORT_, "already bound" ); return; } } #endif // m_bind_info->vec.push_back( new sc_bind_elem( &parent_ ) ); m_bind_info->has_parent = true; parent_.m_bind_info->is_leaf = false; } // called by construction_done (null by default) void sc_port_base::before_end_of_elaboration() {} // called by elaboration_done (does nothing) void sc_port_base::end_of_elaboration() {} // called by sc_port_registry::start_simulation (does nothing by default) void sc_port_base::start_of_simulation() {} // called by sc_port_registry::simulation_done (does nothing by default) void sc_port_base::end_of_simulation() {} // called by class sc_module for positional binding int sc_port_base::pbind( sc_interface& interface_ ) { if( m_bind_info == 0 ) { // cannot bind an interface after elaboration report_error( SC_ID_BIND_IF_TO_PORT_, "simulation running" ); return -1; } if( m_bind_info->size() != 0 ) { // first interface already bound return 1; } return vbind( interface_ ); } int sc_port_base::pbind( sc_port_base& parent_ ) { if( m_bind_info == 0 ) { // cannot bind a parent port after elaboration report_error( SC_ID_BIND_PORT_TO_PORT_, "simulation running" ); return -1; } if( m_bind_info->size() != 0 ) { // first interface already bound return 1; } return vbind( parent_ ); } // called by the sc_sensitive* classes void sc_port_base::make_sensitive( sc_thread_handle handle_, sc_event_finder* event_finder_ ) const { sc_assert( m_bind_info != 0 ); m_bind_info->thread_vec.push_back( new sc_bind_ef( (sc_process_b*)handle_, event_finder_ ) ); } void sc_port_base::make_sensitive( sc_method_handle handle_, sc_event_finder* event_finder_ ) const { sc_assert( m_bind_info != 0 ); m_bind_info->method_vec.push_back( new sc_bind_ef( (sc_process_b*)handle_, event_finder_ ) ); } // support methods int sc_port_base::first_parent() { for( int i = 0; i < m_bind_info->size(); ++ i ) { if( m_bind_info->vec[i]->parent != 0 ) { return i; } } return -1; } void sc_port_base::insert_parent( int i ) { std::vector& vec = m_bind_info->vec; this_type* parent = vec[i]->parent; // IF OUR PARENT HAS NO BINDING THEN IGNORE IT: // // Note that the zeroing of the parent pointer must occur before this // test vec[i]->parent = 0; if ( parent->m_bind_info->vec.size() == 0 ) return; vec[i]->iface = parent->m_bind_info->vec[0]->iface; int n = parent->m_bind_info->size() - 1; if( n > 0 ) { // resize the bind vector (by adding new elements) for( int k = 0; k < n; ++ k ) { vec.push_back( new sc_bind_elem() ); } // move elements in the bind vector for( int k = m_bind_info->size() - n - 1; k > i; -- k ) { vec[k + n]->iface = vec[k]->iface; vec[k + n]->parent = vec[k]->parent; } // insert parent interfaces into the bind vector for( int k = i + 1; k <= i + n; ++ k ) { vec[k]->iface = parent->m_bind_info->vec[k - i]->iface; vec[k]->parent = 0; } } } // called when elaboration is done void sc_port_base::complete_binding() { // IF BINDING HAS ALREADY BEEN COMPLETED IGNORE THIS CALL: sc_assert( m_bind_info != 0 ); if( m_bind_info->complete ) { return; } // COMPLETE BINDING OF OUR PARENT PORTS SO THAT WE CAN USE THAT INFORMATION: int i = first_parent(); while( i >= 0 ) { m_bind_info->vec[i]->parent->complete_binding(); insert_parent( i ); i = first_parent(); } // LOOP OVER BINDING INFORMATION TO COMPLETE THE BINDING PROCESS: int size; for( int j = 0; j < m_bind_info->size(); ++ j ) { sc_interface* iface = m_bind_info->vec[j]->iface; // if the interface is zero this was for an unbound port. if ( iface == 0 ) continue; // add (cache) the interface if( j > m_bind_info->last_add ) { add_interface( iface ); } // only register "leaf" ports (ports without children) if( m_bind_info->is_leaf ) { iface->register_port( *this, if_typename() ); } // complete static sensitivity for methods size = m_bind_info->method_vec.size(); for( int k = 0; k < size; ++ k ) { sc_bind_ef* p = m_bind_info->method_vec[k]; const sc_event& event = ( p->event_finder != 0 ) ? p->event_finder->find_event(iface) : iface->default_event(); p->handle->add_static_event( event ); } // complete static sensitivity for threads size = m_bind_info->thread_vec.size(); for( int k = 0; k < size; ++ k ) { sc_bind_ef* p = m_bind_info->thread_vec[k]; const sc_event& event = ( p->event_finder != 0 ) ? p->event_finder->find_event(iface) : iface->default_event(); p->handle->add_static_event( event ); } } // MAKE SURE THE PROPER NUMBER OF BINDINGS OCCURRED: // // Make sure there are enough bindings, and not too many. int actual_binds = interface_count(); if ( actual_binds > m_bind_info->max_size() ) { std::stringstream msg; msg << actual_binds << " binds exceeds maximum of " << m_bind_info->max_size() << " allowed"; report_error( SC_ID_COMPLETE_BINDING_, msg.str().c_str() ); // may continue, if suppressed } switch ( m_bind_info->policy() ) { case SC_ONE_OR_MORE_BOUND: if ( actual_binds < 1 ) { report_error( SC_ID_COMPLETE_BINDING_, "port not bound" ); // may continue, if suppressed } break; case SC_ALL_BOUND: if ( actual_binds < m_bind_info->max_size() || actual_binds < 1 ) { std::stringstream msg; msg << actual_binds << " actual binds is less than required " << m_bind_info->max_size(); report_error( SC_ID_COMPLETE_BINDING_, msg.str().c_str() ); // may continue, if suppressed } break; default: // SC_ZERO_OR_MORE_BOUND: break; } // CLEAN UP: FREE BINDING STORAGE: free_binding(); m_bind_info->complete = true; } void sc_port_base::free_binding() { if( !m_bind_info ) return; int size = m_bind_info->method_vec.size(); for( int k = 0; k < size; ++ k ) { delete m_bind_info->method_vec[k]; } // clear and release storage sc_bind_info::ef_vector().swap(m_bind_info->method_vec); size = m_bind_info->thread_vec.size(); for( int k = 0; k < size; ++ k ) { delete m_bind_info->thread_vec[k]; } // clear and release storage sc_bind_info::ef_vector().swap(m_bind_info->thread_vec); } void sc_port_base::construction_done() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); before_end_of_elaboration(); } void sc_port_base::elaboration_done() { sc_assert( m_bind_info != 0 && m_bind_info->complete ); delete m_bind_info; m_bind_info = 0; sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); end_of_elaboration(); } void sc_port_base::start_simulation() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); start_of_simulation(); } void sc_port_base::simulation_done() { sc_module* parent = static_cast( get_parent_object() ); sc_object::hierarchy_scope scope( parent ); end_of_simulation(); } // ---------------------------------------------------------------------------- // CLASS : sc_port_registry // // Registry for all ports. // FOR INTERNAL USE ONLY! // ---------------------------------------------------------------------------- void sc_port_registry::insert( sc_port_base* port_ ) { if( sc_is_running() ) { port_->report_error( SC_ID_INSERT_PORT_, "simulation running" ); return; } if( m_simc->elaboration_done() ) { port_->report_error( SC_ID_INSERT_PORT_, "elaboration done" ); return; } #if defined(DEBUG_SYSTEMC) // check if port_ is already inserted for( int i = size() - 1; i >= 0; -- i ) { if( port_ == m_port_vec[i] ) { port_->report_error( SC_ID_INSERT_PORT_, "port already inserted" ); return; } } #endif // append the port to the current module's vector of ports sc_module* curr_module = m_simc->hierarchy_curr(); if( curr_module == 0 ) { port_->report_error( SC_ID_PORT_OUTSIDE_MODULE_ ); return; } curr_module->append_port( port_ ); // insert m_port_vec.push_back( port_ ); } void sc_port_registry::remove( sc_port_base* port_ ) { int i; for( i = size() - 1; i >= 0; -- i ) { if( port_ == m_port_vec[i] ) { break; } } if( i == -1 ) { port_->report_error( SC_ID_REMOVE_PORT_, "port not registered" ); return; } // remove m_port_vec[i] = m_port_vec.back(); m_port_vec.pop_back(); } // constructor sc_port_registry::sc_port_registry( sc_simcontext& simc_ ) : m_construction_done(0), m_port_vec(), m_simc( &simc_ ) { } // destructor sc_port_registry::~sc_port_registry() { } // called when construction is done bool sc_port_registry::construction_done() { if( size() == m_construction_done ) // nothing has been updated return true; for( int i = size()-1; i >= m_construction_done; --i ) { m_port_vec[i]->construction_done(); } m_construction_done = size(); return false; } // called when when elaboration is done void sc_port_registry::complete_binding() { for( int i = size() - 1; i >= 0; -- i ) { m_port_vec[i]->complete_binding(); } } // called when elaboration is done void sc_port_registry::elaboration_done() { complete_binding(); for( int i = size() - 1; i >= 0; -- i ) { m_port_vec[i]->elaboration_done(); } } // called before simulation begins void sc_port_registry::start_simulation() { for( int i = size() - 1; i >= 0; -- i ) { m_port_vec[i]->start_simulation(); } } // called after simulation ends void sc_port_registry::simulation_done() { for( int i = size() - 1; i >= 0; -- i ) { m_port_vec[i]->simulation_done(); } } // This is a static member function. void sc_port_registry::replace_port( sc_port_registry* /* registry */ ) { } void sc_warn_port_constructor() { static bool warn_port_constructor=true; if ( warn_port_constructor ) { warn_port_constructor = false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "interface and/or port binding in port constructors is deprecated" ); } } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Andy Goodrich, Forte Design Systems Bishnupriya Bhattacharya, Cadence Design Systems, 25 August, 2003 Description of Modification: phase callbacks Name, Affiliation, Date: Andy Goodrich, Forte Design Systems 12 December, 2005 Description of Modification: multiport binding policy changes *****************************************************************************/ // $Log: sc_port.cpp,v $ // Revision 1.8 2011/08/24 22:05:36 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.7 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.6 2011/08/07 19:08:01 acg // Andy Goodrich: moved logs to end of file so line number synching works // better between versions. // // Revision 1.5 2011/08/07 18:53:09 acg // Philipp A. Hartmann: add virtual instances of the bind function for // base classes to eliminate warning messages for clang platforms. // // Revision 1.4 2011/05/09 04:07:37 acg // Philipp A. Hartmann: // (1) Restore hierarchy in all phase callbacks. // (2) Ensure calls to before_end_of_elaboration. // // Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.2 2011/02/14 17:50:16 acg // Andy Goodrich: testing for sc_port and sc_export instantiations during // end of elaboration and issuing appropriate error messages. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.11 2006/08/29 23:34:59 acg // Andy Goodrich: added bind_count() method to allow users to determine which // ports are connected in before_end_of_elaboration(). // // Revision 1.10 2006/05/08 17:52:47 acg // Andy Goodrich: // (1) added David Long's forward declarations for friend functions, // methods, and operators to keep the Microsoft compiler happy. // (2) Added delta_count() method to sc_prim_channel for use by // sc_signal so that the friend declaration in sc_simcontext.h // can be for a non-templated class (i.e., sc_prim_channel.) // // Revision 1.9 2006/02/02 20:43:09 acg // Andy Goodrich: Added an existence linked list to sc_event_finder so that // the dynamically allocated instances can be freed after port binding // completes. This replaces the individual deletions in ~sc_bind_ef, as these // caused an exception if an sc_event_finder instance was used more than // once, due to a double freeing of the instance. // // Revision 1.7 2006/01/26 21:00:50 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // // Revision 1.6 2006/01/25 00:31:11 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.5 2006/01/24 20:46:31 acg // Andy Goodrich: changes to eliminate use of deprecated features. For instance, // using notify(SC_ZERO_TIME) in place of notify_delayed(). // // Revision 1.4 2006/01/13 20:41:59 acg // Andy Goodrich: Changes to add port registration to the things that are // checked when SC_NO_WRITE_CHECK is not defined. // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_mutex_if.h0000644000175000017500000000744314342422106022170 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_mutex_if.h -- The sc_mutex_if interface class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_MUTEX_IF_H #define SC_MUTEX_IF_H #include "sysc/communication/sc_interface.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_mutex_if // // The sc_mutex_if interface class. // ---------------------------------------------------------------------------- class SC_API sc_mutex_if : virtual public sc_interface { public: // the classical operations: lock(), trylock(), and unlock() // blocks until mutex could be locked virtual int lock() = 0; // returns -1 if mutex could not be locked virtual int trylock() = 0; // returns -1 if mutex was not locked by caller virtual int unlock() = 0; protected: // constructor sc_mutex_if() {} private: // disabled sc_mutex_if( const sc_mutex_if& ); sc_mutex_if& operator = ( const sc_mutex_if& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_scoped_lock // // The sc_scoped_lock class to lock (and automatically release) a mutex. // ---------------------------------------------------------------------------- //template< typename Lockable = sc_mutex_if > class SC_API sc_scoped_lock { public: //typedef Lockable lockable_type; typedef sc_mutex_if lockable_type; explicit sc_scoped_lock( lockable_type& mtx ) : m_ref(mtx) , m_active(true) { m_ref.lock(); } bool release() { if( m_active ) { m_ref.unlock(); m_active = false; return true; } return false; } ~sc_scoped_lock() { release(); } private: // disabled sc_scoped_lock( const sc_scoped_lock& ); sc_scoped_lock& operator=( const sc_scoped_lock& ); lockable_type& m_ref; bool m_active; }; } // namespace sc_core //$Log: sc_mutex_if.h,v $ //Revision 1.4 2011/08/26 20:45:41 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.3 2011/04/19 02:36:26 acg // Philipp A. Hartmann: new aysnc_update and mutex support. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.8 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_mutex.h0000644000175000017500000000654614342422106021515 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_mutex.h -- The sc_mutex primitive channel class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_MUTEX_H #define SC_MUTEX_H #include "sysc/kernel/sc_event.h" #include "sysc/kernel/sc_object.h" #include "sysc/kernel/sc_wait.h" #include "sysc/communication/sc_mutex_if.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_mutex // // The sc_mutex primitive channel class. // ---------------------------------------------------------------------------- class SC_API sc_mutex : public sc_mutex_if, public sc_object { public: // constructors and destructor sc_mutex(); explicit sc_mutex( const char* name_ ); virtual ~sc_mutex(); // interface methods // blocks until mutex could be locked virtual int lock(); // returns -1 if mutex could not be locked virtual int trylock(); // returns -1 if mutex was not locked by caller virtual int unlock(); virtual const char* kind() const { return "sc_mutex"; } protected: // support methods bool in_use() const { return ( m_owner != 0 ); } protected: sc_process_b* m_owner; sc_event m_free; private: // disabled sc_mutex( const sc_mutex& ); sc_mutex& operator = ( const sc_mutex& ); }; } // namespace sc_core //$Log: sc_mutex.h,v $ //Revision 1.4 2011/08/26 20:45:41 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2010/11/02 16:31:01 acg // Andy Goodrich: changed object derivation to use sc_object rather than // sc_prim_channel as the parent class. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_event_finder.h0000644000175000017500000001425514342422106023017 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_event_finder.h -- Original Author: Martin Janssen, Synopsys, Inc. Stan Y. Liao, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_EVENT_FINDER #define SC_EVENT_FINDER #include "sysc/communication/sc_port.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_event_finder // // Event finder base class. // ---------------------------------------------------------------------------- class SC_API sc_event_finder { friend class sc_simcontext; public: // helper to create an event finder on demand and cache in given pointer // - if cache_p is NULL, allocate a new sc_event_finder_t // for the given function, save allocated pointer in cache_p // - returns dereferenced cache_p pointer template static sc_event_finder& cached_create( sc_event_finder*& cache_p, const sc_port_base& port_ , const sc_event& (IF::*ef_p)() const ); const sc_port_base& port() const { return m_port; } // destructor (does nothing) virtual ~sc_event_finder(); virtual const sc_event& find_event( sc_interface* if_p = 0 ) const = 0; protected: // constructor sc_event_finder( const sc_port_base& ); // error reporting void report_error( const char* id, const char* add_msg = 0 ) const; private: const sc_port_base& m_port; // port providing the event. private: // disabled sc_event_finder(); sc_event_finder( const sc_event_finder& ); sc_event_finder& operator = ( const sc_event_finder& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_event_finder_t // // Interface specific event finder class. // ---------------------------------------------------------------------------- template class sc_event_finder_t : public sc_event_finder { public: // constructor sc_event_finder_t( const sc_port_base& port_, const sc_event& (IF::*event_method_) () const ) : sc_event_finder( port_ ), m_event_method( event_method_ ) {} // destructor (does nothing) virtual ~sc_event_finder_t() {} virtual const sc_event& find_event( sc_interface* if_p = 0 ) const; private: const sc_event& (IF::*m_event_method) () const; private: // disabled sc_event_finder_t(); sc_event_finder_t( const sc_event_finder_t& ); sc_event_finder_t& operator = ( const sc_event_finder_t& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII template inline sc_event_finder& sc_event_finder::cached_create( sc_event_finder*& cache_p , const sc_port_base& port_ , const sc_event& (IF::*ef_p)() const ) { if( !cache_p ) { cache_p = new sc_event_finder_t( port_, ef_p ); } sc_assert( &port_ == &cache_p->port() ); return *cache_p; } template inline const sc_event& sc_event_finder_t::find_event( sc_interface* if_p ) const { const IF* iface = ( if_p ) ? dynamic_cast( if_p ) : dynamic_cast( port().get_interface() ); if( iface == 0 ) { report_error( SC_ID_FIND_EVENT_, "port is not bound" ); return sc_event::none; } return (const_cast( iface )->*m_event_method) (); } } // namespace sc_core //$Log: sc_event_finder.h,v $ //Revision 1.3 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.4 2006/02/02 23:42:37 acg // Andy Goodrich: implemented a much better fix to the sc_event_finder // proliferation problem. This new version allocates only a single event // finder for each port for each type of event, e.g., pos(), neg(), and // value_change(). The event finder persists as long as the port does, // which is what the LRM dictates. Because only a single instance is // allocated for each event type per port there is not a potential // explosion of storage as was true in the 2.0.1/2.1 versions. // //Revision 1.3 2006/02/02 20:43:09 acg // Andy Goodrich: Added an existence linked list to sc_event_finder so that // the dynamically allocated instances can be freed after port binding // completes. This replaces the individual deletions in ~sc_bind_ef, as these // caused an exception if an sc_event_finder instance was used more than // once, due to a double freeing of the instance. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.10 2005/09/15 23:01:51 acg //Added std:: prefix to appropriate methods and types to get around //issues with the Edison Front End. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_resolved_ports.cpp0000644000175000017500000000724514342422106025312 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_resolved_ports.cpp -- The sc_signal_resolved port classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-08-20 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) // disable warning about explicit instantiation of sc_signal // without implementation in this translation unit (-> sc_signal.cpp) #pragma warning(disable:4661) #endif #include #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_process_handle.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/communication/sc_signal_resolved.h" #include "sysc/communication/sc_signal_resolved_ports.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_in_resolved // // The sc_signal_resolved input port class. // ---------------------------------------------------------------------------- // called when elaboration is done void sc_in_resolved::end_of_elaboration() { base_type::end_of_elaboration(); // check if bound channel is a resolved signal if( dynamic_cast( get_interface() ) == 0 ) { report_error( SC_ID_RESOLVED_PORT_NOT_BOUND_, 0 ); } } // ---------------------------------------------------------------------------- // CLASS : sc_inout_resolved // // The sc_signal_resolved input/output port class. // ---------------------------------------------------------------------------- // called when elaboration is done void sc_inout_resolved::end_of_elaboration() { base_type::end_of_elaboration(); // check if bound channel is a resolved signal if( dynamic_cast( get_interface() ) == 0 ) { report_error( SC_ID_RESOLVED_PORT_NOT_BOUND_, 0 ); } } // ---------------------------------------------------------------------------- // CLASS : sc_out_resolved // // The sc_signal_resolved output port class. // ---------------------------------------------------------------------------- } // namespace sc_core // $Log: sc_signal_resolved_ports.cpp,v $ // Revision 1.4 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.2 2011/02/07 19:16:50 acg // Andy Goodrich: changes for handling multiple writers. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/files.am0000644000175000017500000000630214342422106021124 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/communication/files.am -- ## Included from a Makefile.am to provide directory-specific information ## ## Original Author: Philipp A. Hartmann, Intel, 2015-11-24 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** ## Generic directory setup ## (should be kept in sync among all files.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: communication ## %C%: communication H_FILES += \ communication/sc_buffer.h \ communication/sc_clock.h \ communication/sc_clock_ports.h \ communication/sc_communication_ids.h \ communication/sc_event_finder.h \ communication/sc_event_queue.h \ communication/sc_export.h \ communication/sc_fifo.h \ communication/sc_fifo_ifs.h \ communication/sc_fifo_ports.h \ communication/sc_host_mutex.h \ communication/sc_host_semaphore.h \ communication/sc_interface.h \ communication/sc_mutex.h \ communication/sc_mutex_if.h \ communication/sc_port.h \ communication/sc_prim_channel.h \ communication/sc_semaphore.h \ communication/sc_semaphore_if.h \ communication/sc_signal.h \ communication/sc_signal_ifs.h \ communication/sc_signal_ports.h \ communication/sc_signal_resolved.h \ communication/sc_signal_resolved_ports.h \ communication/sc_signal_rv.h \ communication/sc_signal_rv_ports.h \ communication/sc_writer_policy.h CXX_FILES += \ communication/sc_clock.cpp \ communication/sc_event_finder.cpp \ communication/sc_event_queue.cpp \ communication/sc_export.cpp \ communication/sc_interface.cpp \ communication/sc_mutex.cpp \ communication/sc_port.cpp \ communication/sc_prim_channel.cpp \ communication/sc_semaphore.cpp \ communication/sc_signal.cpp \ communication/sc_signal_ports.cpp \ communication/sc_signal_resolved.cpp \ communication/sc_signal_resolved_ports.cpp INCDIRS += \ communication ## Taf! ## :vim:ft=automake: systemc-2.3.4/src/sysc/communication/sc_buffer.h0000644000175000017500000001322314342422106021612 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_buffer.h -- The sc_buffer primitive channel class. Like sc_signal, but *every* write causes an event. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_BUFFER_H #define SC_BUFFER_H #include "sysc/communication/sc_signal.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_buffer // // The sc_buffer primitive channel class. // ---------------------------------------------------------------------------- template< typename T, sc_writer_policy POL = SC_DEFAULT_WRITER_POLICY > class sc_buffer : public sc_signal { public: // typedefs typedef sc_buffer this_type; typedef sc_signal base_type; typedef T value_type; public: // constructors sc_buffer() : base_type( sc_gen_unique_name( "buffer" ) ) {} explicit sc_buffer( const char* name_ ) : base_type( name_ ) {} sc_buffer( const char* name_, const value_type& initial_value_ ) : base_type( name_, initial_value_ ) {} // interface methods // write the new value virtual void write( const T& ); // other methods virtual const char* kind() const { return "sc_buffer"; } // assignment this_type& operator = ( const value_type& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const sc_signal_in_if& a ) { base_type::operator=(a); return *this; } this_type& operator = ( const this_type& a ) { base_type::operator=(a); return *this; } protected: virtual void update(); private: // disabled sc_buffer( const this_type& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // write the new value template< typename T, sc_writer_policy POL > inline void sc_buffer::write( const T& value_ ) { if( !base_type::policy_type::check_write(this,true) ) return; this->m_new_val = value_; this->request_update(); } template< typename T, sc_writer_policy POL > inline void sc_buffer::update() { base_type::policy_type::update(); base_type::do_update(); } } // namespace sc_core #endif //$Log: sc_buffer.h,v $ //Revision 1.7 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.6 2011/04/08 18:22:45 acg // Philipp A. Hartmann: use the context of the primitive channel to get // the change stamp value. // //Revision 1.5 2011/04/05 20:48:09 acg // Andy Goodrich: changes to make sure that event(), posedge() and negedge() // only return true if the clock has not moved. // //Revision 1.4 2011/04/05 06:15:18 acg // Philipp A. Hartmann: sc_writer_policy: ignore no-ops in delta check. // //Revision 1.3 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.2 2010/12/07 19:50:36 acg // Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.8 2006/03/13 20:19:43 acg // Andy Goodrich: changed sc_event instances into pointers to sc_event instances // that are allocated as needed. This saves considerable storage for large // numbers of signals, etc. // //Revision 1.7 2006/01/26 21:00:49 acg // Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of // sc_event::notify_delayed() // //Revision 1.6 2006/01/24 20:46:31 acg //Andy Goodrich: changes to eliminate use of deprecated features. For instance, //using notify(SC_ZERO_TIME) in place of notify_delayed(). // //Revision 1.5 2006/01/19 19:18:25 acg //Andy Goodrich: eliminated check_writer in favor of inline code within the //write() method since we always execute the check_writer code even when //check writing is turned off. // //Revision 1.4 2006/01/19 00:30:57 acg //Andy Goodrich: Yet another implementation for disabling write checks on //signals. This version uses an environment variable, SC_SIGNAL_WRITE_CHECK, //that when set to DISABLE will turn off write checking. // //Revision 1.3 2006/01/13 18:47:20 acg //Reversed sense of multiwriter signal check. It now defaults to ON unless the //user defines SC_NO_WRITE_CHEK before inclusion of the file. // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.9 2005/06/10 22:43:55 acg //Added CVS change log annotation. // // Taf! systemc-2.3.4/src/sysc/communication/sc_interface.cpp0000644000175000017500000000547414342422106022645 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_interface.cpp -- Abstract base class of all interface classes. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #include "sysc/communication/sc_interface.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/kernel/sc_event.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_interface // // Abstract base class of all interface classes. // BEWARE: Direct inheritance from this class must be done virtual. // ---------------------------------------------------------------------------- // register a port with this interface (does nothing by default) void sc_interface::register_port( sc_port_base&, const char* ) {} // get the default event const sc_event& sc_interface::default_event() const { SC_REPORT_WARNING( SC_ID_NO_DEFAULT_EVENT_, 0 ); return sc_event::none; } // destructor (does nothing) sc_interface::~sc_interface() {} // constructor (does nothing) sc_interface::sc_interface() {} } // namespace sc_core // $Log: sc_interface.cpp,v $ // Revision 1.5 2011/08/26 20:45:40 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/03/12 21:07:42 acg // Andy Goodrich: changes to kernel generated event support. // // Revision 1.3 2011/03/06 15:55:08 acg // Andy Goodrich: Changes for named events. // // Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_signal_resolved.cpp0000644000175000017500000001135614342422106024061 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signal_resolved.cpp -- The resolved signal class. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) // disable warning about explicit instantiation of sc_signal // without implementation in this translation unit (-> sc_signal.cpp) #pragma warning(disable:4661) #endif #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_process_handle.h" #include "sysc/communication/sc_signal_resolved.h" namespace sc_core { // Note that we assume that two drivers driving the resolved signal to a 1 or // 0 is O.K. This might not be true for all technologies, but is certainly // true for CMOS, the predominant technology in use today. SC_API const sc_dt::sc_logic_value_t sc_logic_resolution_tbl[4][4] = { // 0 1 Z X { sc_dt::Log_0, sc_dt::Log_X, sc_dt::Log_0, sc_dt::Log_X }, // 0 { sc_dt::Log_X, sc_dt::Log_1, sc_dt::Log_1, sc_dt::Log_X }, // 1 { sc_dt::Log_0, sc_dt::Log_1, sc_dt::Log_Z, sc_dt::Log_X }, // Z { sc_dt::Log_X, sc_dt::Log_X, sc_dt::Log_X, sc_dt::Log_X } // X }; // ---------------------------------------------------------------------------- // FUNCTION : sc_logic_resolve // // Resolution function for sc_dt::sc_logic. // ---------------------------------------------------------------------------- // resolves sc_dt::sc_logic values and returns the resolved value static void sc_logic_resolve( sc_dt::sc_logic& result_, const std::vector& values_ ) { int sz = values_.size(); sc_assert( sz != 0 ); if( sz == 1 ) { result_ = values_[0]; return; } sc_dt::sc_logic_value_t res = values_[0].value(); for( int i = sz - 1; i > 0 && res != sc_dt::Log_X; -- i ) { res = sc_logic_resolution_tbl[res][values_[i].value()]; } result_ = res; } // ---------------------------------------------------------------------------- // CLASS : sc_signal_resolved // // The resolved signal class. // ---------------------------------------------------------------------------- // write the new value void sc_signal_resolved::write( const value_type& value_ ) { sc_process_b* cur_proc = sc_get_current_process_b(); bool value_changed = false; bool found = false; for( int i = m_proc_vec.size() - 1; i >= 0; -- i ) { if( cur_proc == m_proc_vec[i] ) { if( value_ != m_val_vec[i] ) { m_val_vec[i] = value_; value_changed = true; } found = true; break; } } if( ! found ) { m_proc_vec.push_back( cur_proc ); m_val_vec.push_back( value_ ); value_changed = true; } if( value_changed ) { request_update(); } } void sc_signal_resolved::update() { sc_logic_resolve( m_new_val, m_val_vec ); base_type::update(); } } // namespace sc_core // $Log: sc_signal_resolved.cpp,v $ // Revision 1.5 2011/08/26 20:45:44 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // // Revision 1.3 2011/02/07 19:16:50 acg // Andy Goodrich: changes for handling multiple writers. // // Revision 1.2 2011/01/20 16:52:15 acg // Andy Goodrich: changes for IEEE 1666 2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/03/21 00:00:27 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // // Revision 1.3 2006/01/13 18:47:42 acg // Added $Log command so that CVS comments are reproduced in the source. // // Taf! systemc-2.3.4/src/sysc/communication/sc_clock_ports.h0000644000175000017500000000450214342422106022663 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_clock_ports.h -- The clock ports. Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 CHANGE LOG IS AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_CLOCK_PORTS_H #define SC_CLOCK_PORTS_H #include "sysc/communication/sc_signal_ports.h" namespace sc_core { // ---------------------------------------------------------------------------- // The clock ports. // // (Provided for backward compatibility reasons.) // ---------------------------------------------------------------------------- typedef sc_in sc_in_clk; typedef sc_inout sc_inout_clk; typedef sc_out sc_out_clk; } // namespace sc_core //$Log: sc_clock_ports.h,v $ //Revision 1.3 2011/08/26 20:45:39 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // //Revision 1.2 2011/02/18 20:23:45 acg // Andy Goodrich: Copyright update. // //Revision 1.1.1.1 2006/12/15 20:20:04 acg //SystemC 2.3 // //Revision 1.2 2006/01/03 23:18:26 acg //Changed copyright to include 2006. // //Revision 1.1.1.1 2005/12/19 23:16:43 acg //First check in of SystemC 2.1 into its own archive. // //Revision 1.8 2005/06/10 22:43:55 acg //Added CVS change log annotation. // #endif // Taf! systemc-2.3.4/src/sysc/datatypes/0000755000175000017500000000000014342422106016633 5ustar carstencarstensystemc-2.3.4/src/sysc/datatypes/fx/0000755000175000017500000000000014342422106017250 5ustar carstencarstensystemc-2.3.4/src/sysc/datatypes/fx/sc_fxtype_params.cpp0000644000175000017500000000603114342422106023323 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxtype_params.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxtype_params.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/sc_fxtype_params.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_phash; } // namespace sc_core namespace sc_dt { template class SC_API sc_global; template class SC_API sc_context; // ---------------------------------------------------------------------------- // CLASS : sc_fxtype_params // // Fixed-point type parameters class. // ---------------------------------------------------------------------------- const std::string sc_fxtype_params::to_string() const { std::stringstream ss; print(ss); return ss.str(); } void sc_fxtype_params::print( ::std::ostream& os ) const { os << "(" << m_wl << "," << m_iwl << "," << m_q_mode << "," << m_o_mode << "," << m_n_bits << ")"; } void sc_fxtype_params::dump( ::std::ostream& os ) const { os << "sc_fxtype_params" << ::std::endl; os << "(" << ::std::endl; os << "wl = " << m_wl << ::std::endl; os << "iwl = " << m_iwl << ::std::endl; os << "q_mode = " << m_q_mode << ::std::endl; os << "o_mode = " << m_o_mode << ::std::endl; os << "n_bits = " << m_n_bits << ::std::endl; os << ")" << ::std::endl; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_rep.h0000644000175000017500000004442614342422106021244 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_rep.h - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_rep.h,v $ // Revision 1.6 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.5 2011/07/25 10:20:29 acg // Andy Goodrich: check in aftermath of call to automake. // // Revision 1.4 2010/12/07 20:09:08 acg // Andy Goodrich: Philipp Hartmann's constructor disambiguation fix // // Revision 1.3 2010/08/03 15:54:52 acg // Andy Goodrich: formatting. // // Revision 1.2 2010/03/15 18:29:01 acg // Andy Goodrich: Moved default argument specifications from friend // declarations to the actual function signatures. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/03/13 20:24:27 acg // Andy Goodrich: Addition of function declarations, e.g., neg_scfx_rep(), // to keep gcc 4.x happy. // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_REP_H #define SCFX_REP_H #include #include "sysc/datatypes/fx/scfx_mant.h" #include "sysc/datatypes/fx/scfx_params.h" #include "sysc/datatypes/fx/scfx_string.h" namespace sc_dt { // classes defined in this module class scfx_index; class scfx_rep; // forward class declarations class sc_bv_base; class sc_signed; class sc_unsigned; // function declarations SC_API void multiply( scfx_rep&, const scfx_rep&, const scfx_rep&, int max_wl = SC_DEFAULT_MAX_WL_ ); SC_API scfx_rep* neg_scfx_rep( const scfx_rep& ); SC_API scfx_rep* mult_scfx_rep( const scfx_rep&, const scfx_rep&, int max_wl = SC_DEFAULT_MAX_WL_ ); SC_API scfx_rep* div_scfx_rep( const scfx_rep&, const scfx_rep&, int max_wl = SC_DEFAULT_DIV_WL_ ); SC_API scfx_rep* add_scfx_rep( const scfx_rep&, const scfx_rep&, int max_wl = SC_DEFAULT_MAX_WL_ ); SC_API scfx_rep* sub_scfx_rep( const scfx_rep&, const scfx_rep&, int max_wl = SC_DEFAULT_MAX_WL_ ); SC_API scfx_rep* lsh_scfx_rep( const scfx_rep&, int ); SC_API scfx_rep* rsh_scfx_rep( const scfx_rep&, int ); SC_API int cmp_scfx_rep( const scfx_rep&, const scfx_rep& ); const int min_mant = 4; const int bits_in_int = sizeof(int) * CHAR_BIT; const int bits_in_word = sizeof(word) * CHAR_BIT; // ---------------------------------------------------------------------------- // CLASS : scfx_index // ---------------------------------------------------------------------------- class SC_API scfx_index { public: scfx_index( int wi_, int bi_ ) : m_wi( wi_ ), m_bi( bi_ ) {} int wi() const { return m_wi; } int bi() const { return m_bi; } void wi( int wi_ ) { m_wi = wi_; } private: int m_wi; int m_bi; }; // ---------------------------------------------------------------------------- // CLASS : scfx_rep // // Arbitrary-precision fixed-point implementation class. // ---------------------------------------------------------------------------- class SC_API scfx_rep { enum state { normal, infinity, not_a_number }; public: // constructors scfx_rep(); explicit scfx_rep( int ); explicit scfx_rep( unsigned int ); explicit scfx_rep( long ); explicit scfx_rep( unsigned long ); explicit scfx_rep( double ); explicit scfx_rep( const char* ); explicit scfx_rep( int64 ); explicit scfx_rep( uint64 ); explicit scfx_rep( const sc_signed& ); explicit scfx_rep( const sc_unsigned& ); // copy constructor scfx_rep( const scfx_rep& ); // destructor ~scfx_rep(); void* operator new( std::size_t ); void operator delete( void*, std::size_t ); void from_string( const char*, int ); double to_double() const; uint64 to_uint64() const; const char* to_string( sc_numrep, int, sc_fmt, const scfx_params* = 0 ) const; // assignment operator void operator = ( const scfx_rep& ); friend SC_API void multiply( scfx_rep&, const scfx_rep&, const scfx_rep&, int ); friend SC_API scfx_rep* neg_scfx_rep( const scfx_rep& ); friend SC_API scfx_rep* mult_scfx_rep( const scfx_rep&, const scfx_rep&, int ); friend SC_API scfx_rep* div_scfx_rep( const scfx_rep&, const scfx_rep&, int ); friend SC_API scfx_rep* add_scfx_rep( const scfx_rep&, const scfx_rep&, int ); friend SC_API scfx_rep* sub_scfx_rep( const scfx_rep&, const scfx_rep&, int ); friend SC_API scfx_rep* lsh_scfx_rep( const scfx_rep&, int ); friend SC_API scfx_rep* rsh_scfx_rep( const scfx_rep&, int ); void lshift( int ); void rshift( int ); friend SC_API int cmp_scfx_rep( const scfx_rep&, const scfx_rep& ); void cast( const scfx_params&, bool&, bool& ); bool is_neg() const; bool is_zero() const; bool is_nan() const; bool is_inf() const; bool is_normal() const; void set_zero( int = 1 ); void set_nan(); void set_inf( int ); bool get_bit( int ) const; bool set( int, const scfx_params& ); bool clear( int, const scfx_params& ); bool get_slice( int, int, const scfx_params&, sc_bv_base& ) const; bool set_slice( int, int, const scfx_params&, const sc_bv_base& ); void print( ::std::ostream& ) const; void dump( ::std::ostream& ) const; void get_type( int&, int&, sc_enc& ) const; friend scfx_rep* quantization_scfx_rep( const scfx_rep&, const scfx_params&, bool& ); friend scfx_rep* overflow_scfx_rep( const scfx_rep&, const scfx_params&, bool& ); bool rounding_flag() const; private: friend void align( const scfx_rep&, const scfx_rep&, int&, int&, scfx_mant_ref&, scfx_mant_ref& ); friend int compare_msw( const scfx_rep&, const scfx_rep& ); friend int compare_msw_ff( const scfx_rep& lhs, const scfx_rep& rhs ); unsigned int divide_by_ten(); int find_lsw() const; int find_msw() const; void find_sw(); void multiply_by_ten(); void normalize( int ); scfx_mant* resize( int, int ) const; void set_bin( int ); void set_oct( int, int ); void set_hex( int, int ); void shift_left( int ); void shift_right( int ); const scfx_index calc_indices( int ) const; void o_extend( const scfx_index&, sc_enc ); bool o_bit_at( const scfx_index& ) const; bool o_zero_left( const scfx_index& ) const; bool o_zero_right( const scfx_index& ) const; void o_set_low( const scfx_index&, sc_enc ); void o_set_high( const scfx_index&, const scfx_index&, sc_enc, int = 1 ); void o_set( const scfx_index&, const scfx_index&, sc_enc, bool ); void o_invert( const scfx_index& ); bool q_bit( const scfx_index& ) const; void q_clear( const scfx_index& ); void q_incr( const scfx_index& ); bool q_odd( const scfx_index& ) const; bool q_zero( const scfx_index& ) const; void resize_to( int, int = 0 ); int size() const; void toggle_tc(); friend void print_dec( scfx_string&, const scfx_rep&, int, sc_fmt ); friend void print_other( scfx_string&, const scfx_rep&, sc_numrep, int, sc_fmt, const scfx_params* ); void quantization( const scfx_params&, bool& ); void overflow( const scfx_params&, bool& ); friend int compare_abs( const scfx_rep&, const scfx_rep& ); void round( int ); private: scfx_mant m_mant; // mantissa (bits of the value). int m_wp; // index of highest order word in value. int m_sign; // sign of value. state m_state; // value state, e.g., normal, inf, etc. int m_msw; // index of most significant non-zero word. int m_lsw; // index of least significant non-zero word. bool m_r_flag; // true if rounding occurred. }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline void scfx_rep::set_zero( int sign ) { m_mant.clear(); m_wp = m_msw = m_lsw = 0; m_sign = sign; m_state = normal; } inline void scfx_rep::set_nan() { m_mant.resize_to( min_mant ); m_state = not_a_number; } inline void scfx_rep::set_inf( int sign ) { m_mant.resize_to( min_mant ); m_state = infinity; m_sign = sign; } // constructors inline scfx_rep::scfx_rep( const char* s ) : m_mant( min_mant ), m_wp( 2 ), m_sign( 1 ), m_state( normal ), m_msw(0), m_lsw(0), m_r_flag( false ) { from_string( s, SC_DEFAULT_CTE_WL_ ); } // destructor inline scfx_rep::~scfx_rep() {} // assignment operator inline void scfx_rep::operator = ( const scfx_rep& f ) { if( &f != this ) { m_mant = f.m_mant; m_wp = f.m_wp; m_sign = f.m_sign; m_state = f.m_state; m_msw = f.m_msw; m_lsw = f.m_lsw; round( SC_DEFAULT_MAX_WL_ ); } } inline scfx_rep* neg_scfx_rep( const scfx_rep& a ) { scfx_rep& c = *new scfx_rep( a ); c.m_sign = - c.m_sign; return &c; } inline scfx_rep* mult_scfx_rep( const scfx_rep& a, const scfx_rep& b, int max_wl ) { scfx_rep& c = *new scfx_rep; sc_dt::multiply( c, a, b, max_wl ); return &c; } inline scfx_rep* lsh_scfx_rep( const scfx_rep& a, int b ) { scfx_rep& c = *new scfx_rep( a ); c.lshift( b ); return &c; } inline scfx_rep* rsh_scfx_rep( const scfx_rep& a, int b ) { scfx_rep& c = *new scfx_rep( a ); c.rshift( b ); return &c; } inline int scfx_rep::size() const { return m_mant.size(); } inline bool scfx_rep::is_neg() const { return ( m_sign == -1 ); } inline bool scfx_rep::is_zero() const { if( m_state != normal ) return false; for( int i = 0; i < size(); i ++ ) { if( m_mant[i] ) return false; } return true; } inline bool scfx_rep::is_nan() const { return ( m_state == not_a_number ); } inline bool scfx_rep::is_inf() const { return ( m_state == infinity ); } inline bool scfx_rep::is_normal() const { return ( m_state == normal ); } inline scfx_rep* quantization_scfx_rep( const scfx_rep& a, const scfx_params& params, bool& q_flag ) { scfx_rep& c = *new scfx_rep( a ); c.quantization( params, q_flag ); return &c; } inline scfx_rep* overflow_scfx_rep( const scfx_rep& a, const scfx_params& params, bool& o_flag ) { scfx_rep& c = *new scfx_rep( a ); c.overflow( params, o_flag ); return &c; } inline bool scfx_rep::rounding_flag() const { return m_r_flag; } inline void scfx_rep::resize_to( int new_size, int restore ) { if( restore == -1 ) { int size_incr = new_size - size(); m_wp += size_incr; m_msw += size_incr; m_lsw += size_incr; } m_mant.resize_to( new_size, restore ); } inline const scfx_index scfx_rep::calc_indices( int n ) const { int wi = n / bits_in_word + m_wp; int bi = n % bits_in_word; if( bi < 0 ) { bi += bits_in_word; -- wi; } return scfx_index( wi, bi ); } inline void scfx_rep::o_extend( const scfx_index& x, sc_enc enc ) { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); if( enc == SC_US_ || ( m_mant[wi] & ( ((word)1) << bi ) ) == 0 ) { if( bi != bits_in_word - 1 ) m_mant[wi] &= ~( ((word)-1) << ( bi + 1 ) ); for( int i = wi + 1; i < size(); ++ i ) m_mant[i] = 0; m_sign = 1; } else { if( bi != bits_in_word - 1 ) m_mant[wi] |= ( ((word)-1) << ( bi + 1 ) ); for( int i = wi + 1; i < size(); ++ i ) m_mant[i] = static_cast( -1 ); m_sign = -1; } } inline bool scfx_rep::o_bit_at( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); return ( m_mant[wi] & ( ((word)1) << bi ) ) != 0; } inline bool scfx_rep::o_zero_left( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); bool zero = true; if( bi != bits_in_word - 1 ) zero = ( m_mant[wi] & ( ((word)-1) << ( bi + 1 ) ) ) == 0; for( int i = wi + 1; i < size(); ++ i ) zero = zero && m_mant[i] == 0; return zero; } inline bool scfx_rep::o_zero_right( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); bool zero = ( m_mant[wi] & ~( ((word)-1) << bi ) ) == 0; for( int i = wi - 1; i >= 0; -- i ) zero = zero && m_mant[i] == 0; return zero; } inline void scfx_rep::o_set_low( const scfx_index& x, sc_enc enc ) { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); m_mant.clear(); if( enc == SC_TC_ ) { m_mant[wi] |= ( ((word)1) << bi ); m_sign = -1; } else m_sign = 1; } inline void scfx_rep::o_set_high( const scfx_index& x, const scfx_index& x2, sc_enc enc, int sign ) { int wi = x.wi(); int bi = x.bi(); int wi2 = x2.wi(); int bi2 = x2.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); SC_ASSERT_( wi2 >= 0 && wi2 < size(), "word index out of range" ); int i; for( i = 0; i < size(); ++ i ) m_mant[i] = static_cast( -1 ); m_mant[wi] &= ~( ((word)-1) << bi ); for( i = wi + 1; i < size(); ++ i ) m_mant[i] = 0; m_mant[wi2] &= ( ((word)-1) << bi2 ); for( i = wi2 - 1; i >= 0; -- i ) m_mant[i] = 0; if( enc == SC_TC_ ) m_sign = sign; else { m_mant[wi] |= ( ((word)1) << bi ); m_sign = 1; } } inline void scfx_rep::o_set( const scfx_index& x, const scfx_index& x3, sc_enc enc, bool under ) { int wi = x.wi(); int bi = x.bi(); int wi3 = x3.wi(); int bi3 = x3.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); SC_ASSERT_( wi3 >= 0 && wi3 < size(), "word index out of range" ); if( bi3 != bits_in_word - 1 ) { if( under ) m_mant[wi3] &= ~( ((word)-1) << ( bi3 + 1 ) ); else m_mant[wi3] |= ( ((word)-1) << ( bi3 + 1 ) ); } for( int i = wi3 + 1; i < size(); ++ i ) { if( under ) m_mant[i] = 0; else m_mant[i] = static_cast( -1 ); } if( enc == SC_TC_ ) { if( under ) m_mant[wi] |= ( ((word)1) << bi ); else m_mant[wi] &= ~( ((word)1) << bi ); } } inline void scfx_rep::o_invert( const scfx_index& x2 ) { int wi2 = x2.wi(); int bi2 = x2.bi(); m_mant[wi2] ^= ( ((word)-1) << bi2 ); for( int i = wi2 + 1; i < size(); ++ i ) m_mant[i] = ~ m_mant[i]; } inline bool scfx_rep::q_bit( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); if( bi != 0 ) return ( m_mant[wi] & ( ((word)1) << ( bi - 1 ) ) ) != 0; else if( wi != 0 ) return ( m_mant[wi - 1] & ( ((word)1) << ( bits_in_word - 1 ) ) ) != 0; else return false; } inline void scfx_rep::q_clear( const scfx_index& x ) { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); m_mant[wi] &= ( ((word)-1) << bi ); for( int i = wi - 1; i >= 0; -- i ) m_mant[i] = 0; } inline void scfx_rep::q_incr( const scfx_index& x ) { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); word old_val = m_mant[wi]; m_mant[wi] += ( ((word)1) << bi ); if( m_mant[wi] <= old_val ) { if( wi + 1 == size() ) resize_to( size() + 1, 1 ); for( int i = wi + 1; i < size(); ++ i ) { if( ++ m_mant[i] != 0 ) break; } } } inline bool scfx_rep::q_odd( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); return ( m_mant[wi] & ( ((word)1) << bi ) ) != 0; } inline bool scfx_rep::q_zero( const scfx_index& x ) const { int wi = x.wi(); int bi = x.bi(); SC_ASSERT_( wi >= 0 && wi < size(), "word index out of range" ); bool zero; if( bi != 0 ) { zero = ( m_mant[wi] & ~( ((word)-1) << (bi - 1) ) ) == 0; for( int i = wi - 1; i >= 0; -- i ) zero = zero && m_mant[i] == 0; } else if( wi != 0 ) { zero = ( m_mant[wi - 1] & ~( ((word)-1) << (bits_in_word - 1) ) ) == 0; for( int i = wi - 2; i >= 0; -- i ) zero = zero && m_mant[i] == 0; } else zero = true; return zero; } inline int scfx_rep::find_lsw() const { for( int i = 0; i < size(); i ++ ) { if( m_mant[i] ) return i; } return 0; } inline int scfx_rep::find_msw() const { for( int i = size() - 1; i >= 0; i -- ) { if( m_mant[i] ) return i; } return 0; } inline void scfx_rep::find_sw() { m_lsw = find_lsw(); m_msw = find_msw(); } inline void scfx_rep::toggle_tc() { if( is_neg() ) { complement( m_mant, m_mant, m_mant.size() ); inc( m_mant ); } } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_context.h0000644000175000017500000001613114342422106021574 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_context.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_context.h,v $ // Revision 1.2 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.5 2006/05/26 20:36:52 acg // Andy Goodrich: added a using for sc_core::default_ptr_hash_fn to keep HP // aCC happy. // // Revision 1.4 2006/03/21 00:00:31 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_CONTEXT_H #define SC_CONTEXT_H #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/datatypes/fx/sc_fx_ids.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/utils/sc_hash.h" namespace sc_core { class sc_process_b; } using sc_core::default_ptr_hash_fn; // To keep HP aCC happy. namespace sc_dt { // classes defined in this module class sc_without_context; template class sc_global; template class sc_context; // ---------------------------------------------------------------------------- // CLASS : sc_without_context // // Empty class that is used for its type only. // ---------------------------------------------------------------------------- class SC_API sc_without_context {}; // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_global // // Template global variable class; singleton; co-routine safe. // ---------------------------------------------------------------------------- template class sc_global { sc_global(); void update(); public: static sc_global* instance(); const T*& value_ptr(); private: static sc_global* m_instance; sc_core::sc_phash m_map; void* m_proc; // context (current process or NULL) const T* m_value_ptr; }; // ---------------------------------------------------------------------------- // ENUM : sc_context_begin // // Enumeration of context begin options. // ---------------------------------------------------------------------------- enum sc_context_begin { SC_NOW, SC_LATER }; // ---------------------------------------------------------------------------- // CLASS : sc_context // // Template context class; co-routine safe. // ---------------------------------------------------------------------------- template class sc_context { // disabled sc_context( const sc_context& ); void* operator new( std::size_t ); public: explicit sc_context( const T&, sc_context_begin = SC_NOW ); ~sc_context(); void begin(); void end(); static const T& default_value(); const T& value() const; private: sc_context& operator=(const sc_context&) /* = delete */; const T m_value; const T*& m_def_value_ptr; const T* m_old_value_ptr; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_global // // Template global variable class; singleton; co-routine safe. // ---------------------------------------------------------------------------- template sc_global* sc_global::m_instance = 0; template inline sc_global::sc_global() : m_map() // use &m_instance as unique "non-process" key (NULL denotes 'sc_main' context) , m_proc( &m_instance ) , m_value_ptr( 0 ) {} template inline void sc_global::update() { void* p = sc_core::sc_get_current_process_b(); if( p != m_proc ) { const T* vp = m_map[p]; if( vp == 0 ) { vp = new T( sc_without_context() ); m_map.insert( p, vp ); } m_proc = p; m_value_ptr = vp; } } template inline sc_global* sc_global::instance() { if( m_instance == 0 ) { m_instance = new sc_global; } return m_instance; } template inline const T*& sc_global::value_ptr() { update(); return m_value_ptr; } // ---------------------------------------------------------------------------- // CLASS : sc_context // // Template context class; co-routine safe. // ---------------------------------------------------------------------------- template inline sc_context::sc_context( const T& value_, sc_context_begin begin_ ) : m_value( value_ ), m_def_value_ptr( sc_global::instance()->value_ptr() ), m_old_value_ptr( 0 ) { if( begin_ == SC_NOW ) { m_old_value_ptr = m_def_value_ptr; m_def_value_ptr = &m_value; } } template inline sc_context::~sc_context() { if( m_old_value_ptr != 0 ) { m_def_value_ptr = m_old_value_ptr; m_old_value_ptr = 0; } } template inline void sc_context::begin() { if( m_old_value_ptr == 0 ) { m_old_value_ptr = m_def_value_ptr; m_def_value_ptr = &m_value; } else { SC_REPORT_ERROR( sc_core::SC_ID_CONTEXT_BEGIN_FAILED_, 0 ); } } template inline void sc_context::end() { if( m_old_value_ptr != 0 ) { m_def_value_ptr = m_old_value_ptr; m_old_value_ptr = 0; } else { SC_REPORT_ERROR( sc_core::SC_ID_CONTEXT_END_FAILED_, 0 ); } } template inline const T& sc_context::default_value() { return *sc_global::instance()->value_ptr(); } template inline const T& sc_context::value() const { return m_value; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_other_defs.h0000644000175000017500000002246514342422106022577 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_other_defs.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_other_defs.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_OTHER_DEFS_H #define SCFX_OTHER_DEFS_H #include "sysc/datatypes/fx/sc_fx_ids.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/tracing/sc_trace.h" namespace sc_dt { #ifdef SC_INCLUDE_FX // ---------------------------------------------------------------------------- // CLASS : sc_signed // ---------------------------------------------------------------------------- // assignment operators inline const sc_signed& sc_signed::operator = ( const sc_fxval& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_signed::operator = ( const sc_fxval& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_signed& sc_signed::operator = ( const sc_fxval_fast& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_signed::operator = ( const sc_fxval_fast& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_signed& sc_signed::operator = ( const sc_fxnum& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_signed::operator = ( const sc_fxnum& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_signed& sc_signed::operator = ( const sc_fxnum_fast& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_signed::operator = ( const sc_fxnum_fast& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned // ---------------------------------------------------------------------------- // assignment operators inline const sc_unsigned& sc_unsigned::operator = ( const sc_fxval& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_unsigned::operator = ( const sc_fxval& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_unsigned& sc_unsigned::operator = ( const sc_fxval_fast& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_unsigned::operator = ( const sc_fxval_fast& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_unsigned& sc_unsigned::operator = ( const sc_fxnum& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_unsigned::operator = ( const sc_fxnum& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } inline const sc_unsigned& sc_unsigned::operator = ( const sc_fxnum_fast& v ) { if( ! v.is_normal() ) /* also triggers OBSERVER_READ call */ { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_unsigned::operator = ( const sc_fxnum_fast& )" ); return *this; } for( int i = 0; i < length(); ++ i ) (*this)[i] = v.get_bit( i ); return *this; } // ---------------------------------------------------------------------------- // CLASS : sc_int_base // ---------------------------------------------------------------------------- // assignment operators inline sc_int_base& sc_int_base::operator = ( const sc_fxval& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_int_base::operator = ( const sc_fxval& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_int_base& sc_int_base::operator = ( const sc_fxval_fast& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_int_base::operator = ( const sc_fxval_fast& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_int_base& sc_int_base::operator = ( const sc_fxnum& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_int_base::operator = ( const sc_fxnum& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_int_base& sc_int_base::operator = ( const sc_fxnum_fast& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_int_base::operator = ( const sc_fxnum_fast& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_base // ---------------------------------------------------------------------------- // assignment operators inline sc_uint_base& sc_uint_base::operator = ( const sc_fxval& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_uint_base::operator = ( const sc_fxval& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_uint_base& sc_uint_base::operator = ( const sc_fxval_fast& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_uint_base::operator = ( const sc_fxval_fast& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_uint_base& sc_uint_base::operator = ( const sc_fxnum& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_uint_base::operator = ( const sc_fxnum& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } inline sc_uint_base& sc_uint_base::operator = ( const sc_fxnum_fast& v ) { if( ! v.is_normal() ) { /* also triggers OBSERVER_READ call */ SC_REPORT_ERROR( sc_core::SC_ID_INVALID_FX_VALUE_, "sc_uint_base::operator = ( const sc_fxnum_fast& )" ); return *this; } for( int i = 0; i < m_len; ++ i ) { set( i, v.get_bit( i ) ); } extend_sign(); return *this; } #endif } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxnum.cpp0000644000175000017500000004747014342422106021612 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxnum.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxnum.cpp,v $ // Revision 1.3 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.2 2010/12/07 20:09:08 acg // Andy Goodrich: Philipp Hartmann's constructor disambiguation fix // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include #include "sysc/datatypes/fx/sc_fxnum.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_bitref / sc_fxnum_bitref_r // // Proxy class for bit-selection in class sc_fxnum, behaves like sc_bit. // ---------------------------------------------------------------------------- bool sc_fxnum_bitref_r::get() const { return m_num.get_bit( m_idx ); } void sc_fxnum_bitref::set( bool high ) { m_num.set_bit( m_idx, high ); } // print or dump content void sc_fxnum_bitref_r::print( ::std::ostream& os ) const { os << get(); } void sc_fxnum_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } void sc_fxnum_bitref_r::dump( ::std::ostream& os ) const { os << "sc_fxnum_bitref" << ::std::endl; os << "(" << ::std::endl; os << "num = "; m_num.dump( os ); os << "idx = " << m_idx << ::std::endl; os << ")" << ::std::endl; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_bitref / sc_fxnum_fast_bitref_r // // Proxy class for bit-selection in class sc_fxnum_fast, behaves like sc_bit. // ---------------------------------------------------------------------------- bool sc_fxnum_fast_bitref_r::get() const { return m_num.get_bit( m_idx ); } void sc_fxnum_fast_bitref::set( bool high ) { m_num.set_bit( m_idx, high ); } // print or dump content void sc_fxnum_fast_bitref_r::print( ::std::ostream& os ) const { os << get(); } void sc_fxnum_fast_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } void sc_fxnum_fast_bitref_r::dump( ::std::ostream& os ) const { os << "sc_fxnum_fast_bitref" << ::std::endl; os << "(" << ::std::endl; os << "num = "; m_num.dump( os ); os << "idx = " << m_idx << ::std::endl; os << ")" << ::std::endl; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_subref // // Proxy class for part-selection in class sc_fxnum, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- bool sc_fxnum_subref_r::get() const { return m_num.get_slice( m_from, m_to, m_bv ); } bool sc_fxnum_subref::set() { return m_num.set_slice( m_from, m_to, m_bv ); } // print or dump content void sc_fxnum_subref_r::print( ::std::ostream& os ) const { get(); m_bv.print( os ); } void sc_fxnum_subref::scan( ::std::istream& is ) { m_bv.scan( is ); set(); } void sc_fxnum_subref_r::dump( ::std::ostream& os ) const { os << "sc_fxnum_subref" << ::std::endl; os << "(" << ::std::endl; os << "num = "; m_num.dump( os ); os << "from = " << m_from << ::std::endl; os << "to = " << m_to << ::std::endl; os << ")" << ::std::endl; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_subref / sc_fxnum_fast_subref_r // // Proxy class for part-selection in class sc_fxnum_fast, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- bool sc_fxnum_fast_subref_r::get() const { return m_num.get_slice( m_from, m_to, m_bv ); } bool sc_fxnum_fast_subref::set() { return m_num.set_slice( m_from, m_to, m_bv ); } // print or dump content void sc_fxnum_fast_subref_r::print( ::std::ostream& os ) const { get(); m_bv.print( os ); } void sc_fxnum_fast_subref::scan( ::std::istream& is ) { m_bv.scan( is ); set(); } void sc_fxnum_fast_subref_r::dump( ::std::ostream& os ) const { os << "sc_fxnum_fast_subref" << ::std::endl; os << "(" << ::std::endl; os << "num = "; m_num.dump( os ); os << "from = " << m_from << ::std::endl; os << "to = " << m_to << ::std::endl; os << ")" << ::std::endl; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum // // Base class for the fixed-point types; arbitrary precision. // ---------------------------------------------------------------------------- // explicit conversion to character string const std::string sc_fxnum::to_string() const { return std::string( m_rep->to_string( SC_DEC, -1, SC_F, &m_params ) ); } const std::string sc_fxnum::to_string( sc_numrep numrep ) const { return std::string( m_rep->to_string( numrep, -1, SC_F, &m_params ) ); } const std::string sc_fxnum::to_string( sc_numrep numrep, bool w_prefix ) const { return std::string( m_rep->to_string( numrep, (w_prefix ? 1 : 0), SC_F, &m_params ) ); } const std::string sc_fxnum::to_string( sc_fmt fmt ) const { return std::string( m_rep->to_string( SC_DEC, -1, fmt, &m_params ) ); } const std::string sc_fxnum::to_string( sc_numrep numrep, sc_fmt fmt ) const { return std::string( m_rep->to_string( numrep, -1, fmt, &m_params ) ); } const std::string sc_fxnum::to_string( sc_numrep numrep, bool w_prefix, sc_fmt fmt ) const { return std::string( m_rep->to_string( numrep, (w_prefix ? 1 : 0), fmt, &m_params ) ); } const std::string sc_fxnum::to_dec() const { return std::string( m_rep->to_string( SC_DEC, -1, SC_F, &m_params ) ); } const std::string sc_fxnum::to_bin() const { return std::string( m_rep->to_string( SC_BIN, -1, SC_F, &m_params ) ); } const std::string sc_fxnum::to_oct() const { return std::string( m_rep->to_string( SC_OCT, -1, SC_F, &m_params ) ); } const std::string sc_fxnum::to_hex() const { return std::string( m_rep->to_string( SC_HEX, -1, SC_F, &m_params ) ); } // print or dump content void sc_fxnum::print( ::std::ostream& os ) const { os << m_rep->to_string( SC_DEC, -1, SC_F, &m_params ); } void sc_fxnum::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } void sc_fxnum::dump( ::std::ostream& os ) const { os << "sc_fxnum" << ::std::endl; os << "(" << ::std::endl; os << "rep = "; m_rep->dump( os ); os << "params = "; m_params.dump( os ); os << "q_flag = " << m_q_flag << ::std::endl; os << "o_flag = " << m_o_flag << ::std::endl; // TO BE COMPLETED // os << "observer = "; // if( m_observer != 0 ) // m_observer->dump( os ); // else // os << "0" << ::std::endl; os << ")" << ::std::endl; } sc_fxnum_observer* sc_fxnum::lock_observer() const { SC_ASSERT_( m_observer != 0, "lock observer failed" ); sc_fxnum_observer* tmp = m_observer; m_observer = 0; return tmp; } void sc_fxnum::unlock_observer( sc_fxnum_observer* observer_ ) const { SC_ASSERT_( observer_ != 0, "unlock observer failed" ); m_observer = observer_; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast // // Base class for the fixed-point types; limited precision. // ---------------------------------------------------------------------------- static void quantization( double& c, const scfx_params& params, bool& q_flag ) { int fwl = params.wl() - params.iwl(); double scale = scfx_pow2( fwl ); double val = scale * c; double int_part; double frac_part = modf( val, &int_part ); q_flag = ( frac_part != 0.0 ); if( q_flag ) { val = int_part; switch( params.q_mode() ) { case SC_TRN: // truncation { if( c < 0.0 ) val -= 1.0; break; } case SC_RND: // rounding to plus infinity { if( frac_part >= 0.5 ) val += 1.0; else if( frac_part < -0.5 ) val -= 1.0; break; } case SC_TRN_ZERO: // truncation to zero { break; } case SC_RND_INF: // rounding to infinity { if( frac_part >= 0.5 ) val += 1.0; else if( frac_part <= -0.5 ) val -= 1.0; break; } case SC_RND_CONV: // convergent rounding { if( frac_part > 0.5 || ( frac_part == 0.5 && fmod( int_part, 2.0 ) != 0.0 ) ) val += 1.0; else if( frac_part < -0.5 || ( frac_part == -0.5 && fmod( int_part, 2.0 ) != 0.0 ) ) val -= 1.0; break; } case SC_RND_ZERO: // rounding to zero { if( frac_part > 0.5 ) val += 1.0; else if( frac_part < -0.5 ) val -= 1.0; break; } case SC_RND_MIN_INF: // rounding to minus infinity { if( frac_part > 0.5 ) val += 1.0; else if( frac_part <= -0.5 ) val -= 1.0; break; } default: ; } } val /= scale; c = val; } static void overflow( double& c, const scfx_params& params, bool& o_flag ) { int iwl = params.iwl(); int fwl = params.wl() - iwl; double full_circle = scfx_pow2( iwl ); double resolution = scfx_pow2( -fwl ); double low, high; if( params.enc() == SC_TC_ ) { high = full_circle / 2.0 - resolution; if( params.o_mode() == SC_SAT_SYM ) low = - high; else low = - full_circle / 2.0; } else { low = 0.0; high = full_circle - resolution; } double val = c; sc_fxval_fast c2(c); bool under = ( val < low ); bool over = ( val > high ); o_flag = ( under || over ); if( o_flag ) { switch( params.o_mode() ) { case SC_WRAP: // wrap-around { int n_bits = params.n_bits(); if( n_bits == 0 ) { // wrap-around all 'wl' bits val -= floor( val / full_circle ) * full_circle; if( val > high ) val -= full_circle; } else if( n_bits < params.wl() ) { double X = scfx_pow2( iwl - n_bits ); // wrap-around least significant 'wl - n_bits' bits val -= floor( val / X ) * X; if( val > ( X - resolution ) ) val -= X; // saturate most significant 'n_bits' bits if( under ) val += low; else { if( params.enc() == SC_TC_ ) val += full_circle / 2.0 - X; else val += full_circle - X; } } else { // saturate all 'wl' bits if( under ) val = low; else val = high; } break; } case SC_SAT: // saturation case SC_SAT_SYM: // symmetrical saturation { if( under ) val = low; else val = high; break; } case SC_SAT_ZERO: // saturation to zero { val = 0.0; break; } case SC_WRAP_SM: // sign magnitude wrap-around { SC_ERROR_IF_( params.enc() == SC_US_, sc_core::SC_ID_WRAP_SM_NOT_DEFINED_ ); int n_bits = params.n_bits(); if( n_bits == 0 ) { // invert conditionally if( c2.get_bit( iwl ) != c2.get_bit( iwl - 1 ) ) val = -val - resolution; // wrap-around all 'wl' bits val -= floor( val / full_circle ) * full_circle; if( val > high ) val -= full_circle; } else if( n_bits == 1 ) { // invert conditionally if( c2.is_neg() != c2.get_bit( iwl - 1 ) ) val = -val - resolution; // wrap-around all 'wl' bits val -= floor( val / full_circle ) * full_circle; if( val > high ) val -= full_circle; } else if( n_bits < params.wl() ) { // invert conditionally if( c2.is_neg() == c2.get_bit( iwl - n_bits ) ) val = -val - resolution; double X = scfx_pow2( iwl - n_bits ); // wrap-around least significant 'wl - n_bits' bits val -= floor( val / X ) * X; if( val > ( X - resolution ) ) val -= X; // saturate most significant 'n_bits' bits if( under ) val += low; else val += full_circle / 2.0 - X; } else { // saturate all 'wl' bits if( under ) val = low; else val = high; } break; } default: ; } c = val; } } void sc_fxnum_fast::cast() { scfx_ieee_double id( m_val ); SC_ERROR_IF_( id.is_nan() || id.is_inf(), sc_core::SC_ID_INVALID_FX_VALUE_); if( m_params.cast_switch() == SC_ON ) { m_q_flag = false; m_o_flag = false; // check for special cases if( id.is_zero() ) { if( id.negative() != 0 ) m_val = -m_val; return; } // perform casting sc_dt::quantization( m_val, m_params, m_q_flag ); sc_dt::overflow( m_val, m_params, m_o_flag ); // check for special case: -0 id = m_val; if( id.is_zero() && id.negative() != 0 ) { m_val = -m_val; } // check for special case: NaN of Inf if( id.is_nan() || id.is_inf() ) { m_val = 0.0; } } } // defined in sc_fxval.cpp; extern const char* to_string( const scfx_ieee_double&, sc_numrep, int, sc_fmt, const scfx_params* = 0 ); // explicit conversion to character string const std::string sc_fxnum_fast::to_string() const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_string( sc_numrep numrep ) const { return std::string( sc_dt::to_string( m_val, numrep, -1, SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_string( sc_numrep numrep, bool w_prefix ) const { return std::string( sc_dt::to_string( m_val, numrep, (w_prefix ? 1 : 0), SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_string( sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, fmt, &m_params ) ); } const std::string sc_fxnum_fast::to_string( sc_numrep numrep, sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, numrep, -1, fmt, &m_params ) ); } const std::string sc_fxnum_fast::to_string( sc_numrep numrep, bool w_prefix, sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, numrep, (w_prefix ? 1 : 0), fmt, &m_params ) ); } const std::string sc_fxnum_fast::to_dec() const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_bin() const { return std::string( sc_dt::to_string( m_val, SC_BIN, -1, SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_oct() const { return std::string( sc_dt::to_string( m_val, SC_OCT, -1, SC_F, &m_params ) ); } const std::string sc_fxnum_fast::to_hex() const { return std::string( sc_dt::to_string( m_val, SC_HEX, -1, SC_F, &m_params ) ); } // print or dump content void sc_fxnum_fast::print( ::std::ostream& os ) const { os << sc_dt::to_string( m_val, SC_DEC, -1, SC_F, &m_params ); } void sc_fxnum_fast::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } void sc_fxnum_fast::dump( ::std::ostream& os ) const { os << "sc_fxnum_fast" << ::std::endl; os << "(" << ::std::endl; os << "val = " << m_val << ::std::endl; os << "params = "; m_params.dump( os ); os << "q_flag = " << m_q_flag << ::std::endl; os << "o_flag = " << m_o_flag << ::std::endl; // TO BE COMPLETED // os << "observer = "; // if( m_observer != 0 ) // m_observer->dump( os ); // else // os << "0" << ::std::endl; os << ")" << ::std::endl; } // internal use only; bool sc_fxnum_fast::get_bit( int i ) const { scfx_ieee_double id( m_val ); if( id.is_zero() || id.is_nan() || id.is_inf() ) return false; // convert to two's complement unsigned int m0 = id.mantissa0(); unsigned int m1 = id.mantissa1(); if( id.is_normal() ) m0 += 1U << 20; if( id.negative() != 0 ) { m0 = ~ m0; m1 = ~ m1; unsigned int tmp = m1; m1 += 1U; if( m1 <= tmp ) m0 += 1U; } // get the right bit int j = i - id.exponent(); if( ( j += 20 ) >= 32 ) return ( ( m0 & 1U << 31 ) != 0 ); else if( j >= 0 ) return ( ( m0 & 1U << j ) != 0 ); else if( ( j += 32 ) >= 0 ) return ( ( m1 & 1U << j ) != 0 ); else return false; } bool sc_fxnum_fast::set_bit( int i, bool high ) { scfx_ieee_double id( m_val ); if( id.is_nan() || id.is_inf() ) return false; if( high ) { if( get_bit( i ) ) return true; if( m_params.enc() == SC_TC_ && i == m_params.iwl() - 1 ) m_val -= scfx_pow2( i ); else m_val += scfx_pow2( i ); } else { if( ! get_bit( i ) ) return true; if( m_params.enc() == SC_TC_ && i == m_params.iwl() - 1 ) m_val += scfx_pow2( i ); else m_val -= scfx_pow2( i ); } return true; } bool sc_fxnum_fast::get_slice( int i, int j, sc_bv_base& bv ) const { scfx_ieee_double id( m_val ); if( id.is_nan() || id.is_inf() ) return false; // convert to two's complement unsigned int m0 = id.mantissa0(); unsigned int m1 = id.mantissa1(); if( id.is_normal() ) m0 += 1U << 20; if( id.negative() != 0 ) { m0 = ~ m0; m1 = ~ m1; unsigned int tmp = m1; m1 += 1U; if( m1 <= tmp ) m0 += 1U; } // get the bits int l = j; for( int k = 0; k < bv.length(); ++ k ) { bool b = false; int n = l - id.exponent(); if( ( n += 20 ) >= 32 ) b = ( ( m0 & 1U << 31 ) != 0 ); else if( n >= 0 ) b = ( ( m0 & 1U << n ) != 0 ); else if( ( n += 32 ) >= 0 ) b = ( ( m1 & 1U << n ) != 0 ); bv[k] = b; if( i >= j ) ++ l; else -- l; } return true; } bool sc_fxnum_fast::set_slice( int i, int j, const sc_bv_base& bv ) { scfx_ieee_double id( m_val ); if( id.is_nan() || id.is_inf() ) return false; // set the bits int l = j; for( int k = 0; k < bv.length(); ++ k ) { if( bv[k].to_bool() ) { if( ! get_bit( l ) ) { if( m_params.enc() == SC_TC_ && l == m_params.iwl() - 1 ) m_val -= scfx_pow2( l ); else m_val += scfx_pow2( l ); } } else { if( get_bit( l ) ) { if( m_params.enc() == SC_TC_ && l == m_params.iwl() - 1 ) m_val += scfx_pow2( l ); else m_val -= scfx_pow2( l ); } } if( i >= j ) ++ l; else -- l; } return true; } sc_fxnum_fast_observer* sc_fxnum_fast::lock_observer() const { SC_ASSERT_( m_observer != 0, "lock observer failed" ); sc_fxnum_fast_observer* tmp = m_observer; m_observer = 0; return tmp; } void sc_fxnum_fast::unlock_observer( sc_fxnum_fast_observer* observer_ ) const { SC_ASSERT_( observer_ != 0, "unlock observer failed" ); m_observer = observer_; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_mant.h0000644000175000017500000002315514342422106021411 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_mant.h - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_mant.h,v $ // Revision 1.2 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_MANT_H #define SCFX_MANT_H #include "sysc/datatypes/fx/scfx_ieee.h" #include "sysc/datatypes/fx/scfx_utils.h" #include "sysc/kernel/sc_macros.h" namespace sc_dt { // classes defined in this module class scfx_mant; class scfx_mant_ref; typedef unsigned int word; // Using int because of 64-bit machines. typedef unsigned short half_word; // ---------------------------------------------------------------------------- // CLASS : scfx_mant // // Mantissa class. // ---------------------------------------------------------------------------- class SC_API scfx_mant { word* m_array; int m_size; public: explicit scfx_mant( std::size_t ); scfx_mant( const scfx_mant& ); scfx_mant& operator = ( const scfx_mant& ); ~scfx_mant(); void clear(); void resize_to( int, int = 0 ); int size() const; word operator [] ( int ) const; word& operator [] ( int ); half_word half_at( int ) const; half_word& half_at( int ); half_word* half_addr( int = 0 ) const; private: static word* alloc( std::size_t ); static void free( word*, std::size_t ); static word* alloc_word( std::size_t size ); static void free_word( word* array, std::size_t size ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline int scfx_mant::size() const { return m_size; } inline word* scfx_mant::alloc( std::size_t size ) { #if defined( SC_BIG_ENDIAN ) return alloc_word( size ) + ( size - 1 ); #elif defined( SC_LITTLE_ENDIAN ) return alloc_word( size ); #endif } inline void scfx_mant::free( word* mant, std::size_t size ) { #if defined( SC_BIG_ENDIAN ) free_word( mant - ( size - 1 ), size ); #elif defined( SC_LITTLE_ENDIAN ) free_word( mant, size ); #endif } inline word scfx_mant::operator[]( int i ) const { SC_ASSERT_( i >= 0 && i < m_size, "mantissa index out of range" ); #if defined( SC_BIG_ENDIAN ) return m_array[-i]; #elif defined( SC_LITTLE_ENDIAN ) return m_array[i]; #endif } inline word& scfx_mant::operator[]( int i ) { SC_ASSERT_( i >= 0 && i < m_size, "mantissa index out of range" ); #if defined( SC_BIG_ENDIAN ) return m_array[-i]; #elif defined( SC_LITTLE_ENDIAN ) return m_array[i]; #endif } inline scfx_mant::scfx_mant( std::size_t size_ ) : m_array(0), m_size(size_) { m_array = alloc( size_ ); } inline scfx_mant::scfx_mant( const scfx_mant& rhs ) : m_array(0), m_size(rhs.m_size) { m_array = alloc( m_size ); for( int i = 0; i < m_size; i ++ ) { (*this)[i] = rhs[i]; } } inline scfx_mant& scfx_mant::operator = ( const scfx_mant& rhs ) { if( &rhs != this ) { if( m_size != rhs.m_size ) { free( m_array, m_size ); m_array = alloc( m_size = rhs.m_size ); } for( int i = 0; i < m_size; i ++ ) { (*this)[i] = rhs[i]; } } return *this; } inline scfx_mant::~scfx_mant() { if( m_array != 0 ) { free( m_array, m_size ); } } inline void scfx_mant::clear() { for( int i = 0; i < m_size; i ++ ) { (*this)[i] = 0; } } inline void scfx_mant::resize_to( int size, int restore ) { if( size == m_size ) { return; } if( ! m_array ) { m_array = alloc( m_size = size ); } else { word* p = alloc( size ); if( restore ) { int end = sc_min( size, m_size ); if( restore == 1 ) // msb resized -> align at 0 { for( int i = 0; i < size; i ++ ) { if( i < end ) { #if defined( SC_BIG_ENDIAN ) p[-i] = m_array[-i]; #elif defined( SC_LITTLE_ENDIAN ) p[i] = m_array[i]; #endif } else { #if defined( SC_BIG_ENDIAN ) p[-i] = 0; #elif defined( SC_LITTLE_ENDIAN ) p[i] = 0; #endif } } } else // lsb resized -> align at size-1 { for( int i = 0; i < size; i ++ ) { if( i < end ) { #if defined( SC_BIG_ENDIAN ) p[-size+1+i] = m_array[-m_size+1+i]; #elif defined( SC_LITTLE_ENDIAN ) p[size-1-i] = m_array[m_size-1-i]; #endif } else { #if defined( SC_BIG_ENDIAN ) p[-size+1+i] = 0; #elif defined( SC_LITTLE_ENDIAN ) p[size-1-i] = 0; #endif } } } } free( m_array, m_size ); m_array = p; m_size = size; } } inline half_word scfx_mant::half_at( int i ) const { SC_ASSERT_( ( i >> 1 ) >= 0 && ( i >> 1 ) < m_size, "mantissa index out of range" ); #if defined( SC_BIG_ENDIAN ) return reinterpret_cast( m_array )[-i]; #elif defined( SC_LITTLE_ENDIAN ) return reinterpret_cast( m_array )[i]; #endif } inline half_word& scfx_mant::half_at( int i ) { SC_ASSERT_( ( i >> 1 ) >= 0 && ( i >> 1 ) < m_size, "mantissa index out of range" ); #if defined( SC_BIG_ENDIAN ) return reinterpret_cast( m_array )[-i]; #elif defined( SC_LITTLE_ENDIAN ) return reinterpret_cast( m_array )[i]; #endif } inline half_word* scfx_mant::half_addr( int i ) const { SC_ASSERT_( i >= 0 && i < m_size, "mantissa index out of range" ); #if defined( SC_BIG_ENDIAN ) return reinterpret_cast( m_array - i ) + 1; #elif defined( SC_LITTLE_ENDIAN ) return reinterpret_cast( m_array + i ); #endif } // ---------------------------------------------------------------------------- // one's complement of a mantissa // ---------------------------------------------------------------------------- inline void complement( scfx_mant& target, const scfx_mant& source, int size ) { for( int i = 0; i < size; i ++ ) { target[i] = ~source[i]; } } // ---------------------------------------------------------------------------- // increment mantissa // ---------------------------------------------------------------------------- inline void inc( scfx_mant& mant ) { for( int i = 0; i < mant.size(); i ++ ) { if( ++ mant[i] ) { break; } } } // ---------------------------------------------------------------------------- // CLASS : scfx_mant_ref // // Mantissa reference class. // ---------------------------------------------------------------------------- class SC_API scfx_mant_ref { scfx_mant* m_mant; bool m_not_const; public: scfx_mant_ref(); scfx_mant_ref( const scfx_mant& ); scfx_mant_ref( scfx_mant* ); scfx_mant_ref& operator = ( const scfx_mant& ); scfx_mant_ref& operator = ( scfx_mant* ); ~scfx_mant_ref(); operator scfx_mant&(); word operator [] ( int ); private: void remove_it(); scfx_mant_ref( const scfx_mant_ref& ); scfx_mant_ref& operator = ( const scfx_mant_ref& ); void* operator new( std::size_t sz ) { return ::operator new( sz ); } }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline void scfx_mant_ref::remove_it() { if( m_not_const ) { delete m_mant; } } inline scfx_mant_ref::scfx_mant_ref() : m_mant( 0 ), m_not_const( false ) {} inline scfx_mant_ref::scfx_mant_ref( const scfx_mant& mant ) : m_mant( const_cast( &mant ) ), m_not_const( false ) {} inline scfx_mant_ref::scfx_mant_ref( scfx_mant* mant ) : m_mant( mant ), m_not_const( true ) {} inline scfx_mant_ref& scfx_mant_ref::operator = ( const scfx_mant& mant ) { remove_it(); m_mant = const_cast( &mant ); m_not_const = false; return *this; } inline scfx_mant_ref& scfx_mant_ref::operator = ( scfx_mant* mant ) { remove_it(); m_mant = mant; m_not_const = true; return *this; } inline scfx_mant_ref::~scfx_mant_ref() { remove_it(); } inline scfx_mant_ref::operator scfx_mant&() { // SC_ASSERT_( m_not_const, "not allowed to modify mant" ); return *m_mant; } inline word scfx_mant_ref::operator [] ( int i ) { return (*m_mant)[i]; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxcast_switch.h0000644000175000017500000001072114342422106022760 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxcast_switch.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxcast_switch.h,v $ // Revision 1.2 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXCAST_SWITCH_H #define SC_FXCAST_SWITCH_H #include "sysc/datatypes/fx/sc_context.h" namespace sc_dt { // classes defined in this module class sc_fxcast_switch; // ---------------------------------------------------------------------------- // CLASS : sc_fxcast_switch // // Fixed-point cast switch class. // ---------------------------------------------------------------------------- class SC_API sc_fxcast_switch { public: sc_fxcast_switch(); sc_fxcast_switch( sc_switch ); sc_fxcast_switch( const sc_fxcast_switch& ); explicit sc_fxcast_switch( sc_without_context ); sc_fxcast_switch& operator = ( const sc_fxcast_switch& ); friend bool operator == ( const sc_fxcast_switch&, const sc_fxcast_switch& ); friend bool operator != ( const sc_fxcast_switch&, const sc_fxcast_switch& ); const std::string to_string() const; void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; private: sc_switch m_sw; }; } // namespace sc_dt // ---------------------------------------------------------------------------- // TYPEDEF : sc_fxcast_context // // Context type for the fixed-point cast switch parameter. // ---------------------------------------------------------------------------- // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_phash; } // namespace sc_core namespace sc_dt { SC_API_TEMPLATE_DECL_ sc_global; SC_API_TEMPLATE_DECL_ sc_context; typedef sc_context sc_fxcast_context; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline sc_fxcast_switch::sc_fxcast_switch() : m_sw() { *this = sc_fxcast_context::default_value(); } inline sc_fxcast_switch::sc_fxcast_switch( sc_switch sw_ ) : m_sw( sw_ ) {} inline sc_fxcast_switch::sc_fxcast_switch( const sc_fxcast_switch& a ) : m_sw( a.m_sw ) {} inline sc_fxcast_switch::sc_fxcast_switch( sc_without_context ) : m_sw( SC_DEFAULT_CAST_SWITCH_ ) {} inline sc_fxcast_switch& sc_fxcast_switch::operator = ( const sc_fxcast_switch& a ) { if( &a != this ) { m_sw = a.m_sw; } return *this; } inline bool operator == ( const sc_fxcast_switch& a, const sc_fxcast_switch& b ) { return ( a.m_sw == b.m_sw ); } inline bool operator != ( const sc_fxcast_switch& a, const sc_fxcast_switch& b ) { return ( a.m_sw != b.m_sw ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxcast_switch& a ) { a.print( os ); return os; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxval_observer.cpp0000644000175000017500000000500614342422106023471 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxval_observer.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxval_observer.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/sc_fxval_observer.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_fxval_observer // // Abstract base class for fixed-point value type observers; // arbitrary precision. // ---------------------------------------------------------------------------- sc_fxval_observer* (*sc_fxval_observer::default_observer) () = 0; // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast_observer // // Abstract base class for fixed-point value type observers; // limited precision. // ---------------------------------------------------------------------------- sc_fxval_fast_observer* (*sc_fxval_fast_observer::default_observer) () = 0; } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_pow10.h0000644000175000017500000000476614342422106021427 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_pow10.h - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_pow10.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_POW10_H #define SCFX_POW10_H #include "sysc/datatypes/fx/scfx_rep.h" namespace sc_dt { // classes defined in this module class scfx_pow10; // ---------------------------------------------------------------------------- // CLASS : scfx_pow10 // // Class to compute (and cache) powers of 10 in arbitrary precision. // ---------------------------------------------------------------------------- const int SCFX_POW10_TABLE_SIZE = 32; class SC_API scfx_pow10 { public: scfx_pow10(); ~scfx_pow10(); const scfx_rep operator() ( int ); private: scfx_rep* pos( int ); scfx_rep* neg( int ); scfx_rep m_pos[SCFX_POW10_TABLE_SIZE]; scfx_rep m_neg[SCFX_POW10_TABLE_SIZE]; }; } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxtype_params.h0000644000175000017500000001757614342422106023010 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxtype_params.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxtype_params.h,v $ // Revision 1.2 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXTYPE_PARAMS_H #define SC_FXTYPE_PARAMS_H #include "sysc/datatypes/fx/sc_context.h" namespace sc_dt { // classes defined in this module class sc_fxtype_params; // ---------------------------------------------------------------------------- // CLASS : sc_fxtype_params // // Fixed-point type parameters class. // ---------------------------------------------------------------------------- class SC_API sc_fxtype_params { public: sc_fxtype_params(); sc_fxtype_params( int, int ); sc_fxtype_params( sc_q_mode, sc_o_mode, int = 0 ); sc_fxtype_params( int, int, sc_q_mode, sc_o_mode, int = 0 ); sc_fxtype_params( const sc_fxtype_params& ); sc_fxtype_params( const sc_fxtype_params&, int, int ); sc_fxtype_params( const sc_fxtype_params&, sc_q_mode, sc_o_mode, int = 0 ); explicit sc_fxtype_params( sc_without_context ); sc_fxtype_params& operator = ( const sc_fxtype_params& ); friend bool operator == ( const sc_fxtype_params&, const sc_fxtype_params& ); friend bool operator != ( const sc_fxtype_params&, const sc_fxtype_params& ); int wl() const; void wl( int ); int iwl() const; void iwl( int ); sc_q_mode q_mode() const; void q_mode( sc_q_mode ); sc_o_mode o_mode() const; void o_mode( sc_o_mode ); int n_bits() const; void n_bits( int ); const std::string to_string() const; void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; private: int m_wl; int m_iwl; sc_q_mode m_q_mode; sc_o_mode m_o_mode; int m_n_bits; }; } // namespace sc_dt // ---------------------------------------------------------------------------- // TYPEDEF : sc_fxtype_context // // Context type for the fixed-point type parameters. // ---------------------------------------------------------------------------- // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_phash; } // namespace sc_core namespace sc_dt { SC_API_TEMPLATE_DECL_ sc_global; SC_API_TEMPLATE_DECL_ sc_context; typedef sc_context sc_fxtype_context; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline sc_fxtype_params::sc_fxtype_params() : m_wl(), m_iwl(), m_q_mode(), m_o_mode(), m_n_bits() { *this = sc_fxtype_context::default_value(); } inline sc_fxtype_params::sc_fxtype_params( int wl_, int iwl_ ) : m_wl(), m_iwl(), m_q_mode(), m_o_mode(), m_n_bits() { *this = sc_fxtype_context::default_value(); SC_CHECK_WL_( wl_ ); m_wl = wl_; m_iwl = iwl_; } inline sc_fxtype_params::sc_fxtype_params( sc_q_mode q_mode_, sc_o_mode o_mode_, int n_bits_ ) : m_wl(), m_iwl(), m_q_mode(), m_o_mode(), m_n_bits() { *this = sc_fxtype_context::default_value(); SC_CHECK_N_BITS_( n_bits_ ); m_q_mode = q_mode_; m_o_mode = o_mode_; m_n_bits = n_bits_; } inline sc_fxtype_params::sc_fxtype_params( int wl_, int iwl_, sc_q_mode q_mode_, sc_o_mode o_mode_, int n_bits_ ) : m_wl(), m_iwl(), m_q_mode(), m_o_mode(), m_n_bits() { SC_CHECK_WL_( wl_ ); SC_CHECK_N_BITS_( n_bits_ ); m_wl = wl_; m_iwl = iwl_; m_q_mode = q_mode_; m_o_mode = o_mode_; m_n_bits = n_bits_; } inline sc_fxtype_params::sc_fxtype_params( const sc_fxtype_params& a ) : m_wl( a.m_wl ), m_iwl( a.m_iwl ), m_q_mode( a.m_q_mode ), m_o_mode( a.m_o_mode ), m_n_bits( a.m_n_bits ) {} inline sc_fxtype_params::sc_fxtype_params( const sc_fxtype_params& a, int wl_, int iwl_ ) : m_wl( wl_ ), m_iwl( iwl_ ), m_q_mode( a.m_q_mode ), m_o_mode( a.m_o_mode ), m_n_bits( a.m_n_bits ) {} inline sc_fxtype_params::sc_fxtype_params( const sc_fxtype_params& a, sc_q_mode q_mode_, sc_o_mode o_mode_, int n_bits_ ) : m_wl( a.m_wl ), m_iwl( a.m_iwl ), m_q_mode( q_mode_ ), m_o_mode( o_mode_ ), m_n_bits( n_bits_ ) {} inline sc_fxtype_params::sc_fxtype_params( sc_without_context ) : m_wl ( SC_DEFAULT_WL_ ), m_iwl ( SC_DEFAULT_IWL_ ), m_q_mode( SC_DEFAULT_Q_MODE_ ), m_o_mode( SC_DEFAULT_O_MODE_ ), m_n_bits( SC_DEFAULT_N_BITS_ ) {} inline sc_fxtype_params& sc_fxtype_params::operator = ( const sc_fxtype_params& a ) { if( &a != this ) { m_wl = a.m_wl; m_iwl = a.m_iwl; m_q_mode = a.m_q_mode; m_o_mode = a.m_o_mode; m_n_bits = a.m_n_bits; } return *this; } inline bool operator == ( const sc_fxtype_params& a, const sc_fxtype_params& b ) { return ( a.m_wl == b.m_wl && a.m_iwl == b.m_iwl && a.m_q_mode == b.m_q_mode && a.m_o_mode == b.m_o_mode && a.m_n_bits == b.m_n_bits ); } inline bool operator != ( const sc_fxtype_params& a, const sc_fxtype_params& b ) { return ( a.m_wl != b.m_wl || a.m_iwl != b.m_iwl || a.m_q_mode != b.m_q_mode || a.m_o_mode != b.m_o_mode || a.m_n_bits != b.m_n_bits ); } inline int sc_fxtype_params::wl() const { return m_wl; } inline void sc_fxtype_params::wl( int wl_ ) { SC_CHECK_WL_( wl_ ); m_wl = wl_; } inline int sc_fxtype_params::iwl() const { return m_iwl; } inline void sc_fxtype_params::iwl( int iwl_ ) { m_iwl = iwl_; } inline sc_q_mode sc_fxtype_params::q_mode() const { return m_q_mode; } inline void sc_fxtype_params::q_mode( sc_q_mode q_mode_ ) { m_q_mode = q_mode_; } inline sc_o_mode sc_fxtype_params::o_mode() const { return m_o_mode; } inline void sc_fxtype_params::o_mode( sc_o_mode o_mode_ ) { m_o_mode = o_mode_; } inline int sc_fxtype_params::n_bits() const { return m_n_bits; } inline void sc_fxtype_params::n_bits( int n_bits_ ) { SC_CHECK_N_BITS_( n_bits_ ); m_n_bits = n_bits_; } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxtype_params& a ) { a.print( os ); return os; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_rep.cpp0000644000175000017500000016544114342422106021600 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_rep.cpp - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_rep.cpp,v $ // Revision 1.4 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.3 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.2 2009/02/28 00:26:20 acg // Andy Goodrich: bug fixes. // // Revision 1.2 2008/11/06 17:22:47 acg // Andy Goodrich: bug fixes for 2.2.1. // // Revision 1.1.1.1 2006/12/15 20:31:36 acg // SystemC 2.2 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/utils/sc_machine.h" #include "sysc/datatypes/fx/scfx_rep.h" #include "sysc/datatypes/fx/scfx_ieee.h" #include "sysc/datatypes/fx/scfx_pow10.h" #include "sysc/datatypes/fx/scfx_utils.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include #include #include #include namespace sc_dt { // ---------------------------------------------------------------------------- // some utilities // ---------------------------------------------------------------------------- static scfx_pow10 pow10_fx; static const int mantissa0_size = SCFX_IEEE_DOUBLE_M_SIZE - bits_in_int; static inline int n_word( int x ) { return ( x + bits_in_word - 1 ) / bits_in_word; } // ---------------------------------------------------------------------------- // CONSTRUCTORS // ---------------------------------------------------------------------------- scfx_rep::scfx_rep() : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { set_zero(); } scfx_rep::scfx_rep( int a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_wp = m_msw = m_lsw = 2; m_state = normal; if( a > 0 ) { m_mant[2] = a; m_sign = 1; } else { m_mant[2] = -a; m_sign = -1; } } else set_zero(); } scfx_rep::scfx_rep( unsigned int a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_wp = m_msw = m_lsw = 2; m_state = normal; m_mant[2] = a; m_sign = 1; } else set_zero(); } scfx_rep::scfx_rep( long a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_state = normal; if ( a > 0 ) { m_sign = 1; } else { a = -a; m_sign = -1; } # if defined(SC_LONG_64) m_wp = 1; m_mant[1] = static_cast( a ); m_mant[2] = static_cast( a >> bits_in_word ); find_sw(); # else m_wp = 2; m_msw = 2; m_lsw = 2; m_mant[2] = a; # endif } else set_zero(); } scfx_rep::scfx_rep( unsigned long a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_wp = m_msw = m_lsw = 2; m_state = normal; # if defined(SC_LONG_64) m_wp = 1; m_mant[1] = static_cast( a ); m_mant[2] = static_cast( a >> bits_in_word ); find_sw(); # else m_wp = 2; m_msw = 2; m_lsw = 2; m_mant[2] = a; # endif m_sign = 1; } else set_zero(); } scfx_rep::scfx_rep( double a ) : m_mant( min_mant ), m_wp( 0 ), m_sign(), m_state( normal ), m_msw( 0 ), m_lsw( 0 ), m_r_flag( false ) { m_mant.clear(); scfx_ieee_double id( a ); m_sign = id.negative() ? -1 : 1; if( id.is_nan() ) m_state = not_a_number; else if( id.is_inf() ) m_state = infinity; else if( id.is_subnormal() ) { m_mant[0] = id.mantissa1(); m_mant[1] = id.mantissa0(); normalize( id.exponent() + 1 - SCFX_IEEE_DOUBLE_M_SIZE ); } else if( id.is_normal() ) { m_mant[0] = id.mantissa1(); m_mant[1] = id.mantissa0() | ( 1 << mantissa0_size ); normalize( id.exponent() - SCFX_IEEE_DOUBLE_M_SIZE ); } } scfx_rep::scfx_rep( int64 a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_wp = 1; m_state = normal; if( a > 0 ) { m_mant[1] = static_cast( a ); m_mant[2] = static_cast( a >> bits_in_word ); m_sign = 1; } else { m_mant[1] = static_cast( -a ); m_mant[2] = static_cast( (-a) >> bits_in_word ); m_sign = -1; } find_sw(); } else set_zero(); } scfx_rep::scfx_rep( uint64 a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a != 0 ) { m_mant.clear(); m_wp = 1; m_state = normal; m_mant[1] = static_cast( a ); m_mant[2] = static_cast( a >> bits_in_word ); m_sign = 1; find_sw(); } else set_zero(); } scfx_rep::scfx_rep( const sc_signed& a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a.iszero() ) set_zero(); else { int words = n_word( a.length() ); if( words > size() ) resize_to( words ); m_mant.clear(); m_wp = 0; m_state = normal; if( a.sign() ) { sc_signed a2 = -a; for( int i = 0; i < a2.length(); ++ i ) { if( a2[i] ) { scfx_index x = calc_indices( i ); m_mant[x.wi()] |= 1 << x.bi(); } } m_sign = -1; } else { for( int i = 0; i < a.length(); ++ i ) { if( a[i] ) { scfx_index x = calc_indices( i ); m_mant[x.wi()] |= 1 << x.bi(); } } m_sign = 1; } find_sw(); } } scfx_rep::scfx_rep( const sc_unsigned& a ) : m_mant( min_mant ), m_wp(), m_sign(), m_state(), m_msw(), m_lsw(), m_r_flag( false ) { if( a.iszero() ) set_zero(); else { int words = n_word( a.length() ); if( words > size() ) resize_to( words ); m_mant.clear(); m_wp = 0; m_state = normal; for( int i = 0; i < a.length(); ++ i ) { if( a[i] ) { scfx_index x = calc_indices( i ); m_mant[x.wi()] |= 1 << x.bi(); } } m_sign = 1; find_sw(); } } // copy constructor scfx_rep::scfx_rep( const scfx_rep& a ) : m_mant( a.m_mant ), m_wp( a.m_wp ), m_sign( a.m_sign ), m_state( a.m_state ), m_msw( a.m_msw ), m_lsw( a.m_lsw ), m_r_flag( false ) {} // ---------------------------------------------------------------------------- // OPERATORS : new, delete // // Memory management for class scfx_rep. // ---------------------------------------------------------------------------- union scfx_rep_node { char data[sizeof( scfx_rep )]; scfx_rep_node* next; }; static scfx_rep_node* list = 0; void* scfx_rep::operator new( std::size_t size ) { const int ALLOC_SIZE = 1024; if( size != sizeof( scfx_rep ) ) return ::operator new( size ); if( ! list ) { list = new scfx_rep_node[ALLOC_SIZE]; for( int i = 0; i < ALLOC_SIZE - 1; i ++ ) list[i].next = list + i + 1; list[ALLOC_SIZE - 1].next = 0; } scfx_rep* ptr = reinterpret_cast( list->data ); list = list->next; return ptr; } void scfx_rep::operator delete( void* ptr, std::size_t size ) { if( size != sizeof( scfx_rep ) ) { ::operator delete( ptr ); return; } scfx_rep_node* node = static_cast( ptr ); node->next = list; list = node; } // ---------------------------------------------------------------------------- // METHOD : from_string // // Convert from character string to sc_fxrep. // ---------------------------------------------------------------------------- #define SCFX_FAIL_IF_(cnd) \ { \ if( ( cnd ) ) \ { \ m_state = not_a_number; \ m_mant.clear(); /* to avoid Purify UMRs during assignment */ \ return; \ } \ } void scfx_rep::from_string( const char* s, int cte_wl ) { SCFX_FAIL_IF_( s == 0 || *s == 0 ); scfx_string s2; s2 += s; s2 += '\0'; bool sign_char; m_sign = scfx_parse_sign( s, sign_char ); sc_numrep numrep = scfx_parse_prefix( s ); int base = 0; switch( numrep ) { case SC_DEC: { base = 10; if( scfx_is_nan( s ) ) { // special case: NaN m_state = not_a_number; m_mant.clear(); /* to avoid Purify UMRs during assignment */ return; } if( scfx_is_inf( s ) ) { // special case: Infinity m_state = infinity; m_mant.clear(); /* to avoid Purify UMRs during assignment */ return; } break; } case SC_BIN: case SC_BIN_US: { SCFX_FAIL_IF_( sign_char ); base = 2; break; } case SC_BIN_SM: { base = 2; break; } case SC_OCT: case SC_OCT_US: { SCFX_FAIL_IF_( sign_char ); base = 8; break; } case SC_OCT_SM: { base = 8; break; } case SC_HEX: case SC_HEX_US: { SCFX_FAIL_IF_( sign_char ); base = 16; break; } case SC_HEX_SM: { base = 16; break; } case SC_CSD: { SCFX_FAIL_IF_( sign_char ); base = 2; scfx_csd2tc( s2 ); s = (const char*) s2 + 4; numrep = SC_BIN; break; } default:; } // // find end of mantissa and count the digits and points // const char *end = s; bool based_point = false; int int_digits = 0; int frac_digits = 0; while( *end ) { if( scfx_exp_start( end ) ) break; if( *end == '.' ) { SCFX_FAIL_IF_( based_point ); based_point = true; } else { SCFX_FAIL_IF_( ! scfx_is_digit( *end, numrep ) ); if( based_point ) frac_digits ++; else int_digits ++; } ++ end; } SCFX_FAIL_IF_( int_digits == 0 && frac_digits == 0 ); // [ exponent ] int exponent = 0; if( *end ) { for( const char *e = end + 2; *e; ++ e ) SCFX_FAIL_IF_( ! scfx_is_digit( *e, SC_DEC ) ); exponent = std::atoi( end + 1 ); } // // check if the mantissa is negative // bool mant_is_neg = false; switch( numrep ) { case SC_BIN: case SC_OCT: case SC_HEX: { const char* p = s; if( *p == '.' ) ++ p; mant_is_neg = ( scfx_to_digit( *p, numrep ) >= ( base >> 1 ) ); break; } default: ; } // // convert the mantissa // switch( base ) { case 2: { int bit_offset = exponent % bits_in_word; int word_offset = exponent / bits_in_word; int_digits += bit_offset; frac_digits -= bit_offset; int words = n_word( int_digits ) + n_word( frac_digits ); if( words > size() ) resize_to( words ); m_mant.clear(); int j = n_word( frac_digits ) * bits_in_word + int_digits - 1; for( ; s < end; s ++ ) { switch( *s ) { case '1': set_bin( j ); /* fallthrough */ case '0': j --; /* fallthrough */ case '.': break; default: SCFX_FAIL_IF_( true ); // should not happen } } m_wp = n_word( frac_digits ) - word_offset; break; } case 8: { exponent *= 3; int_digits *= 3; frac_digits *= 3; int bit_offset = exponent % bits_in_word; int word_offset = exponent / bits_in_word; int_digits += bit_offset; frac_digits -= bit_offset; int words = n_word( int_digits ) + n_word( frac_digits ); if( words > size() ) resize_to( words ); m_mant.clear(); int j = n_word( frac_digits ) * bits_in_word + int_digits - 3; for( ; s < end; s ++ ) { switch( *s ) { case '7': case '6': case '5': case '4': case '3': case '2': case '1': set_oct( j, *s - '0' ); /* fallthrough */ case '0': j -= 3; /* fallthrough */ case '.': break; default: SCFX_FAIL_IF_( true ); // should not happen } } m_wp = n_word( frac_digits ) - word_offset; break; } case 10: { word carry, temp; int length = int_digits + frac_digits; resize_to( sc_max( min_mant, n_word( 4 * length ) ) ); m_mant.clear(); m_msw = m_lsw = 0; for( ; s < end; s ++ ) { switch( *s ) { case '9': case '8': case '7': case '6': case '5': case '4': case '3': case '2': case '1': case '0': multiply_by_ten(); carry = *s - '0'; for ( int i = 0; carry && i < m_mant.size(); i++ ) { temp = m_mant[i]; temp += carry; carry = temp < m_mant[i]; m_mant[i] = temp; } /* fallthrough */ case '.': break; default: SCFX_FAIL_IF_( true ); // should not happen } } m_wp = 0; find_sw(); int denominator = frac_digits - exponent; if( denominator ) { scfx_rep frac_num = pow10_fx( denominator ); scfx_rep* temp_num = div_scfx_rep( const_cast( *this ), frac_num, cte_wl ); *this = *temp_num; delete temp_num; } break; } case 16: { exponent *= 4; int_digits *= 4; frac_digits *= 4; int bit_offset = exponent % bits_in_word; int word_offset = exponent / bits_in_word; int_digits += bit_offset; frac_digits -= bit_offset; int words = n_word( int_digits ) + n_word( frac_digits ); if( words > size() ) resize_to( words ); m_mant.clear(); int j = n_word( frac_digits ) * bits_in_word + int_digits - 4; for( ; s < end; s ++ ) { switch( *s ) { case 'f': case 'e': case 'd': case 'c': case 'b': case 'a': set_hex( j, *s - 'a' + 10 ); j -= 4; break; case 'F': case 'E': case 'D': case 'C': case 'B': case 'A': set_hex( j, *s - 'A' + 10 ); j -= 4; break; case '9': case '8': case '7': case '6': case '5': case '4': case '3': case '2': case '1': set_hex( j, *s - '0' ); /* fallthrough */ case '0': j -= 4; /* fallthrough */ case '.': break; default: SCFX_FAIL_IF_( true ); // should not happen } } m_wp = n_word( frac_digits ) - word_offset; break; } } m_state = normal; find_sw(); // // two's complement of mantissa if it is negative // if( mant_is_neg ) { m_mant[m_msw] |= ~0U << scfx_find_msb( m_mant[m_msw] ); for( int i = m_msw + 1; i < m_mant.size(); ++ i ) m_mant[i] = static_cast( -1 ); complement( m_mant, m_mant, m_mant.size() ); inc( m_mant ); m_sign *= -1; find_sw(); } } #undef SCFX_FAIL_IF_ // ---------------------------------------------------------------------------- // METHOD : to_double // // Convert from scfx_rep to double. // ---------------------------------------------------------------------------- double scfx_rep::to_double() const { scfx_ieee_double id; // handle special cases if( is_nan() ) { id.set_nan(); return id; } if( is_inf() ) { id.set_inf(); id.negative( m_sign < 0 ); return id; } if( is_zero() ) { id = 0.; id.negative( m_sign < 0 ); return id; } int msb = scfx_find_msb( m_mant[m_msw] ); int exp = (m_msw - m_wp) * bits_in_word + msb; if( exp > SCFX_IEEE_DOUBLE_E_MAX ) { id.set_inf(); id.negative( m_sign < 0 ); return id; } if( exp < SCFX_IEEE_DOUBLE_E_MIN - static_cast( SCFX_IEEE_DOUBLE_M_SIZE ) ) { id = 0.; return id; } int shift = mantissa0_size - msb; unsigned int m0; unsigned int m1 = 0; unsigned int guard = 0; if( shift == 0 ) { m0 = m_mant[m_msw] & ~( 1 << mantissa0_size ); if( m_msw > m_lsw ) { m1 = m_mant[m_msw - 1]; if( m_msw - 1 > m_lsw ) guard = m_mant[m_msw - 2] >> ( bits_in_word - 1 ); } } else if( shift < 0 ) { m0 = ( m_mant[m_msw] >> -shift ) & ~( 1 << mantissa0_size ); m1 = m_mant[m_msw] << ( bits_in_word + shift ); if( m_msw > m_lsw ) { m1 |= m_mant[m_msw - 1] >> -shift; guard = ( m_mant[m_msw - 1] >> ( -shift - 1 ) ) & 1; } } else { m0 = ( m_mant[m_msw] << shift ) & ~( 1 << mantissa0_size ); if( m_msw > m_lsw ) { m0 |= m_mant[m_msw - 1] >> ( bits_in_word - shift ); m1 = m_mant[m_msw - 1] << shift; if( m_msw - 1 > m_lsw ) { m1 |= m_mant[m_msw - 2] >> ( bits_in_word - shift ); guard = ( m_mant[m_msw - 2] >> (bits_in_word - shift - 1) ) & 1; } } } if( exp < SCFX_IEEE_DOUBLE_E_MIN ) { m0 |= ( 1 << mantissa0_size ); int subnormal_shift = SCFX_IEEE_DOUBLE_E_MIN - exp; if( subnormal_shift < bits_in_word ) { m1 = m1 >> subnormal_shift | m0 << ( bits_in_word - subnormal_shift ); m0 = m0 >> subnormal_shift; } else { m1 = m0 >> ( subnormal_shift - bits_in_word ); m0 = 0; } guard = 0; exp = SCFX_IEEE_DOUBLE_E_MIN - 1; } id.mantissa0( m0 ); id.mantissa1( m1 ); id.exponent( exp ); id.negative( m_sign < 0 ); double result = id; if( guard != 0 ) result += m_sign * scfx_pow2( exp - SCFX_IEEE_DOUBLE_M_SIZE ); return result; } // ---------------------------------------------------------------------------- // METHOD : to_uint64 // // Convert from scfx_rep to uint64. // Truncates towards 0 _then_ wraps; infinities and NaN go to zero. // ---------------------------------------------------------------------------- uint64 scfx_rep::to_uint64() const { if( !is_normal() || is_zero() ) { return 0; } uint64 result = 0; int shift = 0; int idx = m_wp; // Ignore bits off the top; they modulo out. // Ignore bits off the bottom; we're truncating. while (shift < 64 && m_msw >= idx && idx >= m_lsw) { result += static_cast(m_mant[idx]) << shift; shift += bits_in_word; idx += 1; } return m_sign > 0 ? result : -result; } // ---------------------------------------------------------------------------- // METHOD : to_string // // Convert from scfx_rep to character string. // ---------------------------------------------------------------------------- void print_dec( scfx_string& s, const scfx_rep& num, int w_prefix, sc_fmt fmt ) { if( num.is_neg() ) s += '-'; if( w_prefix == 1 ) { scfx_print_prefix( s, SC_DEC ); } if( num.is_zero() ) { s += '0'; return; } // split 'num' into its integer and fractional part scfx_rep int_part = num; scfx_rep frac_part = num; int i; for( i = int_part.m_lsw; i <= int_part.m_msw && i < int_part.m_wp; i ++ ) int_part.m_mant[i] = 0; int_part.find_sw(); if( int_part.m_wp < int_part.m_lsw ) int_part.resize_to( int_part.size() - int_part.m_wp, -1 ); for( i = frac_part.m_msw; i >= frac_part.m_lsw && i >= frac_part.m_wp; i -- ) frac_part.m_mant[i] = 0; frac_part.find_sw(); if( frac_part.m_msw == frac_part.size() - 1 ) frac_part.resize_to( frac_part.size() + 1, 1 ); // print integer part int int_digits = 0; int int_zeros = 0; if( ! int_part.is_zero() ) { double int_wl = ( int_part.m_msw - int_part.m_wp ) * bits_in_word + scfx_find_msb( int_part.m_mant[int_part.m_msw] ) + 1; int_digits = (int) std::ceil( int_wl * std::log10( 2. ) ); int len = s.length(); s.append( int_digits ); bool zero_digits = ( frac_part.is_zero() && fmt != SC_F ); for( i = int_digits + len - 1; i >= len; i-- ) { unsigned int remainder = int_part.divide_by_ten(); s[i] = static_cast( '0' + remainder ); if( zero_digits ) { if( remainder == 0 ) int_zeros ++; else zero_digits = false; } } // discard trailing zeros from int_part s.discard( int_zeros ); if( s[len] == '0' ) { // int_digits was overestimated by one s.remove( len ); -- int_digits; } } // print fractional part int frac_digits = 0; int frac_zeros = 0; if( ! frac_part.is_zero() ) { s += '.'; bool zero_digits = ( int_digits == 0 && fmt != SC_F ); double frac_wl = ( frac_part.m_wp - frac_part.m_msw ) * bits_in_word - scfx_find_msb( frac_part.m_mant[frac_part.m_msw] ) - 1; frac_zeros = (int) std::floor( frac_wl * std::log10( 2. ) ); scfx_rep temp; sc_dt::multiply( temp, frac_part, pow10_fx( frac_zeros ) ); frac_part = temp; if( frac_part.m_msw == frac_part.size() - 1 ) frac_part.resize_to( frac_part.size() + 1, 1 ); frac_digits = frac_zeros; if( ! zero_digits ) { for( i = 0; i < frac_zeros; i ++ ) s += '0'; frac_zeros = 0; } while( ! frac_part.is_zero() ) { frac_part.multiply_by_ten(); int n = frac_part.m_mant[frac_part.m_msw + 1]; if( zero_digits ) { if( n == 0 ) frac_zeros ++; else zero_digits = false; } if( ! zero_digits ) s += static_cast( '0' + n ); frac_part.m_mant[frac_part.m_msw + 1] = 0; frac_digits ++; } } // print exponent if( fmt != SC_F ) { if( frac_digits == 0 ) scfx_print_exp( s, int_zeros ); else if( int_digits == 0 ) scfx_print_exp( s, - frac_zeros ); } } void print_other( scfx_string& s, const scfx_rep& a, sc_numrep numrep, int w_prefix, sc_fmt fmt, const scfx_params* params ) { scfx_rep b = a; sc_numrep numrep2 = numrep; bool numrep_is_sm = ( numrep == SC_BIN_SM || numrep == SC_OCT_SM || numrep == SC_HEX_SM ); if( numrep_is_sm ) { if( b.is_neg() ) { s += '-'; b = *neg_scfx_rep( a ); } switch( numrep ) { case SC_BIN_SM: numrep2 = SC_BIN_US; break; case SC_OCT_SM: numrep2 = SC_OCT_US; break; case SC_HEX_SM: numrep2 = SC_HEX_US; break; default: ; } } if( w_prefix != 0 ) { scfx_print_prefix( s, numrep ); } numrep = numrep2; int msb, lsb; if( params != 0 ) { msb = params->iwl() - 1; lsb = params->iwl() - params->wl(); if( params->enc() == SC_TC_ && ( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) && ! numrep_is_sm && params->wl() > 1 ) -- msb; else if( params->enc() == SC_US_ && ( numrep == SC_BIN || numrep == SC_OCT || numrep == SC_HEX || numrep == SC_CSD ) ) ++ msb; } else { if( b.is_zero() ) { msb = 0; lsb = 0; } else { msb = ( b.m_msw - b.m_wp ) * bits_in_word + scfx_find_msb( b.m_mant[ b.m_msw ] ) + 1; while( b.get_bit( msb ) == b.get_bit( msb - 1 ) ) -- msb; if( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) -- msb; lsb = ( b.m_lsw - b.m_wp ) * bits_in_word + scfx_find_lsb( b.m_mant[ b.m_lsw ] ); } } int step; switch( numrep ) { case SC_BIN: case SC_BIN_US: case SC_CSD: step = 1; break; case SC_OCT: case SC_OCT_US: step = 3; break; case SC_HEX: case SC_HEX_US: step = 4; break; default: SC_REPORT_FATAL( sc_core::SC_ID_ASSERTION_FAILED_ , "unexpected sc_numrep" ); sc_core::sc_abort(); } msb = (int) std::ceil( double( msb + 1 ) / step ) * step - 1; lsb = (int) std::floor( double( lsb ) / step ) * step; if( msb < 0 ) { s += '.'; if( fmt == SC_F ) { int sign = ( b.is_neg() ) ? ( 1 << step ) - 1 : 0; for( int i = ( msb + 1 ) / step; i < 0; i ++ ) { if( sign < 10 ) s += static_cast( sign + '0' ); else s += static_cast( sign + 'a' - 10 ); } } } int i = msb; while( i >= lsb ) { int value = 0; for( int j = step - 1; j >= 0; -- j ) { value += static_cast( b.get_bit( i ) ) << j; -- i; } if( value < 10 ) s += static_cast( value + '0' ); else s += static_cast( value + 'a' - 10 ); if( i == -1 ) s += '.'; } if( lsb > 0 && fmt == SC_F ) { for( i = lsb / step; i > 0; i -- ) s += '0'; } if( s[s.length() - 1] == '.' ) s.discard( 1 ); if( fmt != SC_F ) { if( msb < 0 ) scfx_print_exp( s, ( msb + 1 ) / step ); else if( lsb > 0 ) scfx_print_exp( s, lsb / step ); } if( numrep == SC_CSD ) scfx_tc2csd( s, w_prefix ); } const char* scfx_rep::to_string( sc_numrep numrep, int w_prefix, sc_fmt fmt, const scfx_params* params ) const { static scfx_string s; s.clear(); if( is_nan() ) scfx_print_nan( s ); else if( is_inf() ) scfx_print_inf( s, is_neg() ); else if( is_neg() && ! is_zero() && ( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) ) s += "negative"; else if( numrep == SC_DEC || numrep == SC_NOBASE ) sc_dt::print_dec( s, *this, w_prefix, fmt ); else sc_dt::print_other( s, *this, numrep, w_prefix, fmt, params ); return s; } // ---------------------------------------------------------------------------- // ADD // // add two mantissas of the same size // result has the same size // returns carry of operation // ---------------------------------------------------------------------------- static inline int add_mants( int size, scfx_mant& result, const scfx_mant& a, const scfx_mant& b ) { unsigned int carry = 0; int index = 0; do { word x = a[index]; word y = b[index]; y += carry; carry = y < carry; y += x; carry += y < x; result[index] = y; } while( ++ index < size ); return ( carry ? 1 : 0 ); } static inline int sub_mants( int size, scfx_mant& result, const scfx_mant& a, const scfx_mant& b ) { unsigned carry = 0; int index = 0; do { word x = a[index]; word y = b[index]; y += carry; carry = y < carry; y = x - y; carry += y > x; result[index] = y; } while( ++ index < size ); return ( carry ? 1 : 0 ); } scfx_rep* add_scfx_rep( const scfx_rep& lhs, const scfx_rep& rhs, int max_wl ) { scfx_rep& result = *new scfx_rep; // // check for special cases // if( lhs.is_nan() || rhs.is_nan() || ( lhs.is_inf() && rhs.is_inf() && lhs.m_sign != rhs.m_sign ) ) { result.set_nan(); return &result; } if( lhs.is_inf() ) { result.set_inf( lhs.m_sign ); return &result; } if( rhs.is_inf() ) { result.set_inf( rhs.m_sign ); return &result; } // // align operands if needed // scfx_mant_ref lhs_mant; scfx_mant_ref rhs_mant; int len_mant = lhs.size(); int new_wp = lhs.m_wp; align( lhs, rhs, new_wp, len_mant, lhs_mant, rhs_mant ); // // size the result mantissa // result.resize_to( len_mant ); result.m_wp = new_wp; // // do it // if( lhs.m_sign == rhs.m_sign ) { add_mants( len_mant, result.m_mant, lhs_mant, rhs_mant ); result.m_sign = lhs.m_sign; } else { int cmp = compare_abs( lhs, rhs ); if( cmp == 1 ) { sub_mants( len_mant, result.m_mant, lhs_mant, rhs_mant ); result.m_sign = lhs.m_sign; } else if ( cmp == -1 ) { sub_mants( len_mant, result.m_mant, rhs_mant, lhs_mant ); result.m_sign = rhs.m_sign; } else { result.m_mant.clear(); result.m_sign = 1; } } result.find_sw(); result.round( max_wl ); return &result; } // ---------------------------------------------------------------------------- // SUB // // sub two word's of the same size // result has the same size // returns carry of operation // ---------------------------------------------------------------------------- static inline int sub_with_index( scfx_mant& a, int a_msw, int /*a_lsw*/, const scfx_mant& b, int b_msw, int b_lsw ) { unsigned carry = 0; int size = b_msw - b_lsw; int a_index = a_msw - size; int b_index = b_msw - size; do { word x = a[a_index]; word y = b[b_index]; y += carry; carry = y < carry; y = x - y; carry += y > x; a[a_index] = y; a_index ++; b_index ++; } while( size -- ); if( carry ) { // special case: a[a_msw + 1 ] == 1 a[a_msw + 1] = 0; } return ( carry ? 1 : 0 ); } scfx_rep* sub_scfx_rep( const scfx_rep& lhs, const scfx_rep& rhs, int max_wl ) { scfx_rep& result = *new scfx_rep; // // check for special cases // if( lhs.is_nan() || rhs.is_nan() || ( lhs.is_inf() && rhs.is_inf() && lhs.m_sign == rhs.m_sign ) ) { result.set_nan(); return &result; } if( lhs.is_inf() ) { result.set_inf( lhs.m_sign ); return &result; } if( rhs.is_inf() ) { result.set_inf( -1 * rhs.m_sign ); return &result; } // // align operands if needed // scfx_mant_ref lhs_mant; scfx_mant_ref rhs_mant; int len_mant = lhs.size(); int new_wp = lhs.m_wp; align( lhs, rhs, new_wp, len_mant, lhs_mant, rhs_mant ); // // size the result mantissa // result.resize_to( len_mant ); result.m_wp = new_wp; // // do it // if( lhs.m_sign != rhs.m_sign ) { add_mants( len_mant, result.m_mant, lhs_mant, rhs_mant ); result.m_sign = lhs.m_sign; } else { int cmp = compare_abs( lhs, rhs ); if( cmp == 1 ) { sub_mants( len_mant, result.m_mant, lhs_mant, rhs_mant ); result.m_sign = lhs.m_sign; } else if ( cmp == -1 ) { sub_mants( len_mant, result.m_mant, rhs_mant, lhs_mant ); result.m_sign = -rhs.m_sign; } else { result.m_mant.clear(); result.m_sign = 1; } } result.find_sw(); result.round( max_wl ); return &result; } // ---------------------------------------------------------------------------- // MUL // ---------------------------------------------------------------------------- union word_short { word l; struct { #if defined( SC_BIG_ENDIAN ) half_word u; half_word l; #elif defined( SC_LITTLE_ENDIAN ) half_word l; half_word u; #endif } s; }; #if defined( SC_BIG_ENDIAN ) static const int half_word_incr = -1; #elif defined( SC_LITTLE_ENDIAN ) static const int half_word_incr = 1; #endif void multiply( scfx_rep& result, const scfx_rep& lhs, const scfx_rep& rhs, int max_wl ) { // // check for special cases // if( lhs.is_nan() || rhs.is_nan() || (lhs.is_inf() && rhs.is_zero()) || (lhs.is_zero() && rhs.is_inf()) ) { result.set_nan(); return; } if( lhs.is_inf() || rhs.is_inf() ) { result.set_inf( lhs.m_sign * rhs.m_sign ); return; } if( lhs.is_zero() || rhs.is_zero() ) { result.set_zero( lhs.m_sign * rhs.m_sign ); return; } // // do it // int len_lhs = lhs.m_msw - lhs.m_lsw + 1; int len_rhs = rhs.m_msw - rhs.m_lsw + 1; int new_size = sc_max( min_mant, len_lhs + len_rhs ); int new_wp = ( lhs.m_wp - lhs.m_lsw ) + ( rhs.m_wp - rhs.m_lsw ); int new_sign = lhs.m_sign * rhs.m_sign; result.resize_to( new_size ); result.m_mant.clear(); result.m_wp = new_wp; result.m_sign = new_sign; result.m_state = scfx_rep::normal; half_word *s1 = lhs.m_mant.half_addr( lhs.m_lsw ); half_word *s2 = rhs.m_mant.half_addr( rhs.m_lsw ); half_word *t = result.m_mant.half_addr(); len_lhs <<= 1; len_rhs <<= 1; int i1, i2; for( i1 = 0; i1 * half_word_incr < len_lhs; i1 += half_word_incr ) { word_short ls; ls.l = 0; half_word v1 = s1[i1]; for( i2 = 0; i2 * half_word_incr < len_rhs; i2 += half_word_incr ) { ls.l += v1 * s2[i2]; ls.s.l = ls.s.u + ( ( t[i2] += ls.s.l ) < ls.s.l ); ls.s.u = 0; } t[i2] = ls.s.l; t += half_word_incr; } result.find_sw(); result.round( max_wl ); } // ---------------------------------------------------------------------------- // DIV // ---------------------------------------------------------------------------- scfx_rep* div_scfx_rep( const scfx_rep& lhs, const scfx_rep& rhs, int div_wl ) { scfx_rep& result = *new scfx_rep; // // check for special cases // if( lhs.is_nan() || rhs.is_nan() || (lhs.is_inf() && rhs.is_inf()) || (lhs.is_zero() && rhs.is_zero()) ) { result.set_nan(); return &result; } if( lhs.is_inf() || rhs.is_zero() ) { result.set_inf( lhs.m_sign * rhs.m_sign ); return &result; } if( lhs.is_zero() || rhs.is_inf() ) { result.set_zero( lhs.m_sign * rhs.m_sign ); return &result; } // // do it // // compute one bit more for rounding div_wl ++; result.resize_to( sc_max( n_word( div_wl ) + 1, min_mant ) ); result.m_mant.clear(); result.m_sign = lhs.m_sign * rhs.m_sign; int msb_lhs = scfx_find_msb( lhs.m_mant[lhs.m_msw] ) + ( lhs.m_msw - lhs.m_wp ) * bits_in_word; int msb_rhs = scfx_find_msb( rhs.m_mant[rhs.m_msw] ) + ( rhs.m_msw - rhs.m_wp ) * bits_in_word; int msb_res = msb_lhs - msb_rhs; int to_shift = -msb_res % bits_in_word; int result_index; int c = ( msb_res % bits_in_word >= 0 ) ? 1 : 0; result_index = (result.size() - c) * bits_in_word + msb_res % bits_in_word; result.m_wp = (result.size() - c) - msb_res / bits_in_word; scfx_rep remainder = lhs; // align msb from remainder to msb from rhs remainder.lshift( to_shift ); // make sure msw( remainder ) < size - 1 if( remainder.m_msw == remainder.size() - 1 ) remainder.resize_to( remainder.size() + 1, 1 ); // make sure msw( remainder ) >= msw( rhs )! int msw_diff = rhs.m_msw - remainder.m_msw; if (msw_diff > 0) remainder.resize_to( remainder.size() + msw_diff, -1 ); int counter; for( counter = div_wl; counter && ! remainder.is_zero(); counter -- ) { if( compare_msw_ff( rhs, remainder ) <= 0 ) { result.set_bin( result_index ); sub_with_index( remainder.m_mant, remainder.m_msw, remainder.m_lsw, rhs.m_mant, rhs.m_msw, rhs.m_lsw ); } result_index --; remainder.shift_left( 1 ); remainder.m_lsw = remainder.find_lsw(); } // perform convergent rounding, if needed if( counter == 0 ) { int index = result_index + 1 - result.m_wp * bits_in_word; scfx_index x = result.calc_indices( index ); scfx_index x1 = result.calc_indices( index + 1 ); if( result.o_bit_at( x ) && result.o_bit_at( x1 ) ) result.q_incr( x ); result.m_r_flag = true; } result.find_sw(); return &result; } // ---------------------------------------------------------------------------- // destructive shift mantissa to the left // ---------------------------------------------------------------------------- void scfx_rep::lshift( int n ) { if( n == 0 ) return; if( n < 0 ) { rshift( -n ); return; } if( is_normal() ) { int shift_bits = n % bits_in_word; int shift_words = n / bits_in_word; // resize if needed if( m_msw == size() - 1 && scfx_find_msb( m_mant[m_msw] ) >= bits_in_word - shift_bits ) resize_to( size() + 1, 1 ); // do it m_wp -= shift_words; shift_left( shift_bits ); find_sw(); } } // ---------------------------------------------------------------------------- // destructive shift mantissa to the right // ---------------------------------------------------------------------------- void scfx_rep::rshift( int n ) { if( n == 0 ) return; if( n < 0 ) { lshift( -n ); return; } if( is_normal() ) { int shift_bits = n % bits_in_word; int shift_words = n / bits_in_word; // resize if needed if( m_lsw == 0 && scfx_find_lsb( m_mant[m_lsw] ) < shift_bits ) resize_to( size() + 1, -1 ); // do it m_wp += shift_words; shift_right( shift_bits ); find_sw(); } } // ---------------------------------------------------------------------------- // FRIEND FUNCTION : compare_abs // // Compares the absolute values of two scfx_reps, excluding the special cases. // ---------------------------------------------------------------------------- int compare_abs( const scfx_rep& a, const scfx_rep& b ) { // check for zero word a_word = a.m_mant[a.m_msw]; word b_word = b.m_mant[b.m_msw]; if( a_word == 0 || b_word == 0 ) { if( a_word != 0 ) return 1; if( b_word != 0 ) return -1; return 0; } // compare msw index int a_msw = a.m_msw - a.m_wp; int b_msw = b.m_msw - b.m_wp; if( a_msw > b_msw ) return 1; if( a_msw < b_msw ) return -1; // compare content int a_i = a.m_msw; int b_i = b.m_msw; while( a_i >= a.m_lsw && b_i >= b.m_lsw ) { a_word = a.m_mant[a_i]; b_word = b.m_mant[b_i]; if( a_word > b_word ) return 1; if( a_word < b_word ) return -1; -- a_i; -- b_i; } bool a_zero = true; while( a_i >= a.m_lsw ) { a_zero = a_zero && ( a.m_mant[a_i] == 0 ); -- a_i; } bool b_zero = true; while( b_i >= b.m_lsw ) { b_zero = b_zero && ( b.m_mant[b_i] == 0 ); -- b_i; } // assertion: a_zero || b_zero == true if( ! a_zero && b_zero ) return 1; if( a_zero && ! b_zero ) return -1; return 0; } // ---------------------------------------------------------------------------- // FRIEND FUNCTION : cmp_scfx_rep // // Compares the values of two scfx_reps, including the special cases. // ---------------------------------------------------------------------------- int cmp_scfx_rep( const scfx_rep& a, const scfx_rep& b ) { // handle special cases if( a.is_nan() || b.is_nan() ) { #if 0 if( a.is_nan() && b.is_nan() ) { return 0; } #endif return 2; } if( a.is_inf() || b.is_inf() ) { if( a.is_inf() ) { if( ! a.is_neg() ) { if( b.is_inf() && ! b.is_neg() ) { return 0; } else { return 1; } } else { if( b.is_inf() && b.is_neg() ) { return 0; } else { return -1; } } } if( b.is_inf() ) { if( ! b.is_neg() ) { return -1; } else { return 1; } } } if( a.is_zero() && b.is_zero() ) { return 0; } // compare sign if( a.m_sign != b.m_sign ) { return a.m_sign; } return ( a.m_sign * compare_abs( a, b ) ); } // ---------------------------------------------------------------------------- // PRIVATE METHOD : quantization // // Performs destructive quantization. // ---------------------------------------------------------------------------- void scfx_rep::quantization( const scfx_params& params, bool& q_flag ) { scfx_index x = calc_indices( params.iwl() - params.wl() ); if( x.wi() < 0 ) return; if( x.wi() >= size() ) resize_to( x.wi() + 1, 1 ); bool qb = q_bit( x ); bool qz = q_zero( x ); q_flag = ( qb || ! qz ); if( q_flag ) { switch( params.q_mode() ) { case SC_TRN: // truncation { if( is_neg() ) q_incr( x ); break; } case SC_RND: // rounding to plus infinity { if( ! is_neg() ) { if( qb ) q_incr( x ); } else { if( qb && ! qz ) q_incr( x ); } break; } case SC_TRN_ZERO: // truncation to zero { break; } case SC_RND_INF: // rounding to infinity { if( qb ) q_incr( x ); break; } case SC_RND_CONV: // convergent rounding { if( (qb && ! qz) || (qb && qz && q_odd( x )) ) q_incr( x ); break; } case SC_RND_ZERO: // rounding to zero { if( qb && ! qz ) q_incr( x ); break; } case SC_RND_MIN_INF: // rounding to minus infinity { if( ! is_neg() ) { if( qb && ! qz ) q_incr( x ); } else { if( qb ) q_incr( x ); } break; } default: ; } q_clear( x ); find_sw(); } } // ---------------------------------------------------------------------------- // PRIVATE METHOD : overflow // // Performs destructive overflow handling. // ---------------------------------------------------------------------------- void scfx_rep::overflow( const scfx_params& params, bool& o_flag ) { scfx_index x = calc_indices( params.iwl() - 1 ); if( x.wi() >= size() ) resize_to( x.wi() + 1, 1 ); if( x.wi() < 0 ) { resize_to( size() - x.wi(), -1 ); x.wi( 0 ); } bool zero_left = o_zero_left( x ); bool bit_at = o_bit_at( x ); bool zero_right = o_zero_right( x ); bool under = false; bool over = false; sc_enc enc = params.enc(); if( enc == SC_TC_ ) { if( is_neg() ) { if( params.o_mode() == SC_SAT_SYM ) under = ( ! zero_left || bit_at ); else under = (! zero_left || (zero_left && bit_at && ! zero_right)); } else over = ( ! zero_left || bit_at ); } else { if( is_neg() ) under = ( ! is_zero() ); else over = ( ! zero_left ); } o_flag = ( under || over ); if( o_flag ) { scfx_index x2 = calc_indices( params.iwl() - params.wl() ); if( x2.wi() < 0 ) { resize_to( size() - x2.wi(), -1 ); x.wi( x.wi() - x2.wi() ); x2.wi( 0 ); } switch( params.o_mode() ) { case SC_WRAP: // wrap-around { int n_bits = params.n_bits(); if( n_bits == 0 ) { // wrap-around all 'wl' bits toggle_tc(); o_extend( x, enc ); toggle_tc(); } else if( n_bits < params.wl() ) { scfx_index x3 = calc_indices( params.iwl() - 1 - n_bits ); // wrap-around least significant 'wl - n_bits' bits; // saturate most significant 'n_bits' bits toggle_tc(); o_set( x, x3, enc, under ); o_extend( x, enc ); toggle_tc(); } else { // saturate all 'wl' bits if( under ) o_set_low( x, enc ); else o_set_high( x, x2, enc ); } break; } case SC_SAT: // saturation { if( under ) o_set_low( x, enc ); else o_set_high( x, x2, enc ); break; } case SC_SAT_SYM: // symmetrical saturation { if( under ) { if( enc == SC_TC_ ) o_set_high( x, x2, SC_TC_, -1 ); else o_set_low( x, SC_US_ ); } else o_set_high( x, x2, enc ); break; } case SC_SAT_ZERO: // saturation to zero { set_zero(); break; } case SC_WRAP_SM: // sign magnitude wrap-around { SC_ERROR_IF_( enc == SC_US_, sc_core::SC_ID_WRAP_SM_NOT_DEFINED_ ); int n_bits = params.n_bits(); if( n_bits == 0 ) { scfx_index x4 = calc_indices( params.iwl() ); if( x4.wi() >= size() ) resize_to( x4.wi() + 1, 1 ); toggle_tc(); if( o_bit_at( x4 ) != o_bit_at( x ) ) o_invert( x2 ); o_extend( x, SC_TC_ ); toggle_tc(); } else if( n_bits == 1 ) { toggle_tc(); if( is_neg() != o_bit_at( x ) ) o_invert( x2 ); o_extend( x, SC_TC_ ); toggle_tc(); } else if( n_bits < params.wl() ) { scfx_index x3 = calc_indices( params.iwl() - 1 - n_bits ); scfx_index x4 = calc_indices( params.iwl() - n_bits ); // wrap-around least significant 'wl - n_bits' bits; // saturate most significant 'n_bits' bits toggle_tc(); if( is_neg() == o_bit_at( x4 ) ) o_invert( x2 ); o_set( x, x3, SC_TC_, under ); o_extend( x, SC_TC_ ); toggle_tc(); } else { if( under ) o_set_low( x, SC_TC_ ); else o_set_high( x, x2, SC_TC_ ); } break; } default: ; } find_sw(); } } // ---------------------------------------------------------------------------- // PUBLIC METHOD : cast // // Performs a destructive cast operation on a scfx_rep. // ---------------------------------------------------------------------------- void scfx_rep::cast( const scfx_params& params, bool& q_flag, bool& o_flag ) { q_flag = false; o_flag = false; // check for special cases if( is_zero() ) { if( is_neg() ) m_sign = 1; return; } // perform casting quantization( params, q_flag ); overflow( params, o_flag ); // check for special case: -0 if( is_zero() && is_neg() ) m_sign = 1; } // ---------------------------------------------------------------------------- // make sure, the two mantissas are aligned // ---------------------------------------------------------------------------- void align( const scfx_rep& lhs, const scfx_rep& rhs, int& new_wp, int& len_mant, scfx_mant_ref& lhs_mant, scfx_mant_ref& rhs_mant ) { int lower_bound_lhs = lhs.m_lsw - lhs.m_wp; int upper_bound_lhs = lhs.m_msw - lhs.m_wp; int lower_bound_rhs = rhs.m_lsw - rhs.m_wp; int upper_bound_rhs = rhs.m_msw - rhs.m_wp; int lower_bound = sc_min( lower_bound_lhs, lower_bound_rhs ); int upper_bound = sc_max( upper_bound_lhs, upper_bound_rhs ); new_wp = -lower_bound; len_mant = sc_max( min_mant, upper_bound - lower_bound + 1 ) + 1; lhs_mant = lhs.resize( len_mant, new_wp ); rhs_mant = rhs.resize( len_mant, new_wp ); } // ---------------------------------------------------------------------------- // compare two mantissas // ---------------------------------------------------------------------------- int compare_msw_ff( const scfx_rep& lhs, const scfx_rep& rhs ) { // special case: rhs.m_mant[rhs.m_msw + 1] == 1 if( rhs.m_msw < rhs.size() - 1 && rhs.m_mant[rhs.m_msw + 1 ] != 0 ) { return -1; } int lhs_size = lhs.m_msw - lhs.m_lsw + 1; int rhs_size = rhs.m_msw - rhs.m_lsw + 1; int size = sc_min( lhs_size, rhs_size ); int lhs_index = lhs.m_msw; int rhs_index = rhs.m_msw; int i; for( i = 0; i < size && lhs.m_mant[lhs_index] == rhs.m_mant[rhs_index]; i ++ ) { lhs_index --; rhs_index --; } if( i == size ) { if( lhs_size == rhs_size ) { return 0; } if( lhs_size < rhs_size ) { return -1; } else { return 1; } } if( lhs.m_mant[lhs_index] < rhs.m_mant[rhs_index] ) { return -1; } else { return 1; } } // ---------------------------------------------------------------------------- // divide the mantissa by ten // ---------------------------------------------------------------------------- unsigned int scfx_rep::divide_by_ten() { #if defined( SC_BIG_ENDIAN ) half_word* hw = (half_word*) &m_mant[m_msw]; #elif defined( SC_LITTLE_ENDIAN ) half_word* hw = ( (half_word*) &m_mant[m_msw] ) + 1; #endif unsigned int remainder = 0; word_short ls; ls.l = 0; #if defined( SC_BIG_ENDIAN ) for( int i = 0, end = ( m_msw - m_wp + 1 ) * 2; i < end; i ++ ) #elif defined( SC_LITTLE_ENDIAN ) for( int i = 0, end = -( m_msw - m_wp + 1 ) * 2; i > end; i -- ) #endif { ls.s.u = static_cast( remainder ); ls.s.l = hw[i]; remainder = ls.l % 10; ls.l /= 10; hw[i] = ls.s.l; } return remainder; } // ---------------------------------------------------------------------------- // multiply the mantissa by ten // ---------------------------------------------------------------------------- void scfx_rep::multiply_by_ten() { int size = m_mant.size() + 1; scfx_mant mant8( size ); scfx_mant mant2( size ); size --; mant8[size] = (m_mant[size - 1] >> (bits_in_word - 3)); mant2[size] = (m_mant[size - 1] >> (bits_in_word - 1)); while( -- size ) { mant8[size] = ( m_mant[size] << 3 ) | ( m_mant[size - 1] >> ( bits_in_word - 3 ) ); mant2[size] = ( m_mant[size] << 1 ) | ( m_mant[size - 1] >> ( bits_in_word - 1 ) ); } mant8[0] = ( m_mant[0] << 3 ); mant2[0] = ( m_mant[0] << 1 ); add_mants( m_mant.size(), m_mant, mant8, mant2 ); #if 0 for( int i = size() - 1; i > 0; i -- ) { m_mant[i] = ( m_mant[i] << 3 ) | ( m_mant[i-1] >> ( bits_in_word - 3 ) ) + ( m_mant[i] << 1 ) | ( m_mant[i-1] >> ( bits_in_word - 1 ) ); } m_mant[0] = ( m_mant[0] << 3 ) + ( m_mant[0] << 1 ); #endif } // ---------------------------------------------------------------------------- // normalize // ---------------------------------------------------------------------------- void scfx_rep::normalize( int exponent ) { int shift = exponent % bits_in_word; if( shift < 0 ) { shift += bits_in_word; } if( shift ) { shift_left( shift ); } find_sw(); m_wp = (shift - exponent) / bits_in_word; } // ---------------------------------------------------------------------------- // return a new mantissa that is aligned and resized // ---------------------------------------------------------------------------- scfx_mant* scfx_rep::resize( int new_size, int new_wp ) const { scfx_mant *result = new scfx_mant( new_size ); result->clear(); int shift = new_wp - m_wp; for( int j = m_lsw; j <= m_msw; j ++ ) { (*result)[j+shift] = m_mant[j]; } return result; } // ---------------------------------------------------------------------------- // set a single bit // ---------------------------------------------------------------------------- void scfx_rep::set_bin( int i ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } // ---------------------------------------------------------------------------- // set three bits // ---------------------------------------------------------------------------- void scfx_rep::set_oct( int i, int n ) { if( n & 1 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } i ++; if( n & 2 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } i ++; if( n & 4 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } } // ---------------------------------------------------------------------------- // set four bits // ---------------------------------------------------------------------------- void scfx_rep::set_hex( int i, int n ) { if( n & 1 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } i ++; if( n & 2 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } i ++; if( n & 4 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } i ++; if( n & 8 ) { m_mant[i >> 5] |= 1 << ( i & 31 ); } } // ---------------------------------------------------------------------------- // PRIVATE METHOD : shift_left // // Shifts a scfx_rep to the left by a MAXIMUM of bits_in_word - 1 bits. // ---------------------------------------------------------------------------- void scfx_rep::shift_left( int n ) { if( n != 0 ) { int shift_left = n; int shift_right = bits_in_word - n; SC_ASSERT_( !(m_mant[size()-1] >> shift_right), "shift_left overflow" ); for( int i = size() - 1; i > 0; i -- ) { m_mant[i] = ( m_mant[i] << shift_left ) | ( m_mant[i-1] >> shift_right ); } m_mant[0] <<= shift_left; } } // ---------------------------------------------------------------------------- // PRIVATE METHOD : shift_right // // Shifts a scfx_rep to the right by a MAXIMUM of bits_in_word - 1 bits. // ---------------------------------------------------------------------------- void scfx_rep::shift_right( int n ) { if( n != 0 ) { int shift_left = bits_in_word - n; int shift_right = n; SC_ASSERT_( !(m_mant[0] << shift_left), "shift_right overflow" ); for( int i = 0; i < size() - 1; i ++ ) { m_mant[i] = ( m_mant[i] >> shift_right ) | ( m_mant[i+1] << shift_left ); } m_mant[size()-1] >>= shift_right; } } // ---------------------------------------------------------------------------- // METHOD : get_bit // // Tests a bit, in two's complement. // ---------------------------------------------------------------------------- bool scfx_rep::get_bit( int i ) const { if( ! is_normal() ) return false; scfx_index x = calc_indices( i ); if( x.wi() >= size() ) return is_neg(); if( x.wi() < 0 ) return false; const_cast( this )->toggle_tc(); bool result = ( m_mant[x.wi()] & ( 1 << x.bi() ) ) != 0; const_cast( this )->toggle_tc(); return result; } // ---------------------------------------------------------------------------- // METHOD : set // // Sets a bit, in two's complement, between iwl-1 and -fwl. // ---------------------------------------------------------------------------- bool scfx_rep::set( int i, const scfx_params& params ) { if( ! is_normal() ) return false; scfx_index x = calc_indices( i ); if( x.wi() >= size() ) { if( is_neg() ) return true; else resize_to( x.wi() + 1, 1 ); } else if( x.wi() < 0 ) { resize_to( size() - x.wi(), -1 ); x.wi( 0 ); } toggle_tc(); m_mant[x.wi()] |= 1 << x.bi(); if( i == params.iwl() - 1 ) o_extend( x, params.enc() ); // sign extension toggle_tc(); find_sw(); return true; } // ---------------------------------------------------------------------------- // METHOD : clear // // Clears a bit, in two's complement, between iwl-1 and -fwl. // ---------------------------------------------------------------------------- bool scfx_rep::clear( int i, const scfx_params& params ) { if( ! is_normal() ) return false; scfx_index x = calc_indices( i ); if( x.wi() >= size() ) { if( ! is_neg() ) return true; else resize_to( x.wi() + 1, 1 ); } else if( x.wi() < 0 ) return true; toggle_tc(); m_mant[x.wi()] &= ~( 1 << x.bi() ); if( i == params.iwl() - 1 ) o_extend( x, params.enc() ); // sign extension toggle_tc(); find_sw(); return true; } // ---------------------------------------------------------------------------- // METHOD : get_slice // ---------------------------------------------------------------------------- bool scfx_rep::get_slice( int i, int j, const scfx_params&, sc_bv_base& bv ) const { if( is_nan() || is_inf() ) return false; // get the bits int l = j; for( int k = 0; k < bv.length(); ++ k ) { bv[k] = get_bit( l ); if( i >= j ) ++ l; else -- l; } return true; } bool scfx_rep::set_slice( int i, int j, const scfx_params& params, const sc_bv_base& bv ) { if( is_nan() || is_inf() ) return false; // set the bits int l = j; for( int k = 0; k < bv.length(); ++ k ) { if( bv[k].to_bool() ) set( l, params ); else clear( l, params ); if( i >= j ) ++ l; else -- l; } return true; } // ---------------------------------------------------------------------------- // METHOD : print // ---------------------------------------------------------------------------- void scfx_rep::print( ::std::ostream& os ) const { os << to_string( SC_DEC, -1, SC_E ); } // ---------------------------------------------------------------------------- // METHOD : dump // ---------------------------------------------------------------------------- void scfx_rep::dump( ::std::ostream& os ) const { os << "scfx_rep" << ::std::endl; os << "(" << ::std::endl; os << "mant =" << ::std::endl; for( int i = size() - 1; i >= 0; i -- ) { char buf[BUFSIZ]; std::sprintf( buf, " %d: %10u (%8x)", i, (int) m_mant[i], (int) m_mant[i] ); os << buf << ::std::endl; } os << "wp = " << m_wp << ::std::endl; os << "sign = " << m_sign << ::std::endl; os << "state = "; switch( m_state ) { case normal: os << "normal"; break; case infinity: os << "infinity"; break; case not_a_number: os << "not_a_number"; break; default: os << "unknown"; } os << ::std::endl; os << "msw = " << m_msw << ::std::endl; os << "lsw = " << m_lsw << ::std::endl; os << ")" << ::std::endl; } // ---------------------------------------------------------------------------- // METHOD : get_type // ---------------------------------------------------------------------------- void scfx_rep::get_type( int& wl, int& iwl, sc_enc& enc ) const { if( is_nan() || is_inf() ) { wl = 0; iwl = 0; enc = SC_TC_; return; } if( is_zero() ) { wl = 1; iwl = 1; enc = SC_US_; return; } int msb = ( m_msw - m_wp ) * bits_in_word + scfx_find_msb( m_mant[ m_msw ] ) + 1; while( get_bit( msb ) == get_bit( msb - 1 ) ) { -- msb; } int lsb = ( m_lsw - m_wp ) * bits_in_word + scfx_find_lsb( m_mant[ m_lsw ] ); if( is_neg() ) { wl = msb - lsb + 1; iwl = msb + 1; enc = SC_TC_; } else { wl = msb - lsb; iwl = msb; enc = SC_US_; } } // ---------------------------------------------------------------------------- // PRIVATE METHOD : round // // Performs convergent rounding (rounding to even) as in floating-point. // ---------------------------------------------------------------------------- void scfx_rep::round( int wl ) { // check for special cases if( is_nan() || is_inf() || is_zero() ) return; // estimate effective wordlength and compare int wl_effective; wl_effective = ( m_msw - m_lsw + 1 ) * bits_in_word; if( wl_effective <= wl ) return; // calculate effective wordlength and compare int msb = scfx_find_msb( m_mant[m_msw] ); int lsb = scfx_find_lsb( m_mant[m_lsw] ); wl_effective = ( m_msw * bits_in_word + msb ) - ( m_lsw * bits_in_word + lsb ) + 1; if( wl_effective <= wl ) return; // perform rounding int wi = m_msw - ( wl - 1 ) / bits_in_word; int bi = msb - ( wl - 1 ) % bits_in_word; if( bi < 0 ) { -- wi; bi += bits_in_word; } scfx_index x( wi, bi ); if( (q_bit( x ) && ! q_zero( x )) || (q_bit( x ) && q_zero( x ) && q_odd( x )) ) q_incr( x ); q_clear( x ); find_sw(); m_r_flag = true; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_utils.h0000644000175000017500000002621714342422106021614 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_utils.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_utils.h,v $ // Revision 1.2 2009/02/28 00:26:20 acg // Andy Goodrich: bug fixes. // // Revision 1.1.1.1 2006/12/15 20:31:36 acg // SystemC 2.2 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_UTILS_H #define SCFX_UTILS_H #include "sysc/datatypes/fx/sc_fxdefs.h" #include "sysc/datatypes/fx/scfx_params.h" #include "sysc/datatypes/fx/scfx_string.h" namespace sc_dt { // ---------------------------------------------------------------------------- // Find the most and least significant non-zero bits in a unsigned long // ---------------------------------------------------------------------------- #define MSB_STATEMENT(n) if( x >> n ) { x >>= n; i += n; } inline int scfx_find_msb( unsigned long x ) { int i = 0; # if defined(SC_LONG_64) MSB_STATEMENT( 32 ); # endif // defined(SC_LONG_64) MSB_STATEMENT( 16 ); MSB_STATEMENT( 8 ); MSB_STATEMENT( 4 ); MSB_STATEMENT( 2 ); MSB_STATEMENT( 1 ); return i; } #undef MSB_STATEMENT #define LSB_STATEMENT(n) if( x << n ) { x <<= n; i -= n; } inline int scfx_find_lsb( unsigned long x ) { int i; # if defined(SC_LONG_64) i = 63; LSB_STATEMENT( 32 ); # else i = 31; # endif // defined(SC_LONG_64) LSB_STATEMENT( 16 ); LSB_STATEMENT( 8 ); LSB_STATEMENT( 4 ); LSB_STATEMENT( 2 ); LSB_STATEMENT( 1 ); return i; } #undef LSB_STATEMENT // ---------------------------------------------------------------------------- // Utilities for parsing a character string number // ---------------------------------------------------------------------------- inline int scfx_parse_sign( const char*& s, bool& sign_char ) { int sign = 1; if( *s == '+' ) { ++ s; sign_char = true; } else if( *s == '-' ) { sign = -1; ++ s; sign_char = true; } else sign_char = false; return sign; } inline sc_numrep scfx_parse_prefix( const char*& s ) { if( s[0] == '0' ) { switch( s[1] ) { case 'b': case 'B': { if( (s[2] == 'u' || s[2] == 'U') && (s[3] == 's' || s[3] == 'S') ) { s += 4; return SC_BIN_US; } if( (s[2] == 's' || s[2] == 'S') && (s[3] == 'm' || s[3] == 'M') ) { s += 4; return SC_BIN_SM; } s += 2; return SC_BIN; } case 'o': case 'O': { if( (s[2] == 'u' || s[2] == 'U') && (s[3] == 's' || s[3] == 'S') ) { s += 4; return SC_OCT_US; } if( (s[2] == 's' || s[2] == 'S') && (s[3] == 'm' || s[3] == 'M') ) { s += 4; return SC_OCT_SM; } s += 2; return SC_OCT; } case 'x': case 'X': { if( (s[2] == 'u' || s[2] == 'U') && (s[3] == 's' || s[3] == 'S') ) { s += 4; return SC_HEX_US; } if( (s[2] == 's' || s[2] == 'S') && (s[3] == 'm' || s[3] == 'M') ) { s += 4; return SC_HEX_SM; } s += 2; return SC_HEX; } case 'd': case 'D': { s += 2; return SC_DEC; } case 'c': case 'C': { if( (s[2] == 's' || s[2] == 'S') && (s[3] == 'd' || s[3] == 'D') ) { s += 4; return SC_CSD; } break; } default: break; } } return SC_DEC; } inline int scfx_parse_base( const char*& s ) { const char* s1 = s + 1; int base = 10; if( *s == '0' ) { switch( *s1 ) { case 'b': case 'B': base = 2; s += 2; break; case 'o': case 'O': base = 8; s += 2; break; case 'd': case 'D': base = 10; s += 2; break; case 'x': case 'X': base = 16; s += 2; break; } } return base; } inline bool scfx_is_equal( const char* a, const char* b ) { while( *a != 0 && *b != 0 && *a == *b ) { ++ a; ++ b; } return ( *a == 0 && *b == 0 ); } inline bool scfx_is_nan( const char* s ) { return scfx_is_equal( s, "NaN" ); } inline bool scfx_is_inf( const char* s ) { return ( scfx_is_equal( s, "Inf" ) || scfx_is_equal( s, "Infinity" ) ); } inline bool scfx_exp_start( const char* s ) { if( *s == 'e' || *s == 'E' ) { ++ s; if( *s == '+' || *s == '-' ) return true; } return false; } inline bool scfx_is_digit( char c, sc_numrep numrep ) { bool is_digit; switch( numrep ) { case SC_DEC: { switch( c ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { is_digit = true; break; } default: is_digit = false; } break; } case SC_BIN: case SC_BIN_US: case SC_BIN_SM: { switch( c ) { case '0': case '1': { is_digit = true; break; } default: is_digit = false; } break; } case SC_OCT: case SC_OCT_US: case SC_OCT_SM: { switch( c ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { is_digit = true; break; } default: is_digit = false; } break; } case SC_HEX: case SC_HEX_US: case SC_HEX_SM: { switch( c ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': { is_digit = true; break; } default: is_digit = false; } break; } case SC_CSD: { switch( c ) { case '0': case '1': case '-': { is_digit = true; break; } default: is_digit = false; } break; } default: is_digit = false; } return is_digit; } inline int scfx_to_digit( char c, sc_numrep numrep ) { int to_digit; switch( numrep ) { case SC_DEC: case SC_BIN: case SC_BIN_US: case SC_BIN_SM: case SC_OCT: case SC_OCT_US: case SC_OCT_SM: { to_digit = c - '0'; break; } case SC_HEX: case SC_HEX_US: case SC_HEX_SM: { switch( c ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': to_digit = c - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': to_digit = c - 'a' + 10; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': to_digit = c - 'A' + 10; break; default: to_digit = -2; } break; } case SC_CSD: { if( c == '-' ) to_digit = -1; else to_digit = c - '0'; break; } default: to_digit = -2; } return to_digit; } // ---------------------------------------------------------------------------- // Utilities for printing a character string number // ---------------------------------------------------------------------------- inline void scfx_print_nan( scfx_string& s ) { s += "NaN"; } inline void scfx_print_inf( scfx_string& s, bool negative ) { if( negative ) s += "-Inf"; else s += "Inf"; } inline void scfx_print_prefix( scfx_string& s, sc_numrep numrep ) { switch( numrep ) { case SC_DEC: s += "0d"; break; case SC_BIN: s += "0b"; break; case SC_BIN_US: s += "0bus"; break; case SC_BIN_SM: s += "0bsm"; break; case SC_OCT: s += "0o"; break; case SC_OCT_US: s += "0ous"; break; case SC_OCT_SM: s += "0osm"; break; case SC_HEX: s += "0x"; break; case SC_HEX_US: s += "0xus"; break; case SC_HEX_SM: s += "0xsm"; break; case SC_CSD: s += "0csd"; break; default: s += "unknown"; } } inline void scfx_print_exp( scfx_string& s, int exp ) { if( exp != 0 ) { s += 'e'; if( exp < 0 ) { exp = - exp; s += '-'; } else s += '+'; bool first = true; int scale = 1000000000; do { int digit = exp / scale; exp = exp % scale; if( digit != 0 || ! first ) { s += static_cast( digit + '0' ); first = false; } scale /= 10; } while( scale > 0 ); } } void scfx_tc2csd( scfx_string&, int ); void scfx_csd2tc( scfx_string& ); } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxcast_switch.cpp0000644000175000017500000000551514342422106023320 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxcast_switch.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Gene Bushuyev, Synopsys, Inc. Description of Modification: - fix explicit instantiation syntax. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxcast_switch.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/sc_fxcast_switch.h" // explicit template instantiations namespace sc_core { template class SC_API sc_phash; } // namespace sc_core namespace sc_dt { template class SC_API sc_global; template class SC_API sc_context; // ---------------------------------------------------------------------------- // CLASS : sc_fxcast_switch // // Fixed-point cast switch class. // ---------------------------------------------------------------------------- const std::string sc_fxcast_switch::to_string() const { return sc_dt::to_string( m_sw ); } void sc_fxcast_switch::print( ::std::ostream& os ) const { os << sc_dt::to_string( m_sw ); } void sc_fxcast_switch::dump( ::std::ostream& os ) const { os << "sc_fxcast_switch" << ::std::endl; os << "(" << ::std::endl; os << "sw = " << sc_dt::to_string( m_sw ) << ::std::endl; os << ")" << ::std::endl; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxdefs.cpp0000644000175000017500000001140714342422106021723 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxdefs.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxdefs.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/sc_fxdefs.h" namespace sc_dt { // ---------------------------------------------------------------------------- // ENUM : sc_enc // // Enumeration of sign encodings. // ---------------------------------------------------------------------------- SC_API const std::string to_string( sc_enc enc ) { switch( enc ) { case SC_TC_: return std::string( "SC_TC_" ); case SC_US_: return std::string( "SC_US_" ); default: return std::string( "unknown" ); } } // ---------------------------------------------------------------------------- // ENUM : sc_q_mode // // Enumeration of quantization modes. // ---------------------------------------------------------------------------- SC_API const std::string to_string( sc_q_mode q_mode ) { switch( q_mode ) { case SC_RND: return std::string( "SC_RND" ); case SC_RND_ZERO: return std::string( "SC_RND_ZERO" ); case SC_RND_MIN_INF: return std::string( "SC_RND_MIN_INF" ); case SC_RND_INF: return std::string( "SC_RND_INF" ); case SC_RND_CONV: return std::string( "SC_RND_CONV" ); case SC_TRN: return std::string( "SC_TRN" ); case SC_TRN_ZERO: return std::string( "SC_TRN_ZERO" ); default: return std::string( "unknown" ); } } // ---------------------------------------------------------------------------- // ENUM : sc_o_mode // // Enumeration of overflow modes. // ---------------------------------------------------------------------------- SC_API const std::string to_string( sc_o_mode o_mode ) { switch( o_mode ) { case SC_SAT: return std::string( "SC_SAT" ); case SC_SAT_ZERO: return std::string( "SC_SAT_ZERO" ); case SC_SAT_SYM: return std::string( "SC_SAT_SYM" ); case SC_WRAP: return std::string( "SC_WRAP" ); case SC_WRAP_SM: return std::string( "SC_WRAP_SM" ); default: return std::string( "unknown" ); } } // ---------------------------------------------------------------------------- // ENUM : sc_switch // // Enumeration of switch states. // ---------------------------------------------------------------------------- SC_API const std::string to_string( sc_switch sw ) { switch( sw ) { case SC_OFF: return std::string( "SC_OFF" ); case SC_ON: return std::string( "SC_ON" ); default: return std::string( "unknown" ); } } // ---------------------------------------------------------------------------- // ENUM : sc_fmt // // Enumeration of formats for character string conversion. // ---------------------------------------------------------------------------- SC_API const std::string to_string( sc_fmt fmt ) { switch( fmt ) { case SC_F: return std::string( "SC_F" ); case SC_E: return std::string( "SC_E" ); default: return std::string( "unknown" ); } } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxval_observer.h0000644000175000017500000001440414342422106023140 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxval_observer.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxval_observer.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXVAL_OBSERVER_H #define SC_FXVAL_OBSERVER_H #include "sysc/datatypes/fx/sc_fxdefs.h" namespace sc_dt { // classes defined in this module class sc_fxval_observer; class sc_fxval_fast_observer; // forward class declarations class sc_fxval; class sc_fxval_fast; #ifdef SC_ENABLE_OBSERVERS #define SC_FXVAL_OBSERVER_CONSTRUCT_(object) \ SC_OBSERVER_(object,sc_fxval_observer*,construct) #define SC_FXVAL_OBSERVER_DESTRUCT_(object) \ SC_OBSERVER_(object,sc_fxval_observer*,destruct) #define SC_FXVAL_OBSERVER_READ_(object) \ SC_OBSERVER_(object,sc_fxval_observer*,read) #define SC_FXVAL_OBSERVER_WRITE_(object) \ SC_OBSERVER_(object,sc_fxval_observer*,write) #define SC_FXVAL_OBSERVER_DEFAULT_ \ SC_OBSERVER_DEFAULT_(sc_fxval_observer) #define SC_FXVAL_FAST_OBSERVER_CONSTRUCT_(object) \ SC_OBSERVER_(object,sc_fxval_fast_observer*,construct) #define SC_FXVAL_FAST_OBSERVER_DESTRUCT_(object) \ SC_OBSERVER_(object,sc_fxval_fast_observer*,destruct) #define SC_FXVAL_FAST_OBSERVER_READ_(object) \ SC_OBSERVER_(object,sc_fxval_fast_observer*,read) #define SC_FXVAL_FAST_OBSERVER_WRITE_(object) \ SC_OBSERVER_(object,sc_fxval_fast_observer*,write) #define SC_FXVAL_FAST_OBSERVER_DEFAULT_ \ SC_OBSERVER_DEFAULT_(sc_fxval_fast_observer) #else #define SC_FXVAL_OBSERVER_CONSTRUCT_(object) #define SC_FXVAL_OBSERVER_DESTRUCT_(object) #define SC_FXVAL_OBSERVER_READ_(object) #define SC_FXVAL_OBSERVER_WRITE_(object) #define SC_FXVAL_OBSERVER_DEFAULT_ #define SC_FXVAL_FAST_OBSERVER_CONSTRUCT_(object) #define SC_FXVAL_FAST_OBSERVER_DESTRUCT_(object) #define SC_FXVAL_FAST_OBSERVER_READ_(object) #define SC_FXVAL_FAST_OBSERVER_WRITE_(object) #define SC_FXVAL_FAST_OBSERVER_DEFAULT_ #endif // ---------------------------------------------------------------------------- // CLASS : sc_fxval_observer // // Abstract base class for fixed-point value type observers; // arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_fxval_observer { protected: sc_fxval_observer() {} virtual ~sc_fxval_observer() {} public: virtual void construct( const sc_fxval& ); virtual void destruct( const sc_fxval& ); virtual void read( const sc_fxval& ); virtual void write( const sc_fxval& ); static sc_fxval_observer* (*default_observer) (); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast_observer // // Abstract base class for fixed-point value type observers; // limited precision. // ---------------------------------------------------------------------------- class SC_API sc_fxval_fast_observer { protected: sc_fxval_fast_observer() {} virtual ~sc_fxval_fast_observer() {} public: virtual void construct( const sc_fxval_fast& ); virtual void destruct( const sc_fxval_fast& ); virtual void read( const sc_fxval_fast& ); virtual void write( const sc_fxval_fast& ); static sc_fxval_fast_observer* (*default_observer) (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fxval_observer // // Abstract base class for fixed-point value type observers; // arbitrary precision. // ---------------------------------------------------------------------------- inline void sc_fxval_observer::construct( const sc_fxval& ) {} inline void sc_fxval_observer::destruct( const sc_fxval& ) {} inline void sc_fxval_observer::read( const sc_fxval& ) {} inline void sc_fxval_observer::write( const sc_fxval& ) {} // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast_observer // // Abstract base class for fixed-point value type observers; // limited precision. // ---------------------------------------------------------------------------- inline void sc_fxval_fast_observer::construct( const sc_fxval_fast& ) {} inline void sc_fxval_fast_observer::destruct( const sc_fxval_fast& ) {} inline void sc_fxval_fast_observer::read( const sc_fxval_fast& ) {} inline void sc_fxval_fast_observer::write( const sc_fxval_fast& ) {} } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fx_ids.h0000644000175000017500000000634214342422106021367 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fx_ids.h -- Report ids for the datatypes/fx code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fx_ids.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FX_IDS_H #define SC_FX_IDS_H #include "sysc/utils/sc_report.h" // ---------------------------------------------------------------------------- // Report ids (datatypes/fx) // // Report ids in the range of 300-399. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } namespace sc_core { extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; // in sc_report_handler.cpp } #endif SC_DEFINE_MESSAGE( SC_ID_INVALID_WL_, 300, "total wordlength <= 0 is not valid" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_N_BITS_, 301, "number of bits < 0 is not valid" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_DIV_WL_, 302, "division wordlength <= 0 is not valid" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_CTE_WL_, 303, "constant wordlength <= 0 is not valid" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_MAX_WL_, 304, "maximum wordlength <= 0 and != -1 is not valid" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_FX_VALUE_, 305, "invalid fixed-point value" ) SC_DEFINE_MESSAGE( SC_ID_INVALID_O_MODE_, 306, "invalid overflow mode" ) SC_DEFINE_MESSAGE( SC_ID_OUT_OF_RANGE_, 307, "index out of range" ) SC_DEFINE_MESSAGE( SC_ID_CONTEXT_BEGIN_FAILED_, 308, "context begin failed" ) SC_DEFINE_MESSAGE( SC_ID_CONTEXT_END_FAILED_, 309, "context end failed" ) SC_DEFINE_MESSAGE( SC_ID_WRAP_SM_NOT_DEFINED_, 310, "SC_WRAP_SM not defined for unsigned numbers" ) #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_pow10.cpp0000644000175000017500000000656714342422106021763 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_pow10.cpp - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_pow10.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/scfx_pow10.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : scfx_pow10 // // Class to compute (and cache) powers of 10 in arbitrary precision. // ---------------------------------------------------------------------------- scfx_pow10::scfx_pow10() { m_pos[0] = scfx_rep( 10.0 ); m_neg[0] = scfx_rep( 0.1 ); for( int i = 1; i < SCFX_POW10_TABLE_SIZE; i ++ ) { m_pos[i].set_nan(); m_neg[i].set_nan(); } } scfx_pow10::~scfx_pow10() {} const scfx_rep scfx_pow10::operator() ( int i ) { if( i == 0 ) { return scfx_rep( 1.0 ); } if( i > 0 ) { int bit = scfx_find_msb( i ); scfx_rep result = *pos( bit ); if( bit ) { while( -- bit >= 0 ) { if( ( 1 << bit ) & i ) { scfx_rep* tmp = mult_scfx_rep( result, *pos( bit ) ); result = *tmp; delete tmp; } } } return result; } else { i = -i; int bit = scfx_find_msb( i ); scfx_rep result = *neg( bit ); if( bit ) { while( -- bit >= 0 ) { if( ( 1 << bit ) & i ) { scfx_rep* tmp = mult_scfx_rep( result, *neg( bit ) ); result = *tmp; delete tmp; } } } return result; } } scfx_rep* scfx_pow10::pos( int i ) { if( ! m_pos[i].is_normal() ) { multiply( m_pos[i], *pos( i - 1 ), *pos( i - 1 ) ); } return &m_pos[i]; } scfx_rep* scfx_pow10::neg( int i ) { if( ! m_neg[i].is_normal() ) { multiply( m_neg[i], *neg( i - 1 ), *neg( i - 1 ) ); } return &m_neg[i]; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fixed.h0000644000175000017500000005453314342422106021217 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fixed.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fixed.h,v $ // Revision 1.2 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FIXED_H #define SC_FIXED_H #include "sysc/datatypes/fx/sc_fix.h" namespace sc_dt { // classes defined in this module template class sc_fixed; template class sc_fixed_fast; // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_fixed // // "Constrained" signed fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- template class sc_fixed : public sc_fix { public: // constructors explicit sc_fixed( sc_fxnum_observer* = 0 ); explicit sc_fixed( const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_fixed( tp, sc_fxnum_observer* = 0 ); \ sc_fixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_B(tp) \ explicit sc_fixed( tp, sc_fxnum_observer* = 0 ); \ sc_fixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_fixed( const sc_fixed& ); // assignment operators sc_fixed& operator = ( const sc_fixed& ); #define DECL_ASN_OP_T(op,tp) \ sc_fixed& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_fix&) DECL_ASN_OP_T(&=,const sc_fix_fast&) DECL_ASN_OP_T(|=,const sc_fix&) DECL_ASN_OP_T(|=,const sc_fix_fast&) DECL_ASN_OP_T(^=,const sc_fix&) DECL_ASN_OP_T(^=,const sc_fix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_fixed& operator ++ (); sc_fixed& operator -- (); }; // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_fixed_fast // // "Constrained" signed fixed-point class; limited precision. // ---------------------------------------------------------------------------- template class sc_fixed_fast : public sc_fix_fast { public: // constructors explicit sc_fixed_fast( sc_fxnum_fast_observer* = 0 ); explicit sc_fixed_fast( const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_fixed_fast( tp, sc_fxnum_fast_observer* = 0 ); \ sc_fixed_fast( tp, const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_B(tp) \ explicit sc_fixed_fast( tp, sc_fxnum_fast_observer* = 0 ); \ sc_fixed_fast( tp, const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_fixed_fast( const sc_fixed_fast& ); // assignment operators sc_fixed_fast& operator = ( const sc_fixed_fast& ); #define DECL_ASN_OP_T(op,tp) \ sc_fixed_fast& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_fix&) DECL_ASN_OP_T(&=,const sc_fix_fast&) DECL_ASN_OP_T(|=,const sc_fix&) DECL_ASN_OP_T(|=,const sc_fix_fast&) DECL_ASN_OP_T(^=,const sc_fix&) DECL_ASN_OP_T(^=,const sc_fix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_fixed_fast& operator ++ (); sc_fixed_fast& operator -- (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_fixed // // "Constrained" signed fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- template inline sc_fixed::sc_fixed( sc_fxnum_observer* observer_ ) : sc_fix( W, I, Q, O, N, observer_ ) {} template inline sc_fixed::sc_fixed( const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fix( W, I, Q, O, N, cast_sw, observer_ ) {} #define DEFN_CTORS_T(tp) \ template \ inline \ sc_fixed::sc_fixed( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_fix( a, W, I, Q, O, N, observer_ ) \ {} \ \ template \ inline \ sc_fixed::sc_fixed( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fix( a, W, I, Q, O, N, cast_sw, observer_ ) \ {} DEFN_CTORS_T(int) DEFN_CTORS_T(unsigned int) DEFN_CTORS_T(long) DEFN_CTORS_T(unsigned long) DEFN_CTORS_T(float) DEFN_CTORS_T(double) DEFN_CTORS_T(const char*) DEFN_CTORS_T(const sc_fxval&) DEFN_CTORS_T(const sc_fxval_fast&) DEFN_CTORS_T(const sc_fxnum&) DEFN_CTORS_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T(int64) DEFN_CTORS_T(uint64) DEFN_CTORS_T(const sc_int_base&) DEFN_CTORS_T(const sc_uint_base&) DEFN_CTORS_T(const sc_signed&) DEFN_CTORS_T(const sc_unsigned&) #endif #undef DEFN_CTORS_T // copy constructor template inline sc_fixed::sc_fixed( const sc_fixed& a ) : sc_fix( a, W, I, Q, O, N ) {} // assignment operators template inline sc_fixed& sc_fixed::operator = ( const sc_fixed& a ) { sc_fix::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ template \ inline \ sc_fixed& \ sc_fixed::operator op ( tp a ) \ { \ sc_fix::operator op ( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) DEFN_ASN_OP_T(&=,const sc_fix&) DEFN_ASN_OP_T(&=,const sc_fix_fast&) DEFN_ASN_OP_T(|=,const sc_fix&) DEFN_ASN_OP_T(|=,const sc_fix_fast&) DEFN_ASN_OP_T(^=,const sc_fix&) DEFN_ASN_OP_T(^=,const sc_fix_fast&) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP // auto-increment and auto-decrement template inline const sc_fxval sc_fixed::operator ++ ( int ) { return sc_fxval( sc_fix::operator ++ ( 0 ) ); } template inline const sc_fxval sc_fixed::operator -- ( int ) { return sc_fxval( sc_fix::operator -- ( 0 ) ); } template inline sc_fixed& sc_fixed::operator ++ () { sc_fix::operator ++ (); return *this; } template inline sc_fixed& sc_fixed::operator -- () { sc_fix::operator -- (); return *this; } // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_fixed_fast // // "Constrained" signed fixed-point class; limited precision. // ---------------------------------------------------------------------------- template inline sc_fixed_fast::sc_fixed_fast( sc_fxnum_fast_observer* observer_ ) : sc_fix_fast( W, I, Q, O, N, observer_ ) {} template inline sc_fixed_fast::sc_fixed_fast( const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fix_fast( W, I, Q, O, N, cast_sw, observer_ ) {} #define DEFN_CTORS_T(tp) \ template \ inline \ sc_fixed_fast::sc_fixed_fast( tp a, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fix_fast( a, W, I, Q, O, N, observer_ ) \ {} \ \ template \ inline \ sc_fixed_fast::sc_fixed_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fix_fast( a, W, I, Q, O, N, cast_sw, observer_ ) \ {} DEFN_CTORS_T(int) DEFN_CTORS_T(unsigned int) DEFN_CTORS_T(long) DEFN_CTORS_T(unsigned long) DEFN_CTORS_T(float) DEFN_CTORS_T(double) DEFN_CTORS_T(const char*) DEFN_CTORS_T(const sc_fxval&) DEFN_CTORS_T(const sc_fxval_fast&) DEFN_CTORS_T(const sc_fxnum&) DEFN_CTORS_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T(int64) DEFN_CTORS_T(uint64) DEFN_CTORS_T(const sc_int_base&) DEFN_CTORS_T(const sc_uint_base&) DEFN_CTORS_T(const sc_signed&) DEFN_CTORS_T(const sc_unsigned&) #endif #undef DEFN_CTORS_T // copy constructor template inline sc_fixed_fast::sc_fixed_fast( const sc_fixed_fast& a ) : sc_fix_fast( a, W, I, Q, O, N ) {} // assignment operators template inline sc_fixed_fast& sc_fixed_fast::operator = ( const sc_fixed_fast& a ) { sc_fix_fast::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ template \ inline \ sc_fixed_fast& \ sc_fixed_fast::operator op ( tp a ) \ { \ sc_fix_fast::operator op ( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) DEFN_ASN_OP_T(&=,const sc_fix&) DEFN_ASN_OP_T(&=,const sc_fix_fast&) DEFN_ASN_OP_T(|=,const sc_fix&) DEFN_ASN_OP_T(|=,const sc_fix_fast&) DEFN_ASN_OP_T(^=,const sc_fix&) DEFN_ASN_OP_T(^=,const sc_fix_fast&) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP // auto-increment and auto-decrement template inline const sc_fxval_fast sc_fixed_fast::operator ++ ( int ) { return sc_fxval_fast( sc_fix_fast::operator ++ ( 0 ) ); } template inline const sc_fxval_fast sc_fixed_fast::operator -- ( int ) { return sc_fxval_fast( sc_fix_fast::operator -- ( 0 ) ); } template inline sc_fixed_fast& sc_fixed_fast::operator ++ () { sc_fix_fast::operator ++ (); return *this; } template inline sc_fixed_fast& sc_fixed_fast::operator -- () { sc_fix_fast::operator -- (); return *this; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxnum_observer.h0000644000175000017500000001434014342422106023154 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxnum_observer.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxnum_observer.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXNUM_OBSERVER_H #define SC_FXNUM_OBSERVER_H #include "sysc/datatypes/fx/sc_fxdefs.h" namespace sc_dt { // classes defined in this module class sc_fxnum_observer; class sc_fxnum_fast_observer; // forward class declarations class sc_fxnum; class sc_fxnum_fast; #ifdef SC_ENABLE_OBSERVERS #define SC_FXNUM_OBSERVER_CONSTRUCT_(object) \ SC_OBSERVER_(object,sc_fxnum_observer*,construct) #define SC_FXNUM_OBSERVER_DESTRUCT_(object) \ SC_OBSERVER_(object,sc_fxnum_observer*,destruct) #define SC_FXNUM_OBSERVER_READ_(object) \ SC_OBSERVER_(object,sc_fxnum_observer*,read) #define SC_FXNUM_OBSERVER_WRITE_(object) \ SC_OBSERVER_(object,sc_fxnum_observer*,write) #define SC_FXNUM_OBSERVER_DEFAULT_ \ SC_OBSERVER_DEFAULT_(sc_fxnum_observer) #define SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(object) \ SC_OBSERVER_(object,sc_fxnum_fast_observer*,construct) #define SC_FXNUM_FAST_OBSERVER_DESTRUCT_(object) \ SC_OBSERVER_(object,sc_fxnum_fast_observer*,destruct) #define SC_FXNUM_FAST_OBSERVER_READ_(object) \ SC_OBSERVER_(object,sc_fxnum_fast_observer*,read) #define SC_FXNUM_FAST_OBSERVER_WRITE_(object) \ SC_OBSERVER_(object,sc_fxnum_fast_observer*,write) #define SC_FXNUM_FAST_OBSERVER_DEFAULT_ \ SC_OBSERVER_DEFAULT_(sc_fxnum_fast_observer) #else #define SC_FXNUM_OBSERVER_CONSTRUCT_(object) #define SC_FXNUM_OBSERVER_DESTRUCT_(object) #define SC_FXNUM_OBSERVER_READ_(object) #define SC_FXNUM_OBSERVER_WRITE_(object) #define SC_FXNUM_OBSERVER_DEFAULT_ #define SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(object) #define SC_FXNUM_FAST_OBSERVER_DESTRUCT_(object) #define SC_FXNUM_FAST_OBSERVER_READ_(object) #define SC_FXNUM_FAST_OBSERVER_WRITE_(object) #define SC_FXNUM_FAST_OBSERVER_DEFAULT_ #endif // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_observer // // Abstract base class for fixed-point types observers; arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_observer { protected: sc_fxnum_observer() {} virtual ~sc_fxnum_observer() {} public: virtual void construct( const sc_fxnum& ); virtual void destruct( const sc_fxnum& ); virtual void read( const sc_fxnum& ); virtual void write( const sc_fxnum& ); static sc_fxnum_observer* (*default_observer) (); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_observer // // Abstract base class for fixed-point types observers; limited precision. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast_observer { protected: sc_fxnum_fast_observer() {} virtual ~sc_fxnum_fast_observer() {} public: virtual void construct( const sc_fxnum_fast& ); virtual void destruct( const sc_fxnum_fast& ); virtual void read( const sc_fxnum_fast& ); virtual void write( const sc_fxnum_fast& ); static sc_fxnum_fast_observer* (*default_observer) (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_observer // // Abstract base class for fixed-point types observers; arbitrary precision. // ---------------------------------------------------------------------------- inline void sc_fxnum_observer::construct( const sc_fxnum& ) {} inline void sc_fxnum_observer::destruct( const sc_fxnum& ) {} inline void sc_fxnum_observer::read( const sc_fxnum& ) {} inline void sc_fxnum_observer::write( const sc_fxnum& ) {} // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_observer // // Abstract base class for fixed-point types observers; limited precision. // ---------------------------------------------------------------------------- inline void sc_fxnum_fast_observer::construct( const sc_fxnum_fast& ) {} inline void sc_fxnum_fast_observer::destruct( const sc_fxnum_fast& ) {} inline void sc_fxnum_fast_observer::read( const sc_fxnum_fast& ) {} inline void sc_fxnum_fast_observer::write( const sc_fxnum_fast& ) {} } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxdefs.h0000644000175000017500000002252014342422106021366 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxdefs.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxdefs.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXDEFS_H #define SC_FXDEFS_H #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/utils/sc_machine.h" #include "sysc/datatypes/fx/sc_fx_ids.h" #include "sysc/datatypes/int/sc_nbutils.h" namespace sc_dt { // ---------------------------------------------------------------------------- // ENUM : sc_enc // // Enumeration of sign encodings. // ---------------------------------------------------------------------------- enum sc_enc { SC_TC_, // two's complement SC_US_ // unsigned }; SC_API const std::string to_string( sc_enc ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_enc enc ) { return os << to_string( enc ); } // ---------------------------------------------------------------------------- // ENUM : sc_q_mode // // Enumeration of quantization modes. // ---------------------------------------------------------------------------- enum sc_q_mode { SC_RND, // rounding to plus infinity SC_RND_ZERO, // rounding to zero SC_RND_MIN_INF, // rounding to minus infinity SC_RND_INF, // rounding to infinity SC_RND_CONV, // convergent rounding SC_TRN, // truncation SC_TRN_ZERO // truncation to zero }; SC_API const std::string to_string( sc_q_mode ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_q_mode q_mode ) { return os << to_string( q_mode ); } // ---------------------------------------------------------------------------- // ENUM : sc_o_mode // // Enumeration of overflow modes. // ---------------------------------------------------------------------------- enum sc_o_mode { SC_SAT, // saturation SC_SAT_ZERO, // saturation to zero SC_SAT_SYM, // symmetrical saturation SC_WRAP, // wrap-around (*) SC_WRAP_SM // sign magnitude wrap-around (*) }; // (*) uses the number of saturated bits argument, see the documentation. SC_API const std::string to_string( sc_o_mode ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_o_mode o_mode ) { return os << to_string( o_mode ); } // ---------------------------------------------------------------------------- // ENUM : sc_switch // // Enumeration of switch states. // ---------------------------------------------------------------------------- enum sc_switch { SC_OFF, SC_ON }; SC_API const std::string to_string( sc_switch ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_switch sw ) { return os << to_string( sw ); } // ---------------------------------------------------------------------------- // ENUM : sc_fmt // // Enumeration of formats for character string conversion. // ---------------------------------------------------------------------------- enum sc_fmt { SC_F, // fixed SC_E // scientific }; SC_API const std::string to_string( sc_fmt ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_fmt fmt ) { return os << to_string( fmt ); } // ---------------------------------------------------------------------------- // Built-in & default fixed-point type parameter values. // ---------------------------------------------------------------------------- const int SC_BUILTIN_WL_ = 32; const int SC_BUILTIN_IWL_ = 32; const sc_q_mode SC_BUILTIN_Q_MODE_ = SC_TRN; const sc_o_mode SC_BUILTIN_O_MODE_ = SC_WRAP; const int SC_BUILTIN_N_BITS_ = 0; const int SC_DEFAULT_WL_ = SC_BUILTIN_WL_; const int SC_DEFAULT_IWL_ = SC_BUILTIN_IWL_; const sc_q_mode SC_DEFAULT_Q_MODE_ = SC_BUILTIN_Q_MODE_; const sc_o_mode SC_DEFAULT_O_MODE_ = SC_BUILTIN_O_MODE_; const int SC_DEFAULT_N_BITS_ = SC_BUILTIN_N_BITS_; // ---------------------------------------------------------------------------- // Built-in & default fixed-point cast switch parameter values. // ---------------------------------------------------------------------------- const sc_switch SC_BUILTIN_CAST_SWITCH_ = SC_ON; const sc_switch SC_DEFAULT_CAST_SWITCH_ = SC_BUILTIN_CAST_SWITCH_; // ---------------------------------------------------------------------------- // Built-in & default fixed-point value type parameter values. // ---------------------------------------------------------------------------- const int SC_BUILTIN_DIV_WL_ = 64; const int SC_BUILTIN_CTE_WL_ = 64; const int SC_BUILTIN_MAX_WL_ = 1024; #if defined( SC_FXDIV_WL ) && ( SC_FXDIV_WL > 0 ) const int SC_DEFAULT_DIV_WL_ = SC_FXDIV_WL; #else const int SC_DEFAULT_DIV_WL_ = SC_BUILTIN_DIV_WL_; #endif #if defined( SC_FXCTE_WL ) && ( SC_FXCTE_WL > 0 ) const int SC_DEFAULT_CTE_WL_ = SC_FXCTE_WL; #else const int SC_DEFAULT_CTE_WL_ = SC_BUILTIN_CTE_WL_; #endif #if defined( SC_FXMAX_WL ) && ( SC_FXMAX_WL > 0 || SC_FXMAX_WL == -1 ) const int SC_DEFAULT_MAX_WL_ = SC_FXMAX_WL; #else const int SC_DEFAULT_MAX_WL_ = SC_BUILTIN_MAX_WL_; #endif // ---------------------------------------------------------------------------- // Dedicated error reporting and checking. // ---------------------------------------------------------------------------- #define SC_ERROR_IF_IMPL_(cnd,id,msg) \ do { \ if( cnd ) { \ SC_REPORT_ERROR( id, msg ); \ sc_core::sc_abort(); /* can't recover from here */ \ } \ } while( false ) #ifdef DEBUG_SYSTEMC # define SC_ASSERT_(cnd,msg) \ SC_ERROR_IF_IMPL_(!(cnd), sc_core::SC_ID_INTERNAL_ERROR_, msg ) #else # define SC_ASSERT_(cnd,msg) (void(0)) #endif #define SC_ERROR_IF_(cnd,id) \ SC_ERROR_IF_IMPL_( cnd, id, 0 ) #define SC_CHECK_WL_(wl) \ SC_ERROR_IF_( (wl) <= 0, sc_core::SC_ID_INVALID_WL_ ) #define SC_CHECK_N_BITS_(n_bits) \ SC_ERROR_IF_( (n_bits) < 0, sc_core::SC_ID_INVALID_N_BITS_ ) #define SC_CHECK_DIV_WL_(div_wl) \ SC_ERROR_IF_( (div_wl) <= 0, sc_core::SC_ID_INVALID_DIV_WL_ ) #define SC_CHECK_CTE_WL_(cte_wl) \ SC_ERROR_IF_( (cte_wl) <= 0, sc_core::SC_ID_INVALID_CTE_WL_ ) #define SC_CHECK_MAX_WL_(max_wl) \ SC_ERROR_IF_( (max_wl) <= 0 && (max_wl) != -1, \ sc_core::SC_ID_INVALID_MAX_WL_ ) // ---------------------------------------------------------------------------- // Generic observer macros. // ---------------------------------------------------------------------------- #define SC_OBSERVER_(object,observer_type,event) \ { \ if( (object).observer() != 0 ) \ { \ observer_type observer = (object).lock_observer(); \ observer->event( (object) ); \ (object).unlock_observer( observer ); \ } \ } #define SC_OBSERVER_DEFAULT_(observer_type) \ { \ if( m_observer == 0 && observer_type::default_observer != 0 ) \ m_observer = (*observer_type::default_observer)(); \ } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_mant.cpp0000644000175000017500000000664714342422106021753 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_mant.cpp - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_mant.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/scfx_mant.h" namespace sc_dt { // ---------------------------------------------------------------------------- // word memory management // ---------------------------------------------------------------------------- class SC_API word_list { // Entry in free_words bucket. public: word_list* m_next_p; }; static inline unsigned next_pow2_index( std::size_t size ) { unsigned index = scfx_find_msb( size ); // If this was a power of 2 we are one bucket too low. if( ~ (UINT64_ONE << index) & size ) index ++; // If this is a 64-bit machine and we are using 32-bit words go down // one slot size, as all the slots are 2x in size. if ( index != 0 && ( sizeof(word_list) != sizeof(word) ) ) { index -= 1; } return index; } static word_list* free_words[32] = { 0 }; word* scfx_mant::alloc_word( std::size_t size ) { const int ALLOC_SIZE = 128; unsigned slot_index = next_pow2_index( size ); unsigned alloc_size = ( UINT64_ONE << slot_index ); word_list*& slot = free_words[slot_index]; if( ! slot ) { slot = new word_list[ALLOC_SIZE * alloc_size]; unsigned i; for( i = 0; i < alloc_size*(ALLOC_SIZE-1) ; i+=alloc_size ) { slot[i].m_next_p = &slot[i+alloc_size]; } slot[i].m_next_p = 0; } word* result = (word*)slot; free_words[slot_index] = slot[0].m_next_p; return result; } void scfx_mant::free_word( word* array, std::size_t size ) { if( array && size ) { int slot_index = next_pow2_index( size ); word_list* wl_p = (word_list*)array; wl_p->m_next_p = free_words[slot_index]; free_words[slot_index] = wl_p; } } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_ieee.h0000644000175000017500000003355314342422106021364 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_ieee.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_ieee.h,v $ // Revision 1.3 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/08/07 18:55:24 acg // Philipp A. Hartmann: added guard for __clang__ to get the clang platform // working. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_IEEE_H #define SCFX_IEEE_H #include "sysc/datatypes/fx/sc_fxdefs.h" namespace sc_dt { // classes defined in this module union ieee_double; class scfx_ieee_double; union ieee_float; class scfx_ieee_float; #define SCFX_MASK_(Size) \ ((1u << (Size))-1u) // ---------------------------------------------------------------------------- // UNION : ieee_double // // IEEE 754 double-precision format. // ---------------------------------------------------------------------------- union ieee_double { double d; struct { #if defined( SC_BIG_ENDIAN ) unsigned negative:1; unsigned exponent:11; unsigned mantissa0:20; unsigned mantissa1:32; #elif defined( SC_LITTLE_ENDIAN ) unsigned mantissa1:32; unsigned mantissa0:20; unsigned exponent:11; unsigned negative:1; #endif } s; }; const unsigned int SCFX_IEEE_DOUBLE_BIAS = 1023U; const int SCFX_IEEE_DOUBLE_E_MAX = 1023; const int SCFX_IEEE_DOUBLE_E_MIN = -1022; const unsigned int SCFX_IEEE_DOUBLE_M_SIZE = 52; const unsigned int SCFX_IEEE_DOUBLE_M0_SIZE = 20; const unsigned int SCFX_IEEE_DOUBLE_M1_SIZE = 32; const unsigned int SCFX_IEEE_DOUBLE_E_SIZE = 11; // ---------------------------------------------------------------------------- // CLASS : scfx_ieee_double // // Convenient interface to union ieee_double. // ---------------------------------------------------------------------------- class SC_API scfx_ieee_double { ieee_double m_id; public: scfx_ieee_double(); scfx_ieee_double( double ); scfx_ieee_double( const scfx_ieee_double& ); scfx_ieee_double& operator = ( double ); scfx_ieee_double& operator = ( const scfx_ieee_double& ); operator double() const; unsigned int negative() const; void negative( unsigned int ); int exponent() const; void exponent( int ); unsigned int mantissa0() const; void mantissa0( unsigned int ); unsigned int mantissa1() const; void mantissa1( unsigned int ); bool is_zero() const; bool is_subnormal() const; bool is_normal() const; bool is_inf() const; bool is_nan() const; void set_inf(); void set_nan(); int msb() const; // most significant non-zero bit int lsb() const; // least significant non-zero bit static const scfx_ieee_double nan(); static const scfx_ieee_double inf( int ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline scfx_ieee_double::scfx_ieee_double() : m_id() { m_id.d = 0.0; } inline scfx_ieee_double::scfx_ieee_double( double d ) : m_id() { m_id.d = d; } inline scfx_ieee_double::scfx_ieee_double( const scfx_ieee_double& a ) : m_id(a.m_id) { // m_id.d = a.m_id.d; } inline scfx_ieee_double& scfx_ieee_double::operator = ( double d ) { m_id.d = d; return *this; } inline scfx_ieee_double& scfx_ieee_double::operator = ( const scfx_ieee_double& a ) { m_id.d = a.m_id.d; return *this; } inline scfx_ieee_double::operator double() const { return m_id.d; } inline unsigned int scfx_ieee_double::negative() const { return m_id.s.negative; } inline void scfx_ieee_double::negative( unsigned int a ) { m_id.s.negative = a & SCFX_MASK_(1); } inline int scfx_ieee_double::exponent() const { return m_id.s.exponent - SCFX_IEEE_DOUBLE_BIAS; } inline void scfx_ieee_double::exponent( int a ) { m_id.s.exponent = (SCFX_IEEE_DOUBLE_BIAS + a) & SCFX_MASK_(SCFX_IEEE_DOUBLE_E_SIZE); } inline unsigned int scfx_ieee_double::mantissa0() const { return m_id.s.mantissa0; } inline void scfx_ieee_double::mantissa0( unsigned int a ) { m_id.s.mantissa0 = a & SCFX_MASK_(SCFX_IEEE_DOUBLE_M0_SIZE); } inline unsigned int scfx_ieee_double::mantissa1() const { return m_id.s.mantissa1; } inline void scfx_ieee_double::mantissa1( unsigned int a ) { m_id.s.mantissa1 = a; // & SCFX_MASK_(SCFX_IEEE_DOUBLE_M1_SIZE); } inline bool scfx_ieee_double::is_zero() const { return ( exponent() == SCFX_IEEE_DOUBLE_E_MIN - 1 && mantissa0() == 0U && mantissa1() == 0U ); } inline bool scfx_ieee_double::is_subnormal() const { return ( exponent() == SCFX_IEEE_DOUBLE_E_MIN - 1 && ( mantissa0() != 0U || mantissa1() != 0U ) ); } inline bool scfx_ieee_double::is_normal() const { return ( exponent() >= SCFX_IEEE_DOUBLE_E_MIN && exponent() <= SCFX_IEEE_DOUBLE_E_MAX ); } inline bool scfx_ieee_double::is_inf() const { return ( exponent() == SCFX_IEEE_DOUBLE_E_MAX + 1 && mantissa0() == 0U && mantissa1() == 0U ); } inline bool scfx_ieee_double::is_nan() const { return ( exponent() == SCFX_IEEE_DOUBLE_E_MAX + 1 && ( mantissa0() != 0U || mantissa1() != 0U ) ); } inline void scfx_ieee_double::set_inf() { exponent( SCFX_IEEE_DOUBLE_E_MAX + 1 ); mantissa0( 0U ); mantissa1( 0U ); } inline void scfx_ieee_double::set_nan() { exponent( SCFX_IEEE_DOUBLE_E_MAX + 1 ); mantissa0( (unsigned int) -1 ); mantissa1( (unsigned int) -1 ); } #define MSB_STATEMENT(x,n) if( x >> n ) { x >>= n; i += n; } inline int scfx_ieee_double::msb() const { unsigned int m0 = mantissa0(); unsigned int m1 = mantissa1(); if( m0 != 0 ) { int i = 0; MSB_STATEMENT(m0,16); MSB_STATEMENT(m0,8); MSB_STATEMENT(m0,4); MSB_STATEMENT(m0,2); MSB_STATEMENT(m0,1); return ( i - 20 ); } else if( m1 != 0 ) { int i = 0; MSB_STATEMENT(m1,16); MSB_STATEMENT(m1,8); MSB_STATEMENT(m1,4); MSB_STATEMENT(m1,2); MSB_STATEMENT(m1,1); return ( i - 52 ); } else { return 0; } } #undef MSB_STATEMENT #define LSB_STATEMENT(x,n) if( x << n ) { x <<= n; i -= n; } inline int scfx_ieee_double::lsb() const { unsigned int m0 = mantissa0(); unsigned int m1 = mantissa1(); if( m1 != 0 ) { int i = 31; LSB_STATEMENT(m1,16); LSB_STATEMENT(m1,8); LSB_STATEMENT(m1,4); LSB_STATEMENT(m1,2); LSB_STATEMENT(m1,1); return ( i - 52 ); } else if( m0 != 0 ) { int i = 31; LSB_STATEMENT(m0,16); LSB_STATEMENT(m0,8); LSB_STATEMENT(m0,4); LSB_STATEMENT(m0,2); LSB_STATEMENT(m0,1); return ( i - 20 ); } else { return 0; } } #undef LSB_STATEMENT inline const scfx_ieee_double scfx_ieee_double::nan() { scfx_ieee_double id; id.set_nan(); return id; } inline const scfx_ieee_double scfx_ieee_double::inf( int sign ) { scfx_ieee_double id( sign ); id.set_inf(); return id; } // ---------------------------------------------------------------------------- // UNION : ieee_float // // IEEE 754 single-precision format. // ---------------------------------------------------------------------------- union ieee_float { float f; struct { #if defined( SC_BIG_ENDIAN ) unsigned negative:1; unsigned exponent:8; unsigned mantissa:23; #elif defined( SC_LITTLE_ENDIAN ) unsigned mantissa:23; unsigned exponent:8; unsigned negative:1; #endif } s; }; const unsigned int SCFX_IEEE_FLOAT_BIAS = 127U; const int SCFX_IEEE_FLOAT_E_MAX = 127; const int SCFX_IEEE_FLOAT_E_MIN = -126; const unsigned int SCFX_IEEE_FLOAT_M_SIZE = 23; const unsigned int SCFX_IEEE_FLOAT_E_SIZE = 8; // ---------------------------------------------------------------------------- // CLASS : scfx_ieee_float // // Convenient wrapper to union ieee_float. // ---------------------------------------------------------------------------- class SC_API scfx_ieee_float { ieee_float m_if; public: scfx_ieee_float(); scfx_ieee_float( float ); scfx_ieee_float( const scfx_ieee_float& ); scfx_ieee_float& operator = ( float ); scfx_ieee_float& operator = ( const scfx_ieee_float& ); operator float() const; unsigned int negative() const; void negative( unsigned int ); int exponent() const; void exponent( int ); unsigned int mantissa() const; void mantissa( unsigned int ); bool is_zero() const; bool is_subnormal() const; bool is_normal() const; bool is_inf() const; bool is_nan() const; void set_inf(); void set_nan(); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline scfx_ieee_float::scfx_ieee_float() : m_if() { m_if.f = 0.0; } inline scfx_ieee_float::scfx_ieee_float( float f ) : m_if() { m_if.f = f; } inline scfx_ieee_float::scfx_ieee_float( const scfx_ieee_float& a ) : m_if(a.m_if) { // m_if.f = a.m_if.f; } inline scfx_ieee_float& scfx_ieee_float::operator = ( float f ) { m_if.f = f; return *this; } inline scfx_ieee_float& scfx_ieee_float::operator = ( const scfx_ieee_float& a ) { m_if.f = a.m_if.f; return *this; } inline scfx_ieee_float::operator float() const { return m_if.f; } inline unsigned int scfx_ieee_float::negative() const { return m_if.s.negative; } inline void scfx_ieee_float::negative( unsigned int a ) { m_if.s.negative = a & SCFX_MASK_(1); } inline int scfx_ieee_float::exponent() const { return m_if.s.exponent - SCFX_IEEE_FLOAT_BIAS; } inline void scfx_ieee_float::exponent( int a ) { m_if.s.exponent = (SCFX_IEEE_FLOAT_BIAS + a) & SCFX_MASK_(SCFX_IEEE_FLOAT_E_SIZE); } inline unsigned int scfx_ieee_float::mantissa() const { return m_if.s.mantissa; } inline void scfx_ieee_float::mantissa( unsigned int a ) { m_if.s.mantissa = a & SCFX_MASK_(SCFX_IEEE_FLOAT_M_SIZE); } inline bool scfx_ieee_float::is_zero() const { return ( exponent() == SCFX_IEEE_FLOAT_E_MIN - 1 && mantissa() == 0U ); } inline bool scfx_ieee_float::is_subnormal() const { return ( exponent() == SCFX_IEEE_FLOAT_E_MIN - 1 && mantissa() != 0U ); } inline bool scfx_ieee_float::is_normal() const { return ( exponent() >= SCFX_IEEE_FLOAT_E_MIN && exponent() <= SCFX_IEEE_FLOAT_E_MAX ); } inline bool scfx_ieee_float::is_inf() const { return ( exponent() == SCFX_IEEE_FLOAT_E_MAX + 1 && mantissa() == 0U ); } inline bool scfx_ieee_float::is_nan() const { return ( exponent() == SCFX_IEEE_FLOAT_E_MAX + 1 && mantissa() != 0U ); } inline void scfx_ieee_float::set_inf() { exponent( SCFX_IEEE_FLOAT_E_MAX + 1 ); mantissa( 0U ); } inline void scfx_ieee_float::set_nan() { exponent( SCFX_IEEE_FLOAT_E_MAX + 1 ); mantissa( (unsigned int) -1 ); } // ---------------------------------------------------------------------------- // FUNCTION : scfx_pow2 // // Computes 2.0**exp in double-precision. // ---------------------------------------------------------------------------- inline double scfx_pow2( int exp ) { scfx_ieee_double r; if( exp < SCFX_IEEE_DOUBLE_E_MIN ) { r = 0.0; // handle subnormal case exp -= SCFX_IEEE_DOUBLE_E_MIN; if( ( exp += 20 ) >= 0 ) { r.mantissa0( 1U << exp ); } else if( ( exp += 32 ) >= 0 ) { r.mantissa1( 1U << exp ); } } else if( exp > SCFX_IEEE_DOUBLE_E_MAX ) { r.set_inf(); } else { r = 1.0; r.exponent( exp ); } return r; } // ---------------------------------------------------------------------------- // FUNCTION : uint64_to_double // // Platform independent conversion from double uint64 to double. // Needed because VC++6 doesn't support this conversion. // ---------------------------------------------------------------------------- inline double uint64_to_double( uint64 a ) { #if defined( _MSC_VER ) || defined( __clang__ ) // conversion from uint64 to double not implemented; use int64 double tmp = static_cast( static_cast( a ) ); return ( tmp >= 0 ) ? tmp : tmp + sc_dt::scfx_pow2( 64 ); #else return static_cast( a ); #endif } } // namespace sc_dt #undef SCFX_MASK_ #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_params.h0000644000175000017500000001071214342422106021730 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_params.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_params.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SCFX_PARAMS_H #define SCFX_PARAMS_H #include "sysc/datatypes/fx/sc_fx_ids.h" #include "sysc/datatypes/fx/sc_fxcast_switch.h" #include "sysc/datatypes/fx/sc_fxtype_params.h" namespace sc_dt { // classes defined in this module class scfx_params; // ---------------------------------------------------------------------------- // CLASS : scfx_params // // ... // ---------------------------------------------------------------------------- class SC_API scfx_params { public: // constructor scfx_params( const sc_fxtype_params&, sc_enc, const sc_fxcast_switch& ); // query functions const sc_fxtype_params& type_params() const; sc_enc enc() const; const sc_fxcast_switch& cast_switch() const; // shortcuts int wl() const; int iwl() const; int fwl() const; sc_q_mode q_mode() const; sc_o_mode o_mode() const; int n_bits() const; // dump content void dump( ::std::ostream& ) const; private: sc_fxtype_params m_type_params; sc_enc m_enc; sc_fxcast_switch m_cast_switch; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // constructor inline scfx_params::scfx_params( const sc_fxtype_params& type_params_, sc_enc enc_, const sc_fxcast_switch& cast_sw ) : m_type_params( type_params_ ), m_enc( enc_ ), m_cast_switch( cast_sw ) { if( m_enc == SC_US_ && m_type_params.o_mode() == SC_WRAP_SM ) { SC_REPORT_ERROR( sc_core::SC_ID_INVALID_O_MODE_, "SC_WRAP_SM not defined for unsigned numbers" ); // may continue, if suppressed } } // query functions inline const sc_fxtype_params& scfx_params::type_params() const { return m_type_params; } inline sc_enc scfx_params::enc() const { return m_enc; } inline const sc_fxcast_switch& scfx_params::cast_switch() const { return m_cast_switch; } // shortcuts inline int scfx_params::wl() const { return m_type_params.wl(); } inline int scfx_params::iwl() const { return m_type_params.iwl(); } inline int scfx_params::fwl() const { return ( m_type_params.wl() - m_type_params.iwl() ); } inline sc_q_mode scfx_params::q_mode() const { return m_type_params.q_mode(); } inline sc_o_mode scfx_params::o_mode() const { return m_type_params.o_mode(); } inline int scfx_params::n_bits() const { return m_type_params.n_bits(); } // dump content inline void scfx_params::dump( ::std::ostream& os ) const { os << "scfx_params" << ::std::endl; os << "(" << ::std::endl; os << "type_params = "; m_type_params.dump( os ); os << "enc = " << m_enc << ::std::endl; os << "cast_switch = "; m_cast_switch.dump( os ); os << ")" << ::std::endl; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_string.h0000644000175000017500000001075114342422106021756 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_string.h - Original Author: Robert Graulich, Synopsys, Inc. Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_string.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.2 2006/01/03 23:18:34 acg // Changed copyright to include 2006. // // Revision 1.1.1.1 2005/12/19 23:16:43 acg // First check in of SystemC 2.1 into its own archive. // // Revision 1.9 2005/09/15 23:02:03 acg // Added std:: prefix to appropriate methods and types to get around // issues with the Edison Front End. // // Revision 1.8 2005/06/07 17:27:02 acg // Fixed bug in scfx_string::operator += where an array reference was used // rather than the [] operator. This meant that the buffer may have been // accessed beyond its allocated storage. // #ifndef SCFX_STRING_H #define SCFX_STRING_H #include namespace sc_dt { // classes defined in this module class scfx_string; // ---------------------------------------------------------------------------- // CLASS : scfx_string // // Simple string class for internal use. // ---------------------------------------------------------------------------- class SC_API scfx_string { void resize( std::size_t ); public: scfx_string(); ~scfx_string(); int length() const; void clear(); char& operator [] ( int ); void append( int ); void discard( int ); void remove( int ); void operator += ( char ); void operator += ( const char* ); operator const char* (); private: std::size_t m_len; std::size_t m_alloc; char* m_buffer; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline void scfx_string::resize( std::size_t i ) { do { m_alloc *= 2; } while( i >= m_alloc ); char* temp = new char[m_alloc]; for( int j = 0; j < (int) m_len; ++ j ) { temp[j] = m_buffer[j]; } temp[m_len] = 0; delete [] m_buffer; m_buffer = temp; } inline scfx_string::scfx_string() : m_len( 0 ), m_alloc( BUFSIZ ), m_buffer( new char[m_alloc] ) { m_buffer[m_len] = 0; } inline scfx_string::~scfx_string() { delete [] m_buffer; } inline int scfx_string::length() const { return m_len; } inline void scfx_string::clear() { m_len = 0; m_buffer[m_len] = 0; } inline char& scfx_string::operator [] ( int i ) { if( i >= (int) m_alloc ) { resize( i ); } return m_buffer[i]; } inline void scfx_string::append( int n ) { m_len += n; m_buffer[m_len] = 0; } inline void scfx_string::discard( int n ) { m_len -= n; m_buffer[m_len] = 0; } inline void scfx_string::remove( int i ) { for( int j = i + 1; j < (int) m_len; ++ j ) m_buffer[j - 1] = m_buffer[j]; -- m_len; m_buffer[m_len] = 0; } inline void scfx_string::operator += ( char c ) { this->operator [] ( m_len ) = c; m_len ++; this->operator [] ( m_len ) = 0; } inline void scfx_string::operator += ( const char* s ) { while( *s ) (*this) += *s ++; } inline scfx_string::operator const char*() { m_buffer[m_len] = 0; return m_buffer; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_ufix.h0000644000175000017500000026120514342422106021067 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_ufix.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_ufix.h,v $ // Revision 1.2 2011/01/20 22:52:30 acg // Andy Goodrich: Add float constructors. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_UFIX_H #define SC_UFIX_H #include "sysc/datatypes/fx/sc_fxnum.h" namespace sc_dt { // classes defined in this module class sc_ufix; class sc_ufix_fast; // ---------------------------------------------------------------------------- // CLASS : sc_ufix // // "Unconstrained" unsigned fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_ufix : public sc_fxnum { public: // constructors explicit sc_ufix( sc_fxnum_observer* = 0 ); sc_ufix( int, int, sc_fxnum_observer* = 0 ); sc_ufix( sc_q_mode, sc_o_mode, sc_fxnum_observer* = 0 ); sc_ufix( sc_q_mode, sc_o_mode, int, sc_fxnum_observer* = 0 ); sc_ufix( int, int, sc_q_mode, sc_o_mode, sc_fxnum_observer* = 0 ); sc_ufix( int, int, sc_q_mode, sc_o_mode, int, sc_fxnum_observer* = 0 ); explicit sc_ufix( const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_ufix( int, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_ufix( sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_ufix( sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_ufix( int, int, sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_ufix( int, int, sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); explicit sc_ufix( const sc_fxtype_params&, sc_fxnum_observer* = 0 ); sc_ufix( const sc_fxtype_params&, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T(tp) \ sc_ufix( tp, \ int, int, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ sc_q_mode, sc_o_mode, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ sc_q_mode, sc_o_mode, int, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ int, int, sc_q_mode, sc_o_mode, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ int, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ int, int, sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ const sc_fxtype_params&, \ sc_fxnum_observer* = 0 ); \ sc_ufix( tp, \ const sc_fxtype_params&, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_ufix( tp, \ sc_fxnum_observer* = 0 ); \ DECL_CTORS_T(tp) #define DECL_CTORS_T_B(tp) \ explicit sc_ufix( tp, \ sc_fxnum_observer* = 0 ); \ DECL_CTORS_T(tp) DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_ufix( const sc_ufix& ); // unary bitwise operators const sc_ufix operator ~ () const; // unary bitwise functions friend void b_not( sc_ufix&, const sc_ufix& ); // binary bitwise operators friend const sc_ufix operator & ( const sc_ufix&, const sc_ufix& ); friend const sc_ufix operator & ( const sc_ufix&, const sc_ufix_fast& ); friend const sc_ufix operator & ( const sc_ufix_fast&, const sc_ufix& ); friend const sc_ufix operator | ( const sc_ufix&, const sc_ufix& ); friend const sc_ufix operator | ( const sc_ufix&, const sc_ufix_fast& ); friend const sc_ufix operator | ( const sc_ufix_fast&, const sc_ufix& ); friend const sc_ufix operator ^ ( const sc_ufix&, const sc_ufix& ); friend const sc_ufix operator ^ ( const sc_ufix&, const sc_ufix_fast& ); friend const sc_ufix operator ^ ( const sc_ufix_fast&, const sc_ufix& ); // binary bitwise functions friend void b_and( sc_ufix&, const sc_ufix&, const sc_ufix& ); friend void b_and( sc_ufix&, const sc_ufix&, const sc_ufix_fast& ); friend void b_and( sc_ufix&, const sc_ufix_fast&, const sc_ufix& ); friend void b_or ( sc_ufix&, const sc_ufix&, const sc_ufix& ); friend void b_or ( sc_ufix&, const sc_ufix&, const sc_ufix_fast& ); friend void b_or ( sc_ufix&, const sc_ufix_fast&, const sc_ufix& ); friend void b_xor( sc_ufix&, const sc_ufix&, const sc_ufix& ); friend void b_xor( sc_ufix&, const sc_ufix&, const sc_ufix_fast& ); friend void b_xor( sc_ufix&, const sc_ufix_fast&, const sc_ufix& ); // assignment operators sc_ufix& operator = ( const sc_ufix& ); #define DECL_ASN_OP_T(op,tp) \ sc_ufix& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_ufix&) DECL_ASN_OP_T(&=,const sc_ufix_fast&) DECL_ASN_OP_T(|=,const sc_ufix&) DECL_ASN_OP_T(|=,const sc_ufix_fast&) DECL_ASN_OP_T(^=,const sc_ufix&) DECL_ASN_OP_T(^=,const sc_ufix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_ufix& operator ++ (); sc_ufix& operator -- (); }; // ---------------------------------------------------------------------------- // CLASS : sc_ufix_fast // // "Unconstrained" unsigned fixed-point class; limited precision. // ---------------------------------------------------------------------------- class SC_API sc_ufix_fast : public sc_fxnum_fast { public: // constructors explicit sc_ufix_fast( sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( sc_q_mode, sc_o_mode, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( sc_q_mode, sc_o_mode, int, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, sc_q_mode, sc_o_mode, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, sc_q_mode, sc_o_mode, int, sc_fxnum_fast_observer* = 0 ); explicit sc_ufix_fast( const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( int, int, sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); explicit sc_ufix_fast( const sc_fxtype_params&, sc_fxnum_fast_observer* = 0 ); sc_ufix_fast( const sc_fxtype_params&, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T(tp) \ sc_ufix_fast( tp, \ int, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ sc_q_mode, sc_o_mode, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ sc_q_mode, sc_o_mode, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ int, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ const sc_fxtype_params&, \ sc_fxnum_fast_observer* = 0 ); \ sc_ufix_fast( tp, \ const sc_fxtype_params&, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_ufix_fast( tp, \ sc_fxnum_fast_observer* = 0 ); \ DECL_CTORS_T(tp) #define DECL_CTORS_T_B(tp) \ explicit sc_ufix_fast( tp, \ sc_fxnum_fast_observer* = 0 ); \ DECL_CTORS_T(tp) DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_ufix_fast( const sc_ufix_fast& ); // unary bitwise operators const sc_ufix_fast operator ~ () const; // unary bitwise functions friend void b_not( sc_ufix_fast&, const sc_ufix_fast& ); // binary bitwise operators friend const sc_ufix_fast operator & ( const sc_ufix_fast&, const sc_ufix_fast& ); friend const sc_ufix_fast operator ^ ( const sc_ufix_fast&, const sc_ufix_fast& ); friend const sc_ufix_fast operator | ( const sc_ufix_fast&, const sc_ufix_fast& ); // binary bitwise functions friend void b_and( sc_ufix_fast&, const sc_ufix_fast&, const sc_ufix_fast& ); friend void b_or ( sc_ufix_fast&, const sc_ufix_fast&, const sc_ufix_fast& ); friend void b_xor( sc_ufix_fast&, const sc_ufix_fast&, const sc_ufix_fast& ); // assignment operators sc_ufix_fast& operator = ( const sc_ufix_fast& ); #define DECL_ASN_OP_T(op,tp) \ sc_ufix_fast& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_ufix&) DECL_ASN_OP_T(&=,const sc_ufix_fast&) DECL_ASN_OP_T(|=,const sc_ufix&) DECL_ASN_OP_T(|=,const sc_ufix_fast&) DECL_ASN_OP_T(^=,const sc_ufix&) DECL_ASN_OP_T(^=,const sc_ufix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_ufix_fast& operator ++ (); sc_ufix_fast& operator -- (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_ufix // // "Unconstrained" unsigned fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- // constructors inline sc_ufix::sc_ufix( sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params(), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_ ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( sc_q_mode qm, sc_o_mode om, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om, nb ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params(), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_ ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om, nb ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix::sc_ufix( const sc_fxtype_params& type_params_, sc_fxnum_observer* observer_ ) : sc_fxnum( type_params_, SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix::sc_ufix( const sc_fxtype_params& type_params_, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( type_params_, SC_US_, cast_sw, observer_ ) {} #define DEFN_CTORS_T_A(tp) \ inline \ sc_ufix::sc_ufix( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params(), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params(), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_US_, \ cast_sw, \ observer_ ) \ {} #define DEFN_CTORS_T_B(tp) \ inline \ sc_ufix::sc_ufix( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ a.type_params(), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ a.type_params(), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix::sc_ufix( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_US_, \ cast_sw, \ observer_ ) \ {} DEFN_CTORS_T_A(int) DEFN_CTORS_T_A(unsigned int) DEFN_CTORS_T_A(long) DEFN_CTORS_T_A(unsigned long) DEFN_CTORS_T_A(float) DEFN_CTORS_T_A(double) DEFN_CTORS_T_A(const char*) DEFN_CTORS_T_A(const sc_fxval&) DEFN_CTORS_T_A(const sc_fxval_fast&) DEFN_CTORS_T_B(const sc_fxnum&) DEFN_CTORS_T_B(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T_A(int64) DEFN_CTORS_T_A(uint64) DEFN_CTORS_T_A(const sc_int_base&) DEFN_CTORS_T_A(const sc_uint_base&) DEFN_CTORS_T_A(const sc_signed&) DEFN_CTORS_T_A(const sc_unsigned&) #endif #undef DEFN_CTORS_T_A #undef DEFN_CTORS_T_B // copy constructor inline sc_ufix::sc_ufix( const sc_ufix& a ) : sc_fxnum( a, a.type_params(), SC_US_, sc_fxcast_switch(), 0 ) {} // unary bitwise operators inline const sc_ufix sc_ufix::operator ~ () const { SC_FXNUM_OBSERVER_READ_( *this ) int iwl_c = iwl(); int wl_c = wl(); sc_ufix c( wl_c, iwl_c ); for( int i = iwl_c - wl_c; i < iwl_c; ++ i ) c.set_bit( i, ! get_bit( i ) ); return sc_ufix( c, wl_c, iwl_c ); } // unary bitwise functions inline void b_not( sc_ufix& c, const sc_ufix& a ) { SC_FXNUM_OBSERVER_READ_( a ) int iwl_c = c.iwl(); for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) c.set_bit( i, ! a.get_bit( i ) ); c.cast(); SC_FXNUM_OBSERVER_WRITE_( c ) } // binary bitwise operators #define DEFN_BIN_OP_T(op,op2,tp1,tp2) \ inline \ const sc_ufix \ operator op ( const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_a = a.iwl(); \ int iwl_b = b.iwl(); \ int iwl_c = sc_max( iwl_a, iwl_b ); \ int fwl_c = sc_max( a.wl() - iwl_a, b.wl() - iwl_b ); \ sc_ufix c( iwl_c + fwl_c, iwl_c ); \ for( int i = -fwl_c; i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ return sc_ufix( c, iwl_c + fwl_c, iwl_c ); \ } DEFN_BIN_OP_T(&,&&,sc_ufix,sc_ufix) DEFN_BIN_OP_T(&,&&,sc_ufix,sc_ufix_fast) DEFN_BIN_OP_T(&,&&,sc_ufix_fast,sc_ufix) DEFN_BIN_OP_T(|,||,sc_ufix,sc_ufix) DEFN_BIN_OP_T(|,||,sc_ufix,sc_ufix_fast) DEFN_BIN_OP_T(|,||,sc_ufix_fast,sc_ufix) DEFN_BIN_OP_T(^,!=,sc_ufix,sc_ufix) DEFN_BIN_OP_T(^,!=,sc_ufix,sc_ufix_fast) DEFN_BIN_OP_T(^,!=,sc_ufix_fast,sc_ufix) #undef DEFN_BIN_OP_T // binary bitwise functions #define DEFN_BIN_FNC_T(fnc,op2,tp1,tp2) \ inline \ void \ fnc ( sc_ufix& c, const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_c = c.iwl(); \ for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } DEFN_BIN_FNC_T(b_and,&&,sc_ufix,sc_ufix) DEFN_BIN_FNC_T(b_and,&&,sc_ufix,sc_ufix_fast) DEFN_BIN_FNC_T(b_and,&&,sc_ufix_fast,sc_ufix) DEFN_BIN_FNC_T(b_or,||,sc_ufix,sc_ufix) DEFN_BIN_FNC_T(b_or,||,sc_ufix,sc_ufix_fast) DEFN_BIN_FNC_T(b_or,||,sc_ufix_fast,sc_ufix) DEFN_BIN_FNC_T(b_xor,!=,sc_ufix,sc_ufix) DEFN_BIN_FNC_T(b_xor,!=,sc_ufix,sc_ufix_fast) DEFN_BIN_FNC_T(b_xor,!=,sc_ufix_fast,sc_ufix) #undef DEFN_BIN_FNC_T // assignment operators inline sc_ufix& sc_ufix::operator = ( const sc_ufix& a ) { sc_fxnum::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_ufix& \ sc_ufix::operator op ( tp a ) \ { \ sc_fxnum::operator op( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP #define DEFN_ASN_OP_T(op,op2,tp) \ inline \ sc_ufix& \ sc_ufix::operator op ( const tp& b ) \ { \ SC_FXNUM_OBSERVER_READ_( *this ) \ b.observer_read(); \ int iwl_c = iwl(); \ for( int i = iwl_c - wl(); i < iwl_c; ++ i ) \ set_bit( i, get_bit( i ) op2 b.get_bit( i ) ); \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(&=,&&,sc_ufix) DEFN_ASN_OP_T(&=,&&,sc_ufix_fast) DEFN_ASN_OP_T(|=,||,sc_ufix) DEFN_ASN_OP_T(|=,||,sc_ufix_fast) DEFN_ASN_OP_T(^=,!=,sc_ufix) DEFN_ASN_OP_T(^=,!=,sc_ufix_fast) #undef DEFN_ASN_OP_T // auto-increment and auto-decrement inline const sc_fxval sc_ufix::operator ++ ( int ) { return sc_fxval( sc_fxnum::operator ++ ( 0 ) ); } inline const sc_fxval sc_ufix::operator -- ( int ) { return sc_fxval( sc_fxnum::operator -- ( 0 ) ); } inline sc_ufix& sc_ufix::operator ++ () { sc_fxnum::operator ++ (); return *this; } inline sc_ufix& sc_ufix::operator -- () { sc_fxnum::operator -- (); return *this; } // ---------------------------------------------------------------------------- // CLASS : sc_ufix_fast // // "Unconstrained" unsigned fixed-point class; limited precision. // ---------------------------------------------------------------------------- // constructors inline sc_ufix_fast::sc_ufix_fast( sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params(), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_ ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( sc_q_mode qm, sc_o_mode om, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om, nb ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params(), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_ ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om, nb ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_US_, cast_sw, observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( const sc_fxtype_params& type_params_, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( type_params_, SC_US_, sc_fxcast_switch(), observer_ ) {} inline sc_ufix_fast::sc_ufix_fast( const sc_fxtype_params& type_params_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( type_params_, SC_US_, cast_sw, observer_ ) {} #define DEFN_CTORS_T_A(tp) \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params(), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params(), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_US_, \ cast_sw, \ observer_ ) \ {} #define DEFN_CTORS_T_B(tp) \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ a.type_params(), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ a.type_params(), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_US_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_US_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_ufix_fast::sc_ufix_fast( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_US_, \ cast_sw, \ observer_ ) \ {} DEFN_CTORS_T_A(int) DEFN_CTORS_T_A(unsigned int) DEFN_CTORS_T_A(long) DEFN_CTORS_T_A(unsigned long) DEFN_CTORS_T_A(float) DEFN_CTORS_T_A(double) DEFN_CTORS_T_A(const char*) DEFN_CTORS_T_A(const sc_fxval&) DEFN_CTORS_T_A(const sc_fxval_fast&) DEFN_CTORS_T_B(const sc_fxnum&) DEFN_CTORS_T_B(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T_A(int64) DEFN_CTORS_T_A(uint64) DEFN_CTORS_T_A(const sc_int_base&) DEFN_CTORS_T_A(const sc_uint_base&) DEFN_CTORS_T_A(const sc_signed&) DEFN_CTORS_T_A(const sc_unsigned&) #endif #undef DEFN_CTORS_T_A #undef DEFN_CTORS_T_B // copy constructor inline sc_ufix_fast::sc_ufix_fast( const sc_ufix_fast& a ) : sc_fxnum_fast( a, a.type_params(), SC_US_, sc_fxcast_switch(), 0 ) {} // unary bitwise operators inline const sc_ufix_fast sc_ufix_fast::operator ~ () const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) int iwl_c = iwl(); int wl_c = wl(); sc_ufix_fast c( wl_c, iwl_c ); for( int i = iwl_c - wl_c; i < iwl_c; ++ i ) c.set_bit( i, ! get_bit( i ) ); return sc_ufix_fast( c, wl_c, iwl_c ); } // unary bitwise functions inline void b_not( sc_ufix_fast& c, const sc_ufix_fast& a ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) int iwl_c = c.iwl(); for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) c.set_bit( i, ! a.get_bit( i ) ); c.cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( c ) } // binary bitwise operators #define DEFN_BIN_OP_T(op,op2,tp1,tp2) \ inline \ const sc_ufix_fast \ operator op ( const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_a = a.iwl(); \ int iwl_b = b.iwl(); \ int iwl_c = sc_max( iwl_a, iwl_b ); \ int fwl_c = sc_max( a.wl() - iwl_a, b.wl() - iwl_b ); \ sc_ufix_fast c( iwl_c + fwl_c, iwl_c ); \ for( int i = -fwl_c; i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ return sc_ufix_fast( c, iwl_c + fwl_c, iwl_c ); \ } DEFN_BIN_OP_T(&,&&,sc_ufix_fast,sc_ufix_fast) DEFN_BIN_OP_T(|,||,sc_ufix_fast,sc_ufix_fast) DEFN_BIN_OP_T(^,!=,sc_ufix_fast,sc_ufix_fast) #undef DEFN_BIN_OP_T // binary bitwise functions #define DEFN_BIN_FNC_T(fnc,op2,tp1,tp2) \ inline \ void \ fnc ( sc_ufix_fast& c, const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_c = c.iwl(); \ for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } DEFN_BIN_FNC_T(b_and,&&,sc_ufix_fast,sc_ufix_fast) DEFN_BIN_FNC_T(b_or,||,sc_ufix_fast,sc_ufix_fast) DEFN_BIN_FNC_T(b_xor,!=,sc_ufix_fast,sc_ufix_fast) #undef DEFN_BIN_FNC_T // assignment operators inline sc_ufix_fast& sc_ufix_fast::operator = ( const sc_ufix_fast& a ) { sc_fxnum_fast::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_ufix_fast& \ sc_ufix_fast::operator op ( tp a ) \ { \ sc_fxnum_fast::operator op( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP #define DEFN_ASN_OP_T(op,op2,tp) \ inline \ sc_ufix_fast& \ sc_ufix_fast::operator op ( const tp& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ b.observer_read(); \ int iwl_c = iwl(); \ for( int i = iwl_c - wl(); i < iwl_c; ++ i ) \ set_bit( i, get_bit( i ) op2 b.get_bit( i ) ); \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(&=,&&,sc_ufix) DEFN_ASN_OP_T(&=,&&,sc_ufix_fast) DEFN_ASN_OP_T(|=,||,sc_ufix) DEFN_ASN_OP_T(|=,||,sc_ufix_fast) DEFN_ASN_OP_T(^=,!=,sc_ufix) DEFN_ASN_OP_T(^=,!=,sc_ufix_fast) #undef DEFN_ASN_OP_T // auto-increment and auto-decrement inline const sc_fxval_fast sc_ufix_fast::operator ++ ( int ) { return sc_fxval_fast( sc_fxnum_fast::operator ++ ( 0 ) ); } inline const sc_fxval_fast sc_ufix_fast::operator -- ( int ) { return sc_fxval_fast( sc_fxnum_fast::operator -- ( 0 ) ); } inline sc_ufix_fast& sc_ufix_fast::operator ++ () { sc_fxnum_fast::operator ++ (); return *this; } inline sc_ufix_fast& sc_ufix_fast::operator -- () { sc_fxnum_fast::operator -- (); return *this; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxnum_observer.cpp0000644000175000017500000000476414342422106023520 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxnum_observer.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxnum_observer.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/sc_fxnum_observer.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_observer // // Abstract base class for fixed-point types observers; arbitrary precision. // ---------------------------------------------------------------------------- sc_fxnum_observer* (*sc_fxnum_observer::default_observer) () = 0; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_observer // // Abstract base class for fixed-point types observers; limited precision. // ---------------------------------------------------------------------------- sc_fxnum_fast_observer* (*sc_fxnum_fast_observer::default_observer) () = 0; } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/scfx_utils.cpp0000644000175000017500000000756614342422106022155 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** scfx_utils.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: scfx_utils.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/fx/scfx_utils.h" namespace sc_dt { void scfx_tc2csd( scfx_string& s, int w_prefix ) { if( w_prefix != 0 ) { SC_ASSERT_( s[0] == '0' && s[1] == 'c' && s[2] == 's' && s[3] == 'd', "invalid prefix" ); } scfx_string csd; // copy bits from 's' into 'csd'; skip prefix, point, and exponent int i = 0; int j = (w_prefix != 0 ? 4 : 0); while( s[j] ) { if( s[j] == '0' || s[j] == '1' ) csd[i ++] = s[j]; else if( s[j] != '.' ) break; ++ j; } csd[i] = '\0'; // convert 'csd' from two's complement to csd -- i; while( i >= 0 ) { if( csd[i] == '0' ) -- i; else { if( i > 0 && csd[i - 1] == '0' ) -- i; else if( i == 0 ) csd[i --] = '-'; else { // i > 0 && csd[i - 1] == '1' csd[i --] = '-'; while( i >= 0 && csd[i] == '1' ) csd[i --] = '0'; if( i > 0 ) csd[i] = '1'; else if( i == 0 ) csd[i --] = '1'; } } } // copy bits from 'csd' back into 's' i = 0; j = (w_prefix != 0 ? 4 : 0); while( csd[i] ) { if( s[j] == '.' ) ++ j; s[j ++] = csd[i ++]; } } void scfx_csd2tc( scfx_string& csd ) { SC_ASSERT_( csd[0] == '0' && csd[1] == 'c' && csd[2] == 's' && csd[3] == 'd', "invalid prefix" ); scfx_string s; // copy bits from 'csd' into 's'; skip prefix, point, and exponent int i = 0; s[i ++] = '0'; int j = 4; while( csd[j] ) { if( csd[j] == '-' || csd[j] == '0' || csd[j] == '1' ) s[i ++] = csd[j]; else if( csd[j] != '.' ) break; ++ j; } s[i] = '\0'; // convert 's' from csd to two's complement int len = i; i = 1; while( i < len ) { while( i < len && s[i] != '-' ) i ++; if( i < len ) { j = i ++; s[j --] = '1'; while( j >= 0 && s[j] == '0' ) s[j --] = '1'; if( j >= 0 ) s[j] = '0'; } } // copy bits from 's' back into 'csd' j = csd.length(); csd[j + 1] = '\0'; while( j > 4 ) { csd[j] = csd[j - 1]; -- j; } i = 0; j = 4; while( s[i] ) { if( csd[j] == '.' ) ++ j; csd[j ++] = s[i ++]; } } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxnum.h0000644000175000017500000052376514342422106021265 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxnum.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxnum.h,v $ // Revision 1.5 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.4 2011/08/24 22:05:43 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.3 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.2 2009/03/09 17:26:46 acg // Andy Goodrich: removed ; from namespace { } // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXNUM_H #define SC_FXNUM_H #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/fx/sc_fxval.h" #include "sysc/datatypes/fx/scfx_params.h" #include "sysc/datatypes/fx/sc_fxnum_observer.h" namespace sc_core { class vcd_sc_fxnum_trace; class vcd_sc_fxnum_fast_trace; class wif_sc_fxnum_trace; class wif_sc_fxnum_fast_trace; } namespace sc_dt { // classes defined in this module class sc_fxnum_bitref_r; class sc_fxnum_fast_bitref_r; class sc_fxnum_bitref; class sc_fxnum_fast_bitref; class sc_fxnum_subref_r; class sc_fxnum_fast_subref_r; class sc_fxnum_subref; class sc_fxnum_fast_subref; class sc_fxnum; class sc_fxnum_fast; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_bitref_r // // Read-only proxy class for bit-selection in class sc_fxnum // ---------------------------------------------------------------------------- class SC_API sc_fxnum_bitref_r { friend class sc_fxnum; friend class sc_fxnum_fast_bitref; protected: bool get() const; sc_fxnum_bitref_r( sc_fxnum&, int ); public: sc_fxnum_bitref_r( const sc_fxnum_bitref_r& ); operator bool() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; protected: sc_fxnum& m_num; int m_idx; }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_bitref // // Proxy class for bit-selection in class sc_fxnum, behaves like sc_bit. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_bitref : public sc_fxnum_bitref_r { friend class sc_fxnum; void set( bool ); // constructor sc_fxnum_bitref( sc_fxnum&, int ); public: // copy constructor sc_fxnum_bitref( const sc_fxnum_bitref& ); // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxnum_bitref& operator op ( tp ); #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,const sc_fxnum_bitref&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast_bitref&) \ DECL_ASN_OP_T(op,const sc_bit&) \ DECL_ASN_OP_T(op,bool) DECL_ASN_OP(=) DECL_ASN_OP(&=) DECL_ASN_OP(|=) DECL_ASN_OP(^=) #undef DECL_ASN_OP_T #undef DECL_ASN_OP void scan( ::std::istream& = ::std::cin ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_bitref_r // // Read-only proxy class for bit-selection in class sc_fxnum_fast // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast_bitref_r { friend class sc_fxnum_fast; friend class sc_fxnum_bitref; protected: bool get() const; sc_fxnum_fast_bitref_r( sc_fxnum_fast&, int ); public: // copy constructor sc_fxnum_fast_bitref_r( const sc_fxnum_fast_bitref_r& ); operator bool() const; void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; protected: sc_fxnum_fast& m_num; int m_idx; }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_bitref // // Proxy class for bit-selection in class sc_fxnum_fast, behaves like sc_bit. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast_bitref : public sc_fxnum_fast_bitref_r { friend class sc_fxnum_fast; void set( bool ); sc_fxnum_fast_bitref( sc_fxnum_fast&, int ); public: sc_fxnum_fast_bitref( const sc_fxnum_fast_bitref& ); // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxnum_fast_bitref& operator op ( tp ); #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,const sc_fxnum_bitref&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast_bitref&) \ DECL_ASN_OP_T(op,const sc_bit&) \ DECL_ASN_OP_T(op,bool) DECL_ASN_OP(=) DECL_ASN_OP(&=) DECL_ASN_OP(|=) DECL_ASN_OP(^=) #undef DECL_ASN_OP_T #undef DECL_ASN_OP void scan( ::std::istream& = ::std::cin ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_subref_r // // Read-only proxy class for part-selection in class sc_fxnum, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_subref_r { friend class sc_fxnum; protected: bool get() const; sc_fxnum_subref_r( sc_fxnum&, int, int ); public: // copy constructor sc_fxnum_subref_r( const sc_fxnum_subref_r& ); // destructor ~sc_fxnum_subref_r(); // relational operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxnum_subref_r&, tp ); \ friend bool operator op ( tp, const sc_fxnum_subref_r& ); #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxnum_subref_r&, \ const sc_fxnum_subref_r& ); \ friend bool operator op ( const sc_fxnum_subref_r&, \ const sc_fxnum_fast_subref_r& ); \ DECL_REL_OP_T(op,const sc_bv_base&) \ DECL_REL_OP_T(op,const sc_lv_base&) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_T(op,const bool*) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP // reduce functions bool and_reduce() const; bool nand_reduce() const; bool or_reduce() const; bool nor_reduce() const; bool xor_reduce() const; bool xnor_reduce() const; // query parameter int length() const; // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; #ifdef SC_DT_DEPRECATED int to_signed() const; unsigned int to_unsigned() const; #endif const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; // implicit conversion operator sc_bv_base() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; protected: sc_fxnum& m_num; int m_from; int m_to; sc_bv_base& m_bv; }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_subref // // Proxy class for part-selection in class sc_fxnum, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_subref : public sc_fxnum_subref_r { friend class sc_fxnum; friend class sc_fxnum_fast_subref; bool set(); // constructor sc_fxnum_subref( sc_fxnum&, int, int ); public: // copy constructor sc_fxnum_subref( const sc_fxnum_subref& ); // assignment operators #define DECL_ASN_OP_T(tp) \ sc_fxnum_subref& operator = ( tp ); DECL_ASN_OP_T(const sc_fxnum_subref&) DECL_ASN_OP_T(const sc_fxnum_fast_subref&) DECL_ASN_OP_T(const sc_bv_base&) DECL_ASN_OP_T(const sc_lv_base&) DECL_ASN_OP_T(const char*) DECL_ASN_OP_T(const bool*) DECL_ASN_OP_T(const sc_signed&) DECL_ASN_OP_T(const sc_unsigned&) DECL_ASN_OP_T(const sc_int_base&) DECL_ASN_OP_T(const sc_uint_base&) DECL_ASN_OP_T(int64) DECL_ASN_OP_T(uint64) DECL_ASN_OP_T(int) DECL_ASN_OP_T(unsigned int) DECL_ASN_OP_T(long) DECL_ASN_OP_T(unsigned long) DECL_ASN_OP_T(char) #undef DECL_ASN_OP_T #define DECL_ASN_OP_T_A(op,tp) \ sc_fxnum_subref& operator op ## = ( tp ); #define DECL_ASN_OP_A(op) \ DECL_ASN_OP_T_A(op,const sc_fxnum_subref&) \ DECL_ASN_OP_T_A(op,const sc_fxnum_fast_subref&) \ DECL_ASN_OP_T_A(op,const sc_bv_base&) \ DECL_ASN_OP_T_A(op,const sc_lv_base&) DECL_ASN_OP_A(&) DECL_ASN_OP_A(|) DECL_ASN_OP_A(^) #undef DECL_ASN_OP_T_A #undef DECL_ASN_OP_A void scan( ::std::istream& = ::std::cin ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_subref_r // // Read-only proxy class for part-selection in class sc_fxnum_fast, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast_subref_r { friend class sc_fxnum_fast; protected: bool get() const; sc_fxnum_fast_subref_r( sc_fxnum_fast&, int, int ); public: // copy constructor sc_fxnum_fast_subref_r( const sc_fxnum_fast_subref_r& ); // destructor ~sc_fxnum_fast_subref_r(); // relational operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxnum_fast_subref_r&, tp ); \ friend bool operator op ( tp, const sc_fxnum_fast_subref_r& ); #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxnum_fast_subref_r&, \ const sc_fxnum_fast_subref_r& ); \ friend bool operator op ( const sc_fxnum_fast_subref_r&, \ const sc_fxnum_subref_r& ); \ DECL_REL_OP_T(op,const sc_bv_base&) \ DECL_REL_OP_T(op,const sc_lv_base&) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_T(op,const bool*) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP // reduce functions bool and_reduce() const; bool nand_reduce() const; bool or_reduce() const; bool nor_reduce() const; bool xor_reduce() const; bool xnor_reduce() const; // query parameter int length() const; // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; #ifdef SC_DT_DEPRECATED int to_signed() const; unsigned int to_unsigned() const; #endif const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; // implicit conversion operator sc_bv_base() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; protected: sc_fxnum_fast& m_num; int m_from; int m_to; sc_bv_base& m_bv; }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_subref // // Proxy class for part-selection in class sc_fxnum_fast, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast_subref : public sc_fxnum_fast_subref_r { friend class sc_fxnum_fast; friend class sc_fxnum_subref; bool set(); // constructor sc_fxnum_fast_subref( sc_fxnum_fast&, int, int ); public: // copy constructor sc_fxnum_fast_subref( const sc_fxnum_fast_subref& ); // assignment operators #define DECL_ASN_OP_T(tp) \ sc_fxnum_fast_subref& operator = ( tp ); DECL_ASN_OP_T(const sc_fxnum_subref&) DECL_ASN_OP_T(const sc_fxnum_fast_subref&) DECL_ASN_OP_T(const sc_bv_base&) DECL_ASN_OP_T(const sc_lv_base&) DECL_ASN_OP_T(const char*) DECL_ASN_OP_T(const bool*) DECL_ASN_OP_T(const sc_signed&) DECL_ASN_OP_T(const sc_unsigned&) DECL_ASN_OP_T(const sc_int_base&) DECL_ASN_OP_T(const sc_uint_base&) DECL_ASN_OP_T(int64) DECL_ASN_OP_T(uint64) DECL_ASN_OP_T(int) DECL_ASN_OP_T(unsigned int) DECL_ASN_OP_T(long) DECL_ASN_OP_T(unsigned long) DECL_ASN_OP_T(char) #undef DECL_ASN_OP_T #define DECL_ASN_OP_T_A(op,tp) \ sc_fxnum_fast_subref& operator op ## = ( tp ); #define DECL_ASN_OP_A(op) \ DECL_ASN_OP_T_A(op,const sc_fxnum_subref&) \ DECL_ASN_OP_T_A(op,const sc_fxnum_fast_subref&) \ DECL_ASN_OP_T_A(op,const sc_bv_base&) \ DECL_ASN_OP_T_A(op,const sc_lv_base&) DECL_ASN_OP_A(&) DECL_ASN_OP_A(|) DECL_ASN_OP_A(^) #undef DECL_ASN_OP_T_A #undef DECL_ASN_OP_A void scan( ::std::istream& = ::std::cin ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum // // Base class for the fixed-point types; arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_fxnum { friend class sc_fxval; friend class sc_fxnum_bitref; friend class sc_fxnum_bitref_r; friend class sc_fxnum_subref; friend class sc_fxnum_subref_r; friend class sc_fxnum_fast_bitref; friend class sc_fxnum_fast_subref; friend class sc_core::vcd_sc_fxnum_trace; friend class sc_core::wif_sc_fxnum_trace; protected: sc_fxnum_observer* observer() const; void cast(); // constructors sc_fxnum( const sc_fxtype_params&, sc_enc, const sc_fxcast_switch&, sc_fxnum_observer* ); #define DECL_CTOR_T(tp) \ sc_fxnum( tp, \ const sc_fxtype_params&, \ sc_enc, \ const sc_fxcast_switch&, \ sc_fxnum_observer* ); DECL_CTOR_T(int) DECL_CTOR_T(unsigned int) DECL_CTOR_T(long) DECL_CTOR_T(unsigned long) DECL_CTOR_T(float) DECL_CTOR_T(double) DECL_CTOR_T(const char*) DECL_CTOR_T(const sc_fxval&) DECL_CTOR_T(const sc_fxval_fast&) DECL_CTOR_T(const sc_fxnum&) DECL_CTOR_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTOR_T(int64) DECL_CTOR_T(uint64) DECL_CTOR_T(const sc_int_base&) DECL_CTOR_T(const sc_uint_base&) DECL_CTOR_T(const sc_signed&) DECL_CTOR_T(const sc_unsigned&) #endif #undef DECL_CTOR_T ~sc_fxnum(); // internal use only; const scfx_rep* get_rep() const; public: // unary operators const sc_fxval operator - () const; const sc_fxval operator + () const; // unary functions friend void neg( sc_fxval&, const sc_fxnum& ); friend void neg( sc_fxnum&, const sc_fxnum& ); // binary operators #define DECL_BIN_OP_T(op,tp) \ friend const sc_fxval operator op ( const sc_fxnum&, tp ); \ friend const sc_fxval operator op ( tp, const sc_fxnum& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_OP_OTHER(op) \ DECL_BIN_OP_T(op,int64) \ DECL_BIN_OP_T(op,uint64) \ DECL_BIN_OP_T(op,const sc_int_base&) \ DECL_BIN_OP_T(op,const sc_uint_base&) \ DECL_BIN_OP_T(op,const sc_signed&) \ DECL_BIN_OP_T(op,const sc_unsigned&) #else #define DECL_BIN_OP_OTHER(op) #endif #define DECL_BIN_OP(op,dummy) \ friend const sc_fxval operator op ( const sc_fxnum&, const sc_fxnum& ); \ DECL_BIN_OP_T(op,int) \ DECL_BIN_OP_T(op,unsigned int) \ DECL_BIN_OP_T(op,long) \ DECL_BIN_OP_T(op,unsigned long) \ DECL_BIN_OP_T(op,float) \ DECL_BIN_OP_T(op,double) \ DECL_BIN_OP_T(op,const char*) \ DECL_BIN_OP_T(op,const sc_fxval&) \ DECL_BIN_OP_T(op,const sc_fxval_fast&) \ DECL_BIN_OP_T(op,const sc_fxnum_fast&) \ DECL_BIN_OP_OTHER(op) DECL_BIN_OP(*,mult) DECL_BIN_OP(+,add) DECL_BIN_OP(-,sub) // don't use macros // DECL_BIN_OP(/,div) friend const sc_fxval operator / ( const sc_fxnum&, const sc_fxnum& ); DECL_BIN_OP_T(/,int) DECL_BIN_OP_T(/,unsigned int) DECL_BIN_OP_T(/,long) DECL_BIN_OP_T(/,unsigned long) DECL_BIN_OP_T(/,float) DECL_BIN_OP_T(/,double) DECL_BIN_OP_T(/,const char*) DECL_BIN_OP_T(/,const sc_fxval&) DECL_BIN_OP_T(/,const sc_fxval_fast&) DECL_BIN_OP_T(/,const sc_fxnum_fast&) // DECL_BIN_OP_OTHER(op) #ifndef SC_FX_EXCLUDE_OTHER DECL_BIN_OP_T(/,int64) DECL_BIN_OP_T(/,uint64) DECL_BIN_OP_T(/,const sc_int_base&) DECL_BIN_OP_T(/,const sc_uint_base&) DECL_BIN_OP_T(/,const sc_signed&) DECL_BIN_OP_T(/,const sc_unsigned&) #endif #undef DECL_BIN_OP_T #undef DECL_BIN_OP_OTHER #undef DECL_BIN_OP friend const sc_fxval operator << ( const sc_fxnum&, int ); friend const sc_fxval operator >> ( const sc_fxnum&, int ); // binary functions #define DECL_BIN_FNC_T(fnc,tp) \ friend void fnc ( sc_fxval&, const sc_fxnum&, tp ); \ friend void fnc ( sc_fxval&, tp, const sc_fxnum& ); \ friend void fnc ( sc_fxnum&, const sc_fxnum&, tp ); \ friend void fnc ( sc_fxnum&, tp, const sc_fxnum& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_FNC_OTHER(fnc) \ DECL_BIN_FNC_T(fnc,int64) \ DECL_BIN_FNC_T(fnc,uint64) \ DECL_BIN_FNC_T(fnc,const sc_int_base&) \ DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ DECL_BIN_FNC_T(fnc,const sc_signed&) \ DECL_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DECL_BIN_FNC_OTHER(fnc) #endif #define DECL_BIN_FNC(fnc) \ friend void fnc ( sc_fxval&, const sc_fxnum&, const sc_fxnum& ); \ friend void fnc ( sc_fxnum&, const sc_fxnum&, const sc_fxnum& ); \ DECL_BIN_FNC_T(fnc,int) \ DECL_BIN_FNC_T(fnc,unsigned int) \ DECL_BIN_FNC_T(fnc,long) \ DECL_BIN_FNC_T(fnc,unsigned long) \ DECL_BIN_FNC_T(fnc,float) \ DECL_BIN_FNC_T(fnc,double) \ DECL_BIN_FNC_T(fnc,const char*) \ DECL_BIN_FNC_T(fnc,const sc_fxval&) \ DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ DECL_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ DECL_BIN_FNC_OTHER(fnc) DECL_BIN_FNC(mult) DECL_BIN_FNC(div) DECL_BIN_FNC(add) DECL_BIN_FNC(sub) #undef DECL_BIN_FNC_T #undef DECL_BIN_FNC_OTHER #undef DECL_BIN_FNC friend void lshift( sc_fxval&, const sc_fxnum&, int ); friend void rshift( sc_fxval&, const sc_fxnum&, int ); friend void lshift( sc_fxnum&, const sc_fxnum&, int ); friend void rshift( sc_fxnum&, const sc_fxnum&, int ); // relational (including equality) operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxnum&, tp ); \ friend bool operator op ( tp, const sc_fxnum& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_REL_OP_OTHER(op) \ DECL_REL_OP_T(op,int64) \ DECL_REL_OP_T(op,uint64) \ DECL_REL_OP_T(op,const sc_int_base&) \ DECL_REL_OP_T(op,const sc_uint_base&) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) #else #define DECL_REL_OP_OTHER(op) #endif #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxnum&, const sc_fxnum& ); \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) \ DECL_REL_OP_T(op,float) \ DECL_REL_OP_T(op,double) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_T(op,const sc_fxval&) \ DECL_REL_OP_T(op,const sc_fxval_fast&) \ DECL_REL_OP_T(op,const sc_fxnum_fast&) \ DECL_REL_OP_OTHER(op) DECL_REL_OP(<) DECL_REL_OP(<=) DECL_REL_OP(>) DECL_REL_OP(>=) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP_OTHER #undef DECL_REL_OP // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxnum& operator op( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_fxnum& operator ++ (); sc_fxnum& operator -- (); // bit selection sc_fxnum_bitref_r operator [] ( int ) const; sc_fxnum_bitref operator [] ( int ); sc_fxnum_bitref_r bit( int ) const; sc_fxnum_bitref bit( int ); // part selection sc_fxnum_subref_r operator () ( int, int ) const; sc_fxnum_subref operator () ( int, int ); sc_fxnum_subref_r range( int, int ) const; sc_fxnum_subref range( int, int ); sc_fxnum_subref_r operator () () const; sc_fxnum_subref operator () (); sc_fxnum_subref_r range() const; sc_fxnum_subref range(); // implicit conversion operator double() const; // necessary evil! // explicit conversion to primitive types short to_short() const; unsigned short to_ushort() const; int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; float to_float() const; double to_double() const; // explicit conversion to character string const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; const std::string to_string( sc_fmt ) const; const std::string to_string( sc_numrep, sc_fmt ) const; const std::string to_string( sc_numrep, bool, sc_fmt ) const; const std::string to_dec() const; const std::string to_bin() const; const std::string to_oct() const; const std::string to_hex() const; // query value bool is_neg() const; bool is_zero() const; // internal use only; bool is_normal() const; bool quantization_flag() const; bool overflow_flag() const; const sc_fxval value() const; // query parameters int wl() const; int iwl() const; sc_q_mode q_mode() const; sc_o_mode o_mode() const; int n_bits() const; const sc_fxtype_params& type_params() const; const sc_fxcast_switch& cast_switch() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void scan( ::std::istream& = ::std::cin ); void dump( ::std::ostream& = ::std::cout ) const; // internal use only; void observer_read() const; // internal use only; bool get_bit( int ) const; protected: bool set_bit( int, bool ); bool get_slice( int, int, sc_bv_base& ) const; bool set_slice( int, int, const sc_bv_base& ); sc_fxnum_observer* lock_observer() const; void unlock_observer( sc_fxnum_observer* ) const; private: scfx_rep* m_rep; scfx_params m_params; bool m_q_flag; bool m_o_flag; mutable sc_fxnum_observer* m_observer; private: // disabled sc_fxnum(); sc_fxnum( const sc_fxnum& ); }; // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast // // Base class for the fixed-point types; limited precision. // ---------------------------------------------------------------------------- class SC_API sc_fxnum_fast { friend class sc_fxval_fast; friend class sc_fxnum_bitref; friend class sc_fxnum_subref; friend class sc_fxnum_fast_bitref; friend class sc_fxnum_fast_bitref_r; friend class sc_fxnum_fast_subref; friend class sc_fxnum_fast_subref_r; friend class sc_core::vcd_sc_fxnum_fast_trace; friend class sc_core::wif_sc_fxnum_fast_trace; protected: sc_fxnum_fast_observer* observer() const; void cast(); // constructors sc_fxnum_fast( const sc_fxtype_params&, sc_enc, const sc_fxcast_switch&, sc_fxnum_fast_observer* ); #define DECL_CTOR_T(tp) \ sc_fxnum_fast( tp, \ const sc_fxtype_params&, \ sc_enc, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* ); DECL_CTOR_T(int) DECL_CTOR_T(unsigned int) DECL_CTOR_T(long) DECL_CTOR_T(unsigned long) DECL_CTOR_T(float) DECL_CTOR_T(double) DECL_CTOR_T(const char*) DECL_CTOR_T(const sc_fxval&) DECL_CTOR_T(const sc_fxval_fast&) DECL_CTOR_T(const sc_fxnum&) DECL_CTOR_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTOR_T(int64) DECL_CTOR_T(uint64) DECL_CTOR_T(const sc_int_base&) DECL_CTOR_T(const sc_uint_base&) DECL_CTOR_T(const sc_signed&) DECL_CTOR_T(const sc_unsigned&) #endif #undef DECL_CTOR_T ~sc_fxnum_fast(); // internal use only; double get_val() const; public: // unary operators const sc_fxval_fast operator - () const; const sc_fxval_fast operator + () const; // unary functions friend void neg( sc_fxval_fast&, const sc_fxnum_fast& ); friend void neg( sc_fxnum_fast&, const sc_fxnum_fast& ); // binary operators #define DECL_BIN_OP_T(op,tp) \ friend const sc_fxval_fast operator op ( const sc_fxnum_fast&, tp ); \ friend const sc_fxval_fast operator op ( tp, const sc_fxnum_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_OP_OTHER(op) \ DECL_BIN_OP_T(op,int64) \ DECL_BIN_OP_T(op,uint64) \ DECL_BIN_OP_T(op,const sc_int_base&) \ DECL_BIN_OP_T(op,const sc_uint_base&) \ DECL_BIN_OP_T(op,const sc_signed&) \ DECL_BIN_OP_T(op,const sc_unsigned&) #else #define DECL_BIN_OP_OTHER(op) #endif #define DECL_BIN_OP(op,dummy) \ friend const sc_fxval_fast operator op ( const sc_fxnum_fast&, \ const sc_fxnum_fast& ); \ DECL_BIN_OP_T(op,int) \ DECL_BIN_OP_T(op,unsigned int) \ DECL_BIN_OP_T(op,long) \ DECL_BIN_OP_T(op,unsigned long) \ DECL_BIN_OP_T(op,float) \ DECL_BIN_OP_T(op,double) \ DECL_BIN_OP_T(op,const char*) \ DECL_BIN_OP_T(op,const sc_fxval_fast&) \ DECL_BIN_OP_OTHER(op) DECL_BIN_OP(*,mult) DECL_BIN_OP(+,add) DECL_BIN_OP(-,sub) // DECL_BIN_OP(/,div) friend const sc_fxval_fast operator / ( const sc_fxnum_fast&, const sc_fxnum_fast& ); DECL_BIN_OP_T(/,int) DECL_BIN_OP_T(/,unsigned int) DECL_BIN_OP_T(/,long) DECL_BIN_OP_T(/,unsigned long) DECL_BIN_OP_T(/,float) DECL_BIN_OP_T(/,double) DECL_BIN_OP_T(/,const char*) DECL_BIN_OP_T(/,const sc_fxval_fast&) // DECL_BIN_OP_OTHER(op) #ifndef SC_FX_EXCLUDE_OTHER DECL_BIN_OP_T(/,int64) \ DECL_BIN_OP_T(/,uint64) \ DECL_BIN_OP_T(/,const sc_int_base&) \ DECL_BIN_OP_T(/,const sc_uint_base&) \ DECL_BIN_OP_T(/,const sc_signed&) \ DECL_BIN_OP_T(/,const sc_unsigned&) #endif #undef DECL_BIN_OP_T #undef DECL_BIN_OP_OTHER #undef DECL_BIN_OP friend const sc_fxval_fast operator << ( const sc_fxnum_fast&, int ); friend const sc_fxval_fast operator >> ( const sc_fxnum_fast&, int ); // binary functions #define DECL_BIN_FNC_T(fnc,tp) \ friend void fnc ( sc_fxval_fast&, const sc_fxnum_fast&, tp ); \ friend void fnc ( sc_fxval_fast&, tp, const sc_fxnum_fast& ); \ friend void fnc ( sc_fxnum_fast&, const sc_fxnum_fast&, tp ); \ friend void fnc ( sc_fxnum_fast&, tp, const sc_fxnum_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_FNC_OTHER(fnc) \ DECL_BIN_FNC_T(fnc,int64) \ DECL_BIN_FNC_T(fnc,uint64) \ DECL_BIN_FNC_T(fnc,const sc_int_base&) \ DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ DECL_BIN_FNC_T(fnc,const sc_signed&) \ DECL_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DECL_BIN_FNC_OTHER(fnc) #endif #define DECL_BIN_FNC(fnc) \ friend void fnc ( sc_fxval_fast&, const sc_fxnum_fast&, \ const sc_fxnum_fast& ); \ friend void fnc ( sc_fxnum_fast&, const sc_fxnum_fast&, \ const sc_fxnum_fast& ); \ DECL_BIN_FNC_T(fnc,int) \ DECL_BIN_FNC_T(fnc,unsigned int) \ DECL_BIN_FNC_T(fnc,long) \ DECL_BIN_FNC_T(fnc,unsigned long) \ DECL_BIN_FNC_T(fnc,float) \ DECL_BIN_FNC_T(fnc,double) \ DECL_BIN_FNC_T(fnc,const char*) \ DECL_BIN_FNC_T(fnc,const sc_fxval&) \ DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ DECL_BIN_FNC_T(fnc,const sc_fxnum&) \ DECL_BIN_FNC_OTHER(fnc) DECL_BIN_FNC(mult) DECL_BIN_FNC(div) DECL_BIN_FNC(add) DECL_BIN_FNC(sub) #undef DECL_BIN_FNC_T #undef DECL_BIN_FNC_OTHER #undef DECL_BIN_FNC friend void lshift( sc_fxval_fast&, const sc_fxnum_fast&, int ); friend void rshift( sc_fxval_fast&, const sc_fxnum_fast&, int ); friend void lshift( sc_fxnum_fast&, const sc_fxnum_fast&, int ); friend void rshift( sc_fxnum_fast&, const sc_fxnum_fast&, int ); // relational (including equality) operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxnum_fast&, tp ); \ friend bool operator op ( tp, const sc_fxnum_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_REL_OP_OTHER(op) \ DECL_REL_OP_T(op,int64) \ DECL_REL_OP_T(op,uint64) \ DECL_REL_OP_T(op,const sc_int_base&) \ DECL_REL_OP_T(op,const sc_uint_base&) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) #else #define DECL_REL_OP_OTHER(op) #endif #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxnum_fast&, const sc_fxnum_fast& ); \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) \ DECL_REL_OP_T(op,float) \ DECL_REL_OP_T(op,double) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_T(op,const sc_fxval_fast&) \ DECL_REL_OP_OTHER(op) DECL_REL_OP(<) DECL_REL_OP(<=) DECL_REL_OP(>) DECL_REL_OP(>=) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP_OTHER #undef DECL_REL_OP // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxnum_fast& operator op( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_fxnum_fast& operator ++ (); sc_fxnum_fast& operator -- (); // bit selection sc_fxnum_fast_bitref_r operator [] ( int ) const; sc_fxnum_fast_bitref operator [] ( int ); sc_fxnum_fast_bitref_r bit( int ) const; sc_fxnum_fast_bitref bit( int ); // part selection sc_fxnum_fast_subref_r operator () ( int, int ) const; sc_fxnum_fast_subref operator () ( int, int ); sc_fxnum_fast_subref_r range( int, int ) const; sc_fxnum_fast_subref range( int, int ); sc_fxnum_fast_subref_r operator () () const; sc_fxnum_fast_subref operator () (); sc_fxnum_fast_subref_r range() const; sc_fxnum_fast_subref range(); // implicit conversion operator double() const; // necessary evil! // explicit conversion to primitive types short to_short() const; unsigned short to_ushort() const; int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; float to_float() const; double to_double() const; // explicit conversion to character string const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; const std::string to_string( sc_fmt ) const; const std::string to_string( sc_numrep, sc_fmt ) const; const std::string to_string( sc_numrep, bool, sc_fmt ) const; const std::string to_dec() const; const std::string to_bin() const; const std::string to_oct() const; const std::string to_hex() const; // query value bool is_neg() const; bool is_zero() const; // internal use only; bool is_normal() const; bool quantization_flag() const; bool overflow_flag() const; const sc_fxval_fast value() const; // query parameters int wl() const; int iwl() const; sc_q_mode q_mode() const; sc_o_mode o_mode() const; int n_bits() const; const sc_fxtype_params& type_params() const; const sc_fxcast_switch& cast_switch() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void scan( ::std::istream& = ::std::cin ); void dump( ::std::ostream& = ::std::cout ) const; // internal use only; void observer_read() const; // internal use only; bool get_bit( int ) const; protected: bool set_bit( int, bool ); bool get_slice( int, int, sc_bv_base& ) const; bool set_slice( int, int, const sc_bv_base& ); sc_fxnum_fast_observer* lock_observer() const; void unlock_observer( sc_fxnum_fast_observer* ) const; private: double m_val; scfx_params m_params; bool m_q_flag; bool m_o_flag; mutable sc_fxnum_fast_observer* m_observer; private: // disabled sc_fxnum_fast(); sc_fxnum_fast( const sc_fxnum_fast& ); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_bitref_r // ---------------------------------------------------------------------------- inline sc_fxnum_bitref_r::sc_fxnum_bitref_r(sc_fxnum& num_, int idx_ ) : m_num(num_) , m_idx(idx_) { } inline sc_fxnum_bitref_r::sc_fxnum_bitref_r( const sc_fxnum_bitref_r& a ) : m_num( a.m_num ), m_idx ( a.m_idx ) {} // implicit conversion inline sc_fxnum_bitref_r::operator bool() const { SC_FXNUM_OBSERVER_READ_( m_num ) return get(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum_bitref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_bitref // // Proxy class for bit-selection in class sc_fxnum, behaves like sc_bit. // ---------------------------------------------------------------------------- // constructor inline sc_fxnum_bitref::sc_fxnum_bitref( sc_fxnum& num_, int idx_ ) : sc_fxnum_bitref_r ( num_ , idx_ ) {} // copy constructor inline sc_fxnum_bitref::sc_fxnum_bitref( const sc_fxnum_bitref& a ) : sc_fxnum_bitref_r( a ) {} // assignment operators inline sc_fxnum_bitref& sc_fxnum_bitref::operator = ( const sc_fxnum_bitref& a ) { if( &a != this ) { SC_FXNUM_OBSERVER_READ_( a.m_num ) set( a.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) } return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator = ( const sc_fxnum_fast_bitref& a ) { SC_FXNUM_FAST_OBSERVER_READ_( a.m_num ) set( a.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator = ( const sc_bit& a ) { set( static_cast( a ) ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator = ( bool a ) { set( a ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator &= ( const sc_fxnum_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() && b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator &= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() && b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator &= ( const sc_bit& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() && static_cast( b ) ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator &= ( bool b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() && b ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator |= ( const sc_fxnum_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() || b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator |= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() || b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator |= ( const sc_bit& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() || static_cast( b ) ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator |= ( bool b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() || b ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator ^= ( const sc_fxnum_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() != b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator ^= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() != b.get() ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator ^= ( const sc_bit& b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() != static_cast( b ) ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_bitref& sc_fxnum_bitref::operator ^= ( bool b ) { SC_FXNUM_OBSERVER_READ_( m_num ) set( get() != b ); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_bitref_r // ---------------------------------------------------------------------------- inline sc_fxnum_fast_bitref_r::sc_fxnum_fast_bitref_r( sc_fxnum_fast& num_, int idx_ ) : m_num( num_ ), m_idx( idx_ ) {} inline sc_fxnum_fast_bitref_r::sc_fxnum_fast_bitref_r( const sc_fxnum_fast_bitref_r& a ) : m_num( a.m_num ), m_idx( a.m_idx ) {} inline sc_fxnum_fast_bitref_r::operator bool() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) return get(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum_fast_bitref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_bitref // // Proxy class for bit-selection in class sc_fxnum_fast, behaves like sc_bit. // ---------------------------------------------------------------------------- // constructor inline sc_fxnum_fast_bitref::sc_fxnum_fast_bitref( sc_fxnum_fast& num_, int idx_ ) : sc_fxnum_fast_bitref_r( num_ , idx_ ) {} // copy constructor inline sc_fxnum_fast_bitref::sc_fxnum_fast_bitref( const sc_fxnum_fast_bitref& a ) : sc_fxnum_fast_bitref_r( a ) {} // assignment operators inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator = ( const sc_fxnum_bitref& a ) { SC_FXNUM_OBSERVER_READ_( a.m_num ) set( a.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator = ( const sc_fxnum_fast_bitref& a ) { if( &a != this ) { SC_FXNUM_FAST_OBSERVER_READ_( a.m_num ) set( a.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) } return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator = ( const sc_bit& a ) { set( static_cast( a ) ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator = ( bool a ) { set( a ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator &= ( const sc_fxnum_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() && b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator &= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() && b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator &= ( const sc_bit& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() && static_cast( b ) ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator &= ( bool b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() && b ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator |= ( const sc_fxnum_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() || b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator |= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() || b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator |= ( const sc_bit& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() || static_cast( b ) ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator |= ( bool b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() || b ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator ^= ( const sc_fxnum_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_OBSERVER_READ_( b.m_num ) set( get() != b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator ^= ( const sc_fxnum_fast_bitref& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) SC_FXNUM_FAST_OBSERVER_READ_( b.m_num ) set( get() != b.get() ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator ^= ( const sc_bit& b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() != static_cast( b ) ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_bitref& sc_fxnum_fast_bitref::operator ^= ( bool b ) { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) set( get() != b ); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum_fast_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_subref_r // ---------------------------------------------------------------------------- inline sc_fxnum_subref_r::sc_fxnum_subref_r( sc_fxnum& num_, int from_, int to_ ) : m_num( num_ ), m_from( from_ ), m_to( to_ ), m_bv( *new sc_bv_base( sc_max( m_from, m_to ) - sc_min( m_from, m_to ) + 1 ) ) {} inline sc_fxnum_subref_r::sc_fxnum_subref_r( const sc_fxnum_subref_r& a ) : m_num( a.m_num ), m_from( a.m_from ), m_to( a.m_to ), m_bv( *new sc_bv_base( a.m_bv ) ) {} inline sc_fxnum_subref_r::~sc_fxnum_subref_r() { delete &m_bv; } // relational operators #define DEFN_REL_OP_T(op,tp) \ inline \ bool \ operator op ( const sc_fxnum_subref_r& a, tp b ) \ { \ return ( static_cast( a ) op b ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxnum_subref_r& b ) \ { \ return ( static_cast( b ) op a ); \ } #define DEFN_REL_OP(op) \ inline \ bool \ operator op ( const sc_fxnum_subref_r& a, const sc_fxnum_subref_r& b ) \ { \ return ( static_cast( a ) op static_cast( b ) ); \ } \ \ inline \ bool \ operator op ( const sc_fxnum_subref_r& a, const sc_fxnum_fast_subref_r& b ) \ { \ return ( static_cast( a ) op static_cast( b ) ); \ } \ \ DEFN_REL_OP_T(op,const sc_bv_base&) \ DEFN_REL_OP_T(op,const sc_lv_base&) \ DEFN_REL_OP_T(op,const char*) \ DEFN_REL_OP_T(op,const bool*) \ DEFN_REL_OP_T(op,const sc_signed&) \ DEFN_REL_OP_T(op,const sc_unsigned&) \ DEFN_REL_OP_T(op,int) \ DEFN_REL_OP_T(op,unsigned int) \ DEFN_REL_OP_T(op,long) \ DEFN_REL_OP_T(op,unsigned long) DEFN_REL_OP(==) DEFN_REL_OP(!=) #undef DEFN_REL_OP_T #undef DEFN_REL_OP // reduce functions #define DEFN_RED_FNC(fnc) \ inline \ bool \ sc_fxnum_subref_r::fnc() const \ { \ SC_FXNUM_OBSERVER_READ_( m_num ) \ get(); \ return static_cast( m_bv.fnc() ); \ } DEFN_RED_FNC(and_reduce) DEFN_RED_FNC(nand_reduce) DEFN_RED_FNC(or_reduce) DEFN_RED_FNC(nor_reduce) DEFN_RED_FNC(xor_reduce) DEFN_RED_FNC(xnor_reduce) #undef DEFN_RED_FNC // query parameter inline int sc_fxnum_subref_r::length() const { return m_bv.length(); } // explicit conversions inline int sc_fxnum_subref_r::to_int() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_int(); } inline int64 sc_fxnum_subref_r::to_int64() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_int64(); } inline unsigned int sc_fxnum_subref_r::to_uint() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_uint(); } inline uint64 sc_fxnum_subref_r::to_uint64() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_uint64(); } inline long sc_fxnum_subref_r::to_long() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_long(); } inline unsigned long sc_fxnum_subref_r::to_ulong() const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv.to_ulong(); } #ifdef SC_DT_DEPRECATED inline int sc_fxnum_subref_r::to_signed() const { return to_int(); } inline unsigned int sc_fxnum_subref_r::to_unsigned() const { return to_uint(); } #endif inline const std::string sc_fxnum_subref_r::to_string() const { get(); return m_bv.to_string(); } inline const std::string sc_fxnum_subref_r::to_string( sc_numrep numrep ) const { get(); return m_bv.to_string( numrep ); } inline const std::string sc_fxnum_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { get(); return m_bv.to_string( numrep, w_prefix ); } // implicit conversion inline sc_fxnum_subref_r::operator sc_bv_base () const { SC_FXNUM_OBSERVER_READ_( m_num ) get(); return m_bv; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_subref // // Proxy class for part-selection in class sc_fxnum, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- // constructor inline sc_fxnum_subref::sc_fxnum_subref( sc_fxnum& num_, int from_, int to_ ) : sc_fxnum_subref_r (num_, from_, to_) {} // copy constructor inline sc_fxnum_subref::sc_fxnum_subref( const sc_fxnum_subref& a ) : sc_fxnum_subref_r( a ) {} // assignment operators inline sc_fxnum_subref& sc_fxnum_subref::operator = ( const sc_fxnum_subref& a ) { if( &a != this ) { m_bv = static_cast( a ); set(); SC_FXNUM_OBSERVER_WRITE_( m_num ) } return *this; } inline sc_fxnum_subref& sc_fxnum_subref::operator = ( const sc_fxnum_fast_subref& a ) { m_bv = static_cast( a ); set(); SC_FXNUM_OBSERVER_WRITE_( m_num ) return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxnum_subref& \ sc_fxnum_subref::operator = ( tp a ) \ { \ m_bv = a; \ set(); \ SC_FXNUM_OBSERVER_WRITE_( m_num ) \ return *this; \ } DEFN_ASN_OP_T(const sc_bv_base&) DEFN_ASN_OP_T(const sc_lv_base&) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const bool*) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(char) #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fxnum_subref& \ sc_fxnum_subref::operator op ## = ( tp a ) \ { \ SC_FXNUM_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op a; \ set(); \ SC_FXNUM_OBSERVER_WRITE_( m_num ) \ return *this; \ } #define DEFN_ASN_OP(op) \ inline \ sc_fxnum_subref& \ sc_fxnum_subref::operator op ## = ( const sc_fxnum_subref& a ) \ { \ SC_FXNUM_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op static_cast( a ); \ set(); \ SC_FXNUM_OBSERVER_WRITE_( m_num ) \ return *this; \ } \ \ inline \ sc_fxnum_subref& \ sc_fxnum_subref::operator op ## = ( const sc_fxnum_fast_subref& a ) \ { \ SC_FXNUM_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op static_cast( a ); \ set(); \ SC_FXNUM_OBSERVER_WRITE_( m_num ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,const sc_bv_base&) \ DEFN_ASN_OP_T(op,const sc_lv_base&) DEFN_ASN_OP(&) DEFN_ASN_OP(|) DEFN_ASN_OP(^) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum_subref& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_subref_r // ---------------------------------------------------------------------------- inline sc_fxnum_fast_subref_r::sc_fxnum_fast_subref_r(sc_fxnum_fast & num_, int from_, int to_) : m_num(num_), m_from(from_), m_to(to_), m_bv( *new sc_bv_base( sc_max( m_from, m_to ) - sc_min( m_from, m_to ) + 1 ) ) {} inline sc_fxnum_fast_subref_r::sc_fxnum_fast_subref_r(const sc_fxnum_fast_subref_r & a) : m_num( a.m_num ), m_from( a.m_from ), m_to( a.m_to ), m_bv( *new sc_bv_base( a.m_bv ) ) {} inline sc_fxnum_fast_subref_r::~sc_fxnum_fast_subref_r() { delete &m_bv; } // relational operators #define DEFN_REL_OP_T(op,tp) \ inline \ bool \ operator op ( const sc_fxnum_fast_subref_r& a, tp b ) \ { \ return ( static_cast( a ) op b ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxnum_fast_subref_r& b ) \ { \ return ( static_cast( b ) op a ); \ } #define DEFN_REL_OP(op) \ inline \ bool \ operator op ( const sc_fxnum_fast_subref_r& a, \ const sc_fxnum_fast_subref_r& b ) \ { \ return ( static_cast( a ) op static_cast( b ) ); \ } \ \ inline \ bool \ operator op ( const sc_fxnum_fast_subref_r& a, const sc_fxnum_subref_r& b ) \ { \ return ( static_cast( a ) op static_cast( b ) ); \ } \ \ DEFN_REL_OP_T(op,const sc_bv_base&) \ DEFN_REL_OP_T(op,const sc_lv_base&) \ DEFN_REL_OP_T(op,const char*) \ DEFN_REL_OP_T(op,const bool*) \ DEFN_REL_OP_T(op,const sc_signed&) \ DEFN_REL_OP_T(op,const sc_unsigned&) \ DEFN_REL_OP_T(op,int) \ DEFN_REL_OP_T(op,unsigned int) \ DEFN_REL_OP_T(op,long) \ DEFN_REL_OP_T(op,unsigned long) DEFN_REL_OP(==) DEFN_REL_OP(!=) #undef DEFN_REL_OP_T #undef DEFN_REL_OP // reduce functions #define DEFN_RED_FNC(fnc) \ inline \ bool \ sc_fxnum_fast_subref_r::fnc() const \ { \ SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ get(); \ return static_cast( m_bv.fnc() ); \ } DEFN_RED_FNC(and_reduce) DEFN_RED_FNC(nand_reduce) DEFN_RED_FNC(or_reduce) DEFN_RED_FNC(nor_reduce) DEFN_RED_FNC(xor_reduce) DEFN_RED_FNC(xnor_reduce) #undef DEFN_RED_FNC // query parameter inline int sc_fxnum_fast_subref_r::length() const { return m_bv.length(); } // explicit conversions inline int sc_fxnum_fast_subref_r::to_int() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_int(); } inline int64 sc_fxnum_fast_subref_r::to_int64() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_int64(); } inline unsigned int sc_fxnum_fast_subref_r::to_uint() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_uint(); } inline uint64 sc_fxnum_fast_subref_r::to_uint64() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_uint64(); } inline long sc_fxnum_fast_subref_r::to_long() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_long(); } inline unsigned long sc_fxnum_fast_subref_r::to_ulong() const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv.to_ulong(); } #ifdef SC_DT_DEPRECATED inline int sc_fxnum_fast_subref_r::to_signed() const { return to_int(); } inline unsigned int sc_fxnum_fast_subref_r::to_unsigned() const { return to_uint(); } #endif inline const std::string sc_fxnum_fast_subref_r::to_string() const { get(); return m_bv.to_string(); } inline const std::string sc_fxnum_fast_subref_r::to_string( sc_numrep numrep ) const { get(); return m_bv.to_string( numrep ); } inline const std::string sc_fxnum_fast_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { get(); return m_bv.to_string( numrep, w_prefix ); } // implicit conversion inline sc_fxnum_fast_subref_r::operator sc_bv_base () const { SC_FXNUM_FAST_OBSERVER_READ_( m_num ) get(); return m_bv; } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum_fast_subref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast_subref // // Proxy class for part-selection in class sc_fxnum_fast, // behaves like sc_bv_base. // ---------------------------------------------------------------------------- // constructor inline sc_fxnum_fast_subref::sc_fxnum_fast_subref( sc_fxnum_fast& num_, int from_, int to_ ) : sc_fxnum_fast_subref_r( num_ , from_ , to_ ) {} // copy constructor inline sc_fxnum_fast_subref::sc_fxnum_fast_subref( const sc_fxnum_fast_subref& a ) : sc_fxnum_fast_subref_r(a) {} // assignment operators inline sc_fxnum_fast_subref& sc_fxnum_fast_subref::operator = ( const sc_fxnum_subref& a ) { m_bv = static_cast( a ); set(); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) return *this; } inline sc_fxnum_fast_subref& sc_fxnum_fast_subref::operator = ( const sc_fxnum_fast_subref& a ) { if( &a != this ) { m_bv = static_cast( a ); set(); SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) } return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxnum_fast_subref& \ sc_fxnum_fast_subref::operator = ( tp a ) \ { \ m_bv = a; \ set(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ return *this; \ } DEFN_ASN_OP_T(const sc_bv_base&) DEFN_ASN_OP_T(const sc_lv_base&) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const bool*) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(char) #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fxnum_fast_subref& \ sc_fxnum_fast_subref::operator op ## = ( tp a ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op a; \ set(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ return *this; \ } #define DEFN_ASN_OP(op) \ inline \ sc_fxnum_fast_subref& \ sc_fxnum_fast_subref::operator op ## = ( const sc_fxnum_subref& a ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op static_cast( a ); \ set(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ return *this; \ } \ \ inline \ sc_fxnum_fast_subref& \ sc_fxnum_fast_subref::operator op ## = ( const sc_fxnum_fast_subref& a ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( m_num ) \ get(); \ m_bv = m_bv op static_cast( a ); \ set(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( m_num ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,const sc_bv_base&) \ DEFN_ASN_OP_T(op,const sc_lv_base&) DEFN_ASN_OP(&) DEFN_ASN_OP(|) DEFN_ASN_OP(^) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum_fast_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum // // Base class for the fixed-point types; arbitrary precision. // ---------------------------------------------------------------------------- inline sc_fxnum_observer* sc_fxnum::observer() const { return m_observer; } inline void sc_fxnum::cast() { SC_ERROR_IF_( ! m_rep->is_normal(), sc_core::SC_ID_INVALID_FX_VALUE_ ); if( m_params.cast_switch() == SC_ON ) m_rep->cast( m_params, m_q_flag, m_o_flag ); } // constructors inline sc_fxnum::sc_fxnum( const sc_fxtype_params& type_params_, sc_enc enc_, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : m_rep( new scfx_rep ), m_params( type_params_, enc_, cast_sw ), m_q_flag( false ), m_o_flag( false ), m_observer( observer_ ) { SC_FXNUM_OBSERVER_DEFAULT_ SC_FXNUM_OBSERVER_CONSTRUCT_( *this ) } #define DEFN_CTOR_T(tp,arg) \ inline \ sc_fxnum::sc_fxnum( tp a, \ const sc_fxtype_params& type_params_, \ sc_enc enc_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : m_rep( new scfx_rep( arg ) ), \ m_params( type_params_, enc_, cast_sw ), \ m_q_flag( false ), \ m_o_flag( false ), \ m_observer( observer_ ) \ { \ SC_FXNUM_OBSERVER_DEFAULT_ \ cast(); \ SC_FXNUM_OBSERVER_CONSTRUCT_( *this ) \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ } #define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,a) #define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,*a.m_rep) #define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) #define DEFN_CTOR_T_D(tp) DEFN_CTOR_T(tp,a.value()) DEFN_CTOR_T_A(int) DEFN_CTOR_T_A(unsigned int) DEFN_CTOR_T_A(long) DEFN_CTOR_T_A(unsigned long) DEFN_CTOR_T_A(float) DEFN_CTOR_T_A(double) DEFN_CTOR_T_A(const char*) DEFN_CTOR_T_B(const sc_fxval&) DEFN_CTOR_T_C(const sc_fxval_fast&) DEFN_CTOR_T_B(const sc_fxnum&) DEFN_CTOR_T_C(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTOR_T_A(int64) DEFN_CTOR_T_A(uint64) DEFN_CTOR_T_D(const sc_int_base&) DEFN_CTOR_T_D(const sc_uint_base&) DEFN_CTOR_T_A(const sc_signed&) DEFN_CTOR_T_A(const sc_unsigned&) #endif #undef DEFN_CTOR_T #undef DEFN_CTOR_T_A #undef DEFN_CTOR_T_B #undef DEFN_CTOR_T_C #undef DEFN_CTOR_T_D inline sc_fxnum::~sc_fxnum() { SC_FXNUM_OBSERVER_DESTRUCT_( *this ) delete m_rep; } // internal use only; inline const scfx_rep* sc_fxnum::get_rep() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep; } // unary operators inline const sc_fxval sc_fxnum::operator - () const { SC_FXNUM_OBSERVER_READ_( *this ) return sc_fxval( sc_dt::neg_scfx_rep( *m_rep ) ); } inline const sc_fxval sc_fxnum::operator + () const { SC_FXNUM_OBSERVER_READ_( *this ) return sc_fxval( new scfx_rep( *m_rep ) ); } // unary functions inline void neg( sc_fxval& c, const sc_fxnum& a ) { SC_FXNUM_OBSERVER_READ_( a ) c.set_rep( sc_dt::neg_scfx_rep( *a.m_rep ) ); } inline void neg( sc_fxnum& c, const sc_fxnum& a ) { SC_FXNUM_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::neg_scfx_rep( *a.m_rep ); c.cast(); SC_FXNUM_OBSERVER_WRITE_( c ) } // binary operators #define DEFN_BIN_OP_T(op,fnc,tp) \ inline \ const sc_fxval \ operator op ( const sc_fxnum& a, tp b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ) ); \ } \ \ inline \ const sc_fxval \ operator op ( tp a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ) ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_OP_OTHER(op,fnc) \ DEFN_BIN_OP_T(op,fnc,int64) \ DEFN_BIN_OP_T(op,fnc,uint64) \ DEFN_BIN_OP_T(op,fnc,const sc_int_base&) \ DEFN_BIN_OP_T(op,fnc,const sc_uint_base&) \ DEFN_BIN_OP_T(op,fnc,const sc_signed&) \ DEFN_BIN_OP_T(op,fnc,const sc_unsigned&) #else #define DEFN_BIN_OP_OTHER(op,fnc) #endif #define DEFN_BIN_OP(op,fnc) \ inline \ const sc_fxval \ operator op ( const sc_fxnum& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ SC_FXNUM_OBSERVER_READ_( b ) \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ } \ \ inline \ const sc_fxval \ operator op ( const sc_fxnum& a, const sc_fxval& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ) ); \ } \ \ inline \ const sc_fxval \ operator op ( const sc_fxval& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ) ); \ } \ \ DEFN_BIN_OP_T(op,fnc,int) \ DEFN_BIN_OP_T(op,fnc,unsigned int) \ DEFN_BIN_OP_T(op,fnc,long) \ DEFN_BIN_OP_T(op,fnc,unsigned long) \ DEFN_BIN_OP_T(op,fnc,float) \ DEFN_BIN_OP_T(op,fnc,double) \ DEFN_BIN_OP_T(op,fnc,const char*) \ DEFN_BIN_OP_T(op,fnc,const sc_fxval_fast&) \ DEFN_BIN_OP_T(op,fnc,const sc_fxnum_fast&) \ DEFN_BIN_OP_OTHER(op,fnc) DEFN_BIN_OP(*,mult) DEFN_BIN_OP(+,add) DEFN_BIN_OP(-,sub) // don't use macros //DEFN_BIN_OP(/,div) inline const sc_fxval operator / ( const sc_fxnum& a, const sc_fxnum& b ) { SC_FXNUM_OBSERVER_READ_( a ) SC_FXNUM_OBSERVER_READ_( b ) return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.m_rep ) ); } inline const sc_fxval operator / ( const sc_fxnum& a, const sc_fxval& b ) { SC_FXNUM_OBSERVER_READ_( a ) return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.get_rep() ) ); } inline const sc_fxval operator / ( const sc_fxval& a, const sc_fxnum& b ) { SC_FXNUM_OBSERVER_READ_( b ) return sc_fxval( sc_dt::div_scfx_rep( *a.get_rep(), *b.m_rep ) ); } DEFN_BIN_OP_T(/,div,int) DEFN_BIN_OP_T(/,div,unsigned int) DEFN_BIN_OP_T(/,div,long) DEFN_BIN_OP_T(/,div,unsigned long) DEFN_BIN_OP_T(/,div,float) DEFN_BIN_OP_T(/,div,double) DEFN_BIN_OP_T(/,div,const char*) DEFN_BIN_OP_T(/,div,const sc_fxval_fast&) DEFN_BIN_OP_T(/,div,const sc_fxnum_fast&) //DEFN_BIN_OP_OTHER(/,div) #ifndef SC_FX_EXCLUDE_OTHER DEFN_BIN_OP_T(/,div,int64) DEFN_BIN_OP_T(/,div,uint64) DEFN_BIN_OP_T(/,div,const sc_int_base&) DEFN_BIN_OP_T(/,div,const sc_uint_base&) DEFN_BIN_OP_T(/,div,const sc_signed&) DEFN_BIN_OP_T(/,div,const sc_unsigned&) #endif #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP_OTHER #undef DEFN_BIN_OP inline const sc_fxval operator << ( const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) return sc_fxval( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); } inline const sc_fxval operator >> ( const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) return sc_fxval( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); } // binary functions #define DEFN_BIN_FNC_T(fnc,tp) \ inline \ void \ fnc ( sc_fxval& c, const sc_fxnum& a, tp b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ) ); \ } \ \ inline \ void \ fnc ( sc_fxval& c, tp a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ c.set_rep( sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ) ); \ } \ \ inline \ void \ fnc ( sc_fxnum& c, const sc_fxnum& a, tp b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.get_rep() ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxnum& c, tp a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.get_rep(), *b.m_rep ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_FNC_OTHER(fnc) \ DEFN_BIN_FNC_T(fnc,int64) \ DEFN_BIN_FNC_T(fnc,uint64) \ DEFN_BIN_FNC_T(fnc,const sc_int_base&) \ DEFN_BIN_FNC_T(fnc,const sc_uint_base&) \ DEFN_BIN_FNC_T(fnc,const sc_signed&) \ DEFN_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DEFN_BIN_FNC_OTHER(fnc) #endif #define DEFN_BIN_FNC(fnc) \ inline \ void \ fnc ( sc_fxval& c, const sc_fxnum& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ SC_FXNUM_OBSERVER_READ_( b ) \ c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ } \ \ inline \ void \ fnc ( sc_fxnum& c, const sc_fxnum& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ SC_FXNUM_OBSERVER_READ_( b ) \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval& c, const sc_fxnum& a, const sc_fxval& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ c.set_rep( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ) ); \ } \ \ inline \ void \ fnc ( sc_fxval& c, const sc_fxval& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ c.set_rep( sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ) ); \ } \ \ inline \ void \ fnc ( sc_fxnum& c, const sc_fxnum& a, const sc_fxval& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.get_rep() ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxnum& c, const sc_fxval& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.get_rep(), *b.m_rep ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } \ \ DEFN_BIN_FNC_T(fnc,int) \ DEFN_BIN_FNC_T(fnc,unsigned int) \ DEFN_BIN_FNC_T(fnc,long) \ DEFN_BIN_FNC_T(fnc,unsigned long) \ DEFN_BIN_FNC_T(fnc,float) \ DEFN_BIN_FNC_T(fnc,double) \ DEFN_BIN_FNC_T(fnc,const char*) \ DEFN_BIN_FNC_T(fnc,const sc_fxval_fast&) \ DEFN_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ DEFN_BIN_FNC_OTHER(fnc) DEFN_BIN_FNC(mult) DEFN_BIN_FNC(div) DEFN_BIN_FNC(add) DEFN_BIN_FNC(sub) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC_OTHER #undef DEFN_BIN_FNC inline void lshift( sc_fxval& c, const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) c.set_rep( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); } inline void rshift( sc_fxval& c, const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) c.set_rep( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); } inline void lshift( sc_fxnum& c, const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::lsh_scfx_rep( *a.m_rep, b ); c.cast(); SC_FXNUM_OBSERVER_WRITE_( c ) } inline void rshift( sc_fxnum& c, const sc_fxnum& a, int b ) { SC_FXNUM_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::rsh_scfx_rep( *a.m_rep, b ); c.cast(); SC_FXNUM_OBSERVER_WRITE_( c ) } // relational (including equality) operators #define DEFN_REL_OP_T(op,ret,tp) \ inline \ bool \ operator op ( const sc_fxnum& a, tp b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.get_rep() ); \ return ( ret ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ int result = sc_dt::cmp_scfx_rep( *tmp.get_rep(), *b.m_rep ); \ return ( ret ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_REL_OP_OTHER(op,ret) \ DEFN_REL_OP_T(op,ret,int64) \ DEFN_REL_OP_T(op,ret,uint64) \ DEFN_REL_OP_T(op,ret,const sc_int_base&) \ DEFN_REL_OP_T(op,ret,const sc_uint_base&) \ DEFN_REL_OP_T(op,ret,const sc_signed&) \ DEFN_REL_OP_T(op,ret,const sc_unsigned&) #else #define DEFN_REL_OP_OTHER(op,ret) #endif #define DEFN_REL_OP(op,ret) \ inline \ bool \ operator op ( const sc_fxnum& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ SC_FXNUM_OBSERVER_READ_( b ) \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.m_rep ); \ return ( ret ); \ } \ \ inline \ bool \ operator op ( const sc_fxnum& a, const sc_fxval& b ) \ { \ SC_FXNUM_OBSERVER_READ_( a ) \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.get_rep() ); \ return ( ret ); \ } \ \ inline \ bool \ operator op ( const sc_fxval& a, const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( b ) \ int result = sc_dt::cmp_scfx_rep( *a.get_rep(), *b.m_rep ); \ return ( ret ); \ } \ \ DEFN_REL_OP_T(op,ret,int) \ DEFN_REL_OP_T(op,ret,unsigned int) \ DEFN_REL_OP_T(op,ret,long) \ DEFN_REL_OP_T(op,ret,unsigned long) \ DEFN_REL_OP_T(op,ret,float) \ DEFN_REL_OP_T(op,ret,double) \ DEFN_REL_OP_T(op,ret,const char*) \ DEFN_REL_OP_T(op,ret,const sc_fxval_fast&) \ DEFN_REL_OP_T(op,ret,const sc_fxnum_fast&) \ DEFN_REL_OP_OTHER(op,ret) DEFN_REL_OP(<,result < 0) DEFN_REL_OP(<=,result <= 0) DEFN_REL_OP(>,result > 0 && result != 2) DEFN_REL_OP(>=,result >= 0 && result != 2) DEFN_REL_OP(==,result == 0) DEFN_REL_OP(!=,result != 0) #undef DEFN_REL_OP_T #undef DEFN_REL_OP_OTHER #undef DEFN_REL_OP // assignment operators inline sc_fxnum& sc_fxnum::operator = ( const sc_fxnum& a ) { if( &a != this ) { SC_FXNUM_OBSERVER_READ_( a ) *m_rep = *a.m_rep; cast(); SC_FXNUM_OBSERVER_WRITE_( *this ) } return *this; } inline sc_fxnum& sc_fxnum::operator = ( const sc_fxval& a ) { *m_rep = *a.get_rep(); cast(); SC_FXNUM_OBSERVER_WRITE_( *this ) return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxnum& \ sc_fxnum::operator = ( tp a ) \ { \ sc_fxval tmp( a ); \ *m_rep = *tmp.get_rep(); \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(float) DEFN_ASN_OP_T(double) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const sc_fxval_fast&) DEFN_ASN_OP_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) #endif #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,fnc,tp) \ inline \ sc_fxnum& \ sc_fxnum::operator op ( tp b ) \ { \ SC_FXNUM_OBSERVER_READ_( *this ) \ sc_fxval tmp( b ); \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.get_rep() ); \ delete m_rep; \ m_rep = new_rep; \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op,fnc) \ DEFN_ASN_OP_T(op,fnc,int64) \ DEFN_ASN_OP_T(op,fnc,uint64) \ DEFN_ASN_OP_T(op,fnc,const sc_int_base&) \ DEFN_ASN_OP_T(op,fnc,const sc_uint_base&) \ DEFN_ASN_OP_T(op,fnc,const sc_signed&) \ DEFN_ASN_OP_T(op,fnc,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op,fnc) #endif #define DEFN_ASN_OP(op,fnc) \ inline \ sc_fxnum& \ sc_fxnum::operator op ( const sc_fxnum& b ) \ { \ SC_FXNUM_OBSERVER_READ_( *this ) \ SC_FXNUM_OBSERVER_READ_( b ) \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.m_rep ); \ delete m_rep; \ m_rep = new_rep; \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ inline \ sc_fxnum& \ sc_fxnum::operator op ( const sc_fxval& b ) \ { \ SC_FXNUM_OBSERVER_READ_( *this ) \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.get_rep() ); \ delete m_rep; \ m_rep = new_rep; \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,fnc,int) \ DEFN_ASN_OP_T(op,fnc,unsigned int) \ DEFN_ASN_OP_T(op,fnc,long) \ DEFN_ASN_OP_T(op,fnc,unsigned long) \ DEFN_ASN_OP_T(op,fnc,float) \ DEFN_ASN_OP_T(op,fnc,double) \ DEFN_ASN_OP_T(op,fnc,const char*) \ DEFN_ASN_OP_T(op,fnc,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,fnc,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op,fnc) DEFN_ASN_OP(*=,mult) DEFN_ASN_OP(/=,div) DEFN_ASN_OP(+=,add) DEFN_ASN_OP(-=,sub) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP inline sc_fxnum& sc_fxnum::operator <<= ( int b ) { SC_FXNUM_OBSERVER_READ_( *this ) m_rep->lshift( b ); cast(); SC_FXNUM_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxnum& sc_fxnum::operator >>= ( int b ) { SC_FXNUM_OBSERVER_READ_( *this ) m_rep->rshift( b ); cast(); SC_FXNUM_OBSERVER_WRITE_( *this ) return *this; } // auto-increment and auto-decrement inline const sc_fxval sc_fxnum::operator ++ ( int ) { sc_fxval c( *this ); (*this) += 1; return c; } inline const sc_fxval sc_fxnum::operator -- ( int ) { sc_fxval c( *this ); (*this) -= 1; return c; } inline sc_fxnum& sc_fxnum::operator ++ () { (*this) += 1; return *this; } inline sc_fxnum& sc_fxnum::operator -- () { (*this) -= 1; return *this; } // bit selection inline sc_fxnum_bitref_r sc_fxnum::operator [] ( int i ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_bitref_r( const_cast( *this ), i - m_params.fwl() ); } inline sc_fxnum_bitref sc_fxnum::operator [] ( int i ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_bitref( *this, i - m_params.fwl() ); } inline sc_fxnum_bitref_r sc_fxnum::bit( int i ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_bitref_r( const_cast( *this ), i - m_params.fwl() ); } inline sc_fxnum_bitref sc_fxnum::bit( int i ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_bitref( *this, i - m_params.fwl() ); } // part selection inline sc_fxnum_subref_r sc_fxnum::operator () ( int i, int j ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_subref_r( const_cast( *this ), i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_subref sc_fxnum::operator () ( int i, int j ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_subref_r sc_fxnum::range( int i, int j ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_subref_r( const_cast( *this ), i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_subref sc_fxnum::range( int i, int j ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_subref_r sc_fxnum::operator () () const { return this->operator () ( m_params.wl() - 1, 0 ); } inline sc_fxnum_subref sc_fxnum::operator () () { return this->operator () ( m_params.wl() - 1, 0 ); } inline sc_fxnum_subref_r sc_fxnum::range() const { return this->range( m_params.wl() - 1, 0 ); } inline sc_fxnum_subref sc_fxnum::range() { return this->range( m_params.wl() - 1, 0 ); } // implicit conversion inline sc_fxnum::operator double() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->to_double(); } // explicit conversion to primitive types inline short sc_fxnum::to_short() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned short sc_fxnum::to_ushort() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline int sc_fxnum::to_int() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline int64 sc_fxnum::to_int64() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned int sc_fxnum::to_uint() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline uint64 sc_fxnum::to_uint64() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->to_uint64(); } inline long sc_fxnum::to_long() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned long sc_fxnum::to_ulong() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline float sc_fxnum::to_float() const { SC_FXNUM_OBSERVER_READ_( *this ) return static_cast( m_rep->to_double() ); } inline double sc_fxnum::to_double() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->to_double(); } // query value inline bool sc_fxnum::is_neg() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->is_neg(); } inline bool sc_fxnum::is_zero() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->is_zero(); } // internal use only; inline bool sc_fxnum::is_normal() const { SC_FXNUM_OBSERVER_READ_( *this ) return m_rep->is_normal(); } inline bool sc_fxnum::quantization_flag() const { return m_q_flag; } inline bool sc_fxnum::overflow_flag() const { return m_o_flag; } inline const sc_fxval sc_fxnum::value() const { SC_FXNUM_OBSERVER_READ_( *this ) return sc_fxval( new scfx_rep( *m_rep ) ); } // query parameters inline int sc_fxnum::wl() const { return m_params.wl(); } inline int sc_fxnum::iwl() const { return m_params.iwl(); } inline sc_q_mode sc_fxnum::q_mode() const { return m_params.q_mode(); } inline sc_o_mode sc_fxnum::o_mode() const { return m_params.o_mode(); } inline int sc_fxnum::n_bits() const { return m_params.n_bits(); } inline const sc_fxtype_params& sc_fxnum::type_params() const { return m_params.type_params(); } inline const sc_fxcast_switch& sc_fxnum::cast_switch() const { return m_params.cast_switch(); } // internal use only; inline void sc_fxnum::observer_read() const { SC_FXNUM_OBSERVER_READ_( *this ); } // internal use only; inline bool sc_fxnum::get_bit( int i ) const { return m_rep->get_bit( i ); } // protected methods and friend functions inline bool sc_fxnum::set_bit( int i, bool high ) { if( high ) return m_rep->set( i, m_params ); else return m_rep->clear( i, m_params ); } inline bool sc_fxnum::get_slice( int i, int j, sc_bv_base& bv ) const { return m_rep->get_slice( i, j, m_params, bv ); } inline bool sc_fxnum::set_slice( int i, int j, const sc_bv_base& bv ) { return m_rep->set_slice( i, j, m_params, bv ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxnum_fast // // Base class for the fixed-point types; limited precision. // ---------------------------------------------------------------------------- inline sc_fxnum_fast_observer* sc_fxnum_fast::observer() const { return m_observer; } // constructors inline sc_fxnum_fast::sc_fxnum_fast( const sc_fxtype_params& type_params_, sc_enc enc_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : m_val( 0.0 ), m_params( type_params_, enc_, cast_sw ), m_q_flag( false ), m_o_flag( false ), m_observer( observer_ ) { SC_FXNUM_FAST_OBSERVER_DEFAULT_ SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(*this) } inline sc_fxnum_fast::sc_fxnum_fast( const sc_fxnum_fast& a, const sc_fxtype_params& type_params_, sc_enc enc_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : m_val( a.m_val ), m_params( type_params_, enc_, cast_sw ), m_q_flag( false ), m_o_flag( false ), m_observer( observer_ ) { SC_FXNUM_FAST_OBSERVER_DEFAULT_ SC_FXNUM_FAST_OBSERVER_READ_( a ) cast(); SC_FXNUM_FAST_OBSERVER_CONSTRUCT_( *this ) SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) } #define DEFN_CTOR_T(tp,arg) \ inline \ sc_fxnum_fast::sc_fxnum_fast( tp a, \ const sc_fxtype_params& type_params_, \ sc_enc enc_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : m_val( arg ), \ m_params( type_params_, enc_, cast_sw ), \ m_q_flag( false ), \ m_o_flag( false ), \ m_observer( observer_ ) \ { \ SC_FXNUM_FAST_OBSERVER_DEFAULT_ \ cast(); \ SC_FXNUM_FAST_OBSERVER_CONSTRUCT_(*this) \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ } #define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,static_cast( a )) #define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,sc_fxval_fast::from_string( a )) #define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) DEFN_CTOR_T_A(int) DEFN_CTOR_T_A(unsigned int) DEFN_CTOR_T_A(long) DEFN_CTOR_T_A(unsigned long) DEFN_CTOR_T_A(float) DEFN_CTOR_T_A(double) DEFN_CTOR_T_B(const char*) DEFN_CTOR_T_C(const sc_fxval&) DEFN_CTOR_T_C(const sc_fxval_fast&) DEFN_CTOR_T_C(const sc_fxnum&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTOR_T_A(int64) DEFN_CTOR_T_A(uint64) DEFN_CTOR_T_C(const sc_int_base&) DEFN_CTOR_T_C(const sc_uint_base&) DEFN_CTOR_T_C(const sc_signed&) DEFN_CTOR_T_C(const sc_unsigned&) #endif #undef DEFN_CTOR_T #undef DEFN_CTOR_T_A #undef DEFN_CTOR_T_B #undef DEFN_CTOR_T_C #undef DEFN_CTOR_T_D #undef DEFN_CTOR_T_E inline sc_fxnum_fast::~sc_fxnum_fast() { SC_FXNUM_FAST_OBSERVER_DESTRUCT_( *this ) } // internal use only; inline double sc_fxnum_fast::get_val() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return m_val; } // unary operators inline const sc_fxval_fast sc_fxnum_fast::operator - () const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return sc_fxval_fast( - m_val ); } inline const sc_fxval_fast sc_fxnum_fast::operator + () const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return sc_fxval_fast( m_val ); } // unary functions inline void neg( sc_fxval_fast& c, const sc_fxnum_fast& a ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.set_val( - a.m_val ); } inline void neg( sc_fxnum_fast& c, const sc_fxnum_fast& a ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.m_val = - a.m_val; c.cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( c ) } // binary operators #define DEFN_BIN_OP_T(op,tp) \ inline \ const sc_fxval_fast \ operator op ( const sc_fxnum_fast& a, tp b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ return sc_fxval_fast( a.m_val op tmp.get_val() ); \ } \ \ inline \ const sc_fxval_fast \ operator op ( tp a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ return sc_fxval_fast( tmp.get_val() op b.m_val ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_OP_OTHER(op) \ DEFN_BIN_OP_T(op,int64) \ DEFN_BIN_OP_T(op,uint64) \ DEFN_BIN_OP_T(op,const sc_int_base&) \ DEFN_BIN_OP_T(op,const sc_uint_base&) \ DEFN_BIN_OP_T(op,const sc_signed&) \ DEFN_BIN_OP_T(op,const sc_unsigned&) #else #define DEFN_BIN_OP_OTHER(op) #endif #define DEFN_BIN_OP(op,dummy) \ inline \ const sc_fxval_fast \ operator op ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ return sc_fxval_fast( a.m_val op b.m_val ); \ } \ \ inline \ const sc_fxval_fast \ operator op ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ return sc_fxval_fast( a.m_val op b.get_val() ); \ } \ \ inline \ const sc_fxval_fast \ operator op ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ return sc_fxval_fast( a.get_val() op b.m_val ); \ } \ \ DEFN_BIN_OP_T(op,int) \ DEFN_BIN_OP_T(op,unsigned int) \ DEFN_BIN_OP_T(op,long) \ DEFN_BIN_OP_T(op,unsigned long) \ DEFN_BIN_OP_T(op,float) \ DEFN_BIN_OP_T(op,double) \ DEFN_BIN_OP_T(op,const char*) \ DEFN_BIN_OP_OTHER(op) DEFN_BIN_OP(*,mult) DEFN_BIN_OP(+,add) DEFN_BIN_OP(-,sub) //DEFN_BIN_OP(/,div) inline const sc_fxval_fast operator / ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) SC_FXNUM_FAST_OBSERVER_READ_( b ) return sc_fxval_fast( a.m_val / b.m_val ); } inline const sc_fxval_fast operator / ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) return sc_fxval_fast( a.m_val / b.get_val() ); } inline const sc_fxval_fast operator / ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) { SC_FXNUM_FAST_OBSERVER_READ_( b ) return sc_fxval_fast( a.get_val() / b.m_val ); } DEFN_BIN_OP_T(/,int) DEFN_BIN_OP_T(/,unsigned int) DEFN_BIN_OP_T(/,long) DEFN_BIN_OP_T(/,unsigned long) DEFN_BIN_OP_T(/,float) DEFN_BIN_OP_T(/,double) DEFN_BIN_OP_T(/,const char*) //DEFN_BIN_OP_OTHER(/) #ifndef SC_FX_EXCLUDE_OTHER DEFN_BIN_OP_T(/,int64) DEFN_BIN_OP_T(/,uint64) DEFN_BIN_OP_T(/,const sc_int_base&) DEFN_BIN_OP_T(/,const sc_uint_base&) DEFN_BIN_OP_T(/,const sc_signed&) DEFN_BIN_OP_T(/,const sc_unsigned&) #endif #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP_OTHER #undef DEFN_BIN_OP inline const sc_fxval_fast operator << ( const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) return sc_fxval_fast( a.m_val * scfx_pow2( b ) ); } inline const sc_fxval_fast operator >> ( const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) return sc_fxval_fast( a.m_val * scfx_pow2( -b ) ); } // binary functions #define DEFN_BIN_FNC_T(fnc,op,tp) \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, tp b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ c.set_val( a.m_val op tmp.get_val() ); \ } \ \ inline \ void \ fnc ( sc_fxval_fast& c, tp a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ c.set_val( tmp.get_val() op b.m_val ); \ } \ \ inline \ void \ fnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, tp b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ c.m_val = a.m_val op tmp.get_val(); \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxnum_fast& c, tp a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ c.m_val = tmp.get_val() op b.m_val; \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_FNC_OTHER(fnc,op) \ DEFN_BIN_FNC_T(fnc,op,int64) \ DEFN_BIN_FNC_T(fnc,op,uint64) \ DEFN_BIN_FNC_T(fnc,op,const sc_int_base&) \ DEFN_BIN_FNC_T(fnc,op,const sc_uint_base&) \ DEFN_BIN_FNC_T(fnc,op,const sc_signed&) \ DEFN_BIN_FNC_T(fnc,op,const sc_unsigned&) #else #define DEFN_BIN_FNC_OTHER(fnc,op) #endif #define DEFN_BIN_FNC(fnc,op) \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ c.set_val( a.m_val op b.m_val ); \ } \ \ inline \ void \ fnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ c.m_val = a.m_val op b.m_val; \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ c.set_val( a.m_val op b.get_val() ); \ } \ \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ c.set_val( a.get_val() op b.m_val ); \ } \ \ inline \ void \ fnc ( sc_fxnum_fast& c, const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ c.m_val = a.m_val op b.get_val(); \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxnum_fast& c, const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ c.m_val = a.get_val() op b.m_val; \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } \ \ DEFN_BIN_FNC_T(fnc,op,int) \ DEFN_BIN_FNC_T(fnc,op,unsigned int) \ DEFN_BIN_FNC_T(fnc,op,long) \ DEFN_BIN_FNC_T(fnc,op,unsigned long) \ DEFN_BIN_FNC_T(fnc,op,float) \ DEFN_BIN_FNC_T(fnc,op,double) \ DEFN_BIN_FNC_T(fnc,op,const char*) \ DEFN_BIN_FNC_T(fnc,op,const sc_fxval&) \ DEFN_BIN_FNC_T(fnc,op,const sc_fxnum&) \ DEFN_BIN_FNC_OTHER(fnc,op) DEFN_BIN_FNC(mult,*) DEFN_BIN_FNC(div,/) DEFN_BIN_FNC(add,+) DEFN_BIN_FNC(sub,-) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC_OTHER #undef DEFN_BIN_FNC inline void lshift( sc_fxval_fast& c, const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.set_val( a.m_val * scfx_pow2( b ) ); } inline void rshift( sc_fxval_fast& c, const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.set_val( a.m_val * scfx_pow2( -b ) ); } inline void lshift( sc_fxnum_fast& c, const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.m_val = a.m_val * scfx_pow2( b ); c.cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( c ) } inline void rshift( sc_fxnum_fast& c, const sc_fxnum_fast& a, int b ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) c.m_val = a.m_val * scfx_pow2( -b ); c.cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( c ) } // relational (including equality) operators #define DEFN_REL_OP_T(op,tp) \ inline \ bool \ operator op ( const sc_fxnum_fast& a, tp b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ return ( a.m_val op tmp.get_val() ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ return ( tmp.get_val() op b.m_val ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_REL_OP_OTHER(op) \ DEFN_REL_OP_T(op,int64) \ DEFN_REL_OP_T(op,uint64) \ DEFN_REL_OP_T(op,const sc_int_base&) \ DEFN_REL_OP_T(op,const sc_uint_base&) \ DEFN_REL_OP_T(op,const sc_signed&) \ DEFN_REL_OP_T(op,const sc_unsigned&) #else #define DEFN_REL_OP_OTHER(op) #endif #define DEFN_REL_OP(op) \ inline \ bool \ operator op ( const sc_fxnum_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ return ( a.m_val op b.m_val ); \ } \ \ inline \ bool \ operator op ( const sc_fxnum_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( a ) \ return ( a.m_val op b.get_val() ); \ } \ \ inline \ bool \ operator op ( const sc_fxval_fast& a, const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ return ( a.get_val() op b.m_val ); \ } \ \ DEFN_REL_OP_T(op,int) \ DEFN_REL_OP_T(op,unsigned int) \ DEFN_REL_OP_T(op,long) \ DEFN_REL_OP_T(op,unsigned long) \ DEFN_REL_OP_T(op,float) \ DEFN_REL_OP_T(op,double) \ DEFN_REL_OP_T(op,const char*) \ DEFN_REL_OP_OTHER(op) DEFN_REL_OP(<) DEFN_REL_OP(<=) DEFN_REL_OP(>) DEFN_REL_OP(>=) DEFN_REL_OP(==) DEFN_REL_OP(!=) #undef DEFN_REL_OP_T #undef DEFN_REL_OP_OTHER #undef DEFN_REL_OP // assignment operators inline sc_fxnum_fast& sc_fxnum_fast::operator = ( const sc_fxnum_fast& a ) { if( &a != this ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) m_val = a.m_val; cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) } return *this; } inline sc_fxnum_fast& sc_fxnum_fast::operator = ( const sc_fxval_fast& a ) { m_val = a.get_val(); cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxnum_fast& \ sc_fxnum_fast::operator = ( tp a ) \ { \ sc_fxval_fast tmp( a ); \ m_val = tmp.get_val(); \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(float) DEFN_ASN_OP_T(double) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const sc_fxval&) DEFN_ASN_OP_T(const sc_fxnum&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) #endif #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fxnum_fast& \ sc_fxnum_fast::operator op ( tp b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ sc_fxval_fast tmp( b ); \ m_val op tmp.get_val(); \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ inline \ sc_fxnum_fast& \ sc_fxnum_fast::operator op ( const sc_fxnum_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ SC_FXNUM_FAST_OBSERVER_READ_( b ) \ m_val op b.m_val; \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ inline \ sc_fxnum_fast& \ sc_fxnum_fast::operator op ( const sc_fxval_fast& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ m_val op b.get_val(); \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP inline sc_fxnum_fast& sc_fxnum_fast::operator <<= ( int b ) { SC_FXNUM_FAST_OBSERVER_READ_( *this ) m_val *= scfx_pow2( b ); cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxnum_fast& sc_fxnum_fast::operator >>= ( int b ) { SC_FXNUM_FAST_OBSERVER_READ_( *this ) m_val *= scfx_pow2( -b ); cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return *this; } // auto-increment and auto-decrement inline const sc_fxval_fast sc_fxnum_fast::operator ++ ( int ) { SC_FXNUM_FAST_OBSERVER_READ_( *this ) SC_FXNUM_FAST_OBSERVER_READ_( *this ) double c = m_val; m_val = m_val + 1; cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return sc_fxval_fast( c ); } inline const sc_fxval_fast sc_fxnum_fast::operator -- ( int ) { SC_FXNUM_FAST_OBSERVER_READ_( *this ) SC_FXNUM_FAST_OBSERVER_READ_( *this ) double c = m_val; m_val = m_val - 1; cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return sc_fxval_fast( c ); } inline sc_fxnum_fast& sc_fxnum_fast::operator ++ () { SC_FXNUM_FAST_OBSERVER_READ_( *this ) m_val = m_val + 1; cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxnum_fast& sc_fxnum_fast::operator -- () { SC_FXNUM_FAST_OBSERVER_READ_( *this ) m_val = m_val - 1; cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) return *this; } // bit selection inline sc_fxnum_fast_bitref_r sc_fxnum_fast::operator [] ( int i ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_bitref_r( const_cast( *this ), i - m_params.fwl() ); } inline sc_fxnum_fast_bitref sc_fxnum_fast::operator [] ( int i ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_bitref( *this, i - m_params.fwl() ); } inline sc_fxnum_fast_bitref_r sc_fxnum_fast::bit( int i ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_bitref_r( const_cast( *this ), i - m_params.fwl() ); } inline sc_fxnum_fast_bitref sc_fxnum_fast::bit( int i ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_bitref( *this, i - m_params.fwl() ); } // part selection inline sc_fxnum_fast_subref_r sc_fxnum_fast::operator () ( int i, int j ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_subref_r( const_cast( *this ), i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_fast_subref sc_fxnum_fast::operator () ( int i, int j ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_fast_subref_r sc_fxnum_fast::range( int i, int j ) const { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_subref_r( const_cast( *this ), i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_fast_subref sc_fxnum_fast::range( int i, int j ) { SC_ERROR_IF_( i < 0 || i >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); SC_ERROR_IF_( j < 0 || j >= m_params.wl(), sc_core::SC_ID_OUT_OF_RANGE_ ); return sc_fxnum_fast_subref( *this, i - m_params.fwl(), j - m_params.fwl() ); } inline sc_fxnum_fast_subref_r sc_fxnum_fast::operator () () const { return this->operator () ( m_params.wl() - 1, 0 ); } inline sc_fxnum_fast_subref sc_fxnum_fast::operator () () { return this->operator () ( m_params.wl() - 1, 0 ); } inline sc_fxnum_fast_subref_r sc_fxnum_fast::range() const { return this->range( m_params.wl() - 1, 0 ); } inline sc_fxnum_fast_subref sc_fxnum_fast::range() { return this->range( m_params.wl() - 1, 0 ); } // implicit conversion inline sc_fxnum_fast::operator double() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return m_val; } // explicit conversion to primitive types inline short sc_fxnum_fast::to_short() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned short sc_fxnum_fast::to_ushort() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline int sc_fxnum_fast::to_int() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline int64 sc_fxnum_fast::to_int64() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned int sc_fxnum_fast::to_uint() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline uint64 sc_fxnum_fast::to_uint64() const { // SC_FXNUM_FAST_OBSERVER_READ_ in is_normal if (!is_normal()) { return 0; } int exponent; double mantissa_dbl = frexp(m_val, &exponent); uint64 mantissa = static_cast(fabs(mantissa_dbl) * (UINT64_ONE << 53)); exponent -= 53; if (!(-64 < exponent && exponent < 64)) { return 0; } mantissa = exponent >= 0 ? mantissa << exponent : mantissa >> -exponent; return mantissa_dbl >= 0 ? mantissa : -mantissa; } inline long sc_fxnum_fast::to_long() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned long sc_fxnum_fast::to_ulong() const { // SC_FXNUM_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline float sc_fxnum_fast::to_float() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return static_cast( m_val ); } inline double sc_fxnum_fast::to_double() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return m_val; } // query value inline bool sc_fxnum_fast::is_neg() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return ( id.negative() != 0 ); } inline bool sc_fxnum_fast::is_zero() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return id.is_zero(); } // internal use only; inline bool sc_fxnum_fast::is_normal() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return ( id.is_normal() || id.is_subnormal() || id.is_zero() ); } inline bool sc_fxnum_fast::quantization_flag() const { return m_q_flag; } inline bool sc_fxnum_fast::overflow_flag() const { return m_o_flag; } inline const sc_fxval_fast sc_fxnum_fast::value() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) return sc_fxval_fast( m_val ); } // query parameters inline int sc_fxnum_fast::wl() const { return m_params.wl(); } inline int sc_fxnum_fast::iwl() const { return m_params.iwl(); } inline sc_q_mode sc_fxnum_fast::q_mode() const { return m_params.q_mode(); } inline sc_o_mode sc_fxnum_fast::o_mode() const { return m_params.o_mode(); } inline int sc_fxnum_fast::n_bits() const { return m_params.n_bits(); } inline const sc_fxtype_params& sc_fxnum_fast::type_params() const { return m_params.type_params(); } inline const sc_fxcast_switch& sc_fxnum_fast::cast_switch() const { return m_params.cast_switch(); } // internal use only; inline void sc_fxnum_fast::observer_read() const { SC_FXNUM_FAST_OBSERVER_READ_( *this ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxnum_fast& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxnum_fast& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxval // // Fixed-point value type; arbitrary precision. // ---------------------------------------------------------------------------- // public constructors inline sc_fxval::sc_fxval( const sc_fxnum& a, sc_fxval_observer* observer_ ) : m_rep( new scfx_rep( *a.get_rep() ) ), m_observer( observer_ ) { SC_FXVAL_OBSERVER_DEFAULT_ SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_OBSERVER_WRITE_( *this ) } inline sc_fxval::sc_fxval( const sc_fxnum_fast& a, sc_fxval_observer* observer_ ) : m_rep( new scfx_rep( a.to_double() ) ), m_observer( observer_ ) { SC_FXVAL_OBSERVER_DEFAULT_ SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_OBSERVER_WRITE_( *this ) } // binary operators #define DEFN_BIN_OP_T(op,fnc,tp) \ inline \ const sc_fxval \ operator op ( const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ) ); \ } \ \ inline \ const sc_fxval \ operator op ( tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ) ); \ } #define DEFN_BIN_OP(op,fnc) \ DEFN_BIN_OP_T(op,fnc,const sc_fxnum_fast&) DEFN_BIN_OP(*,mult) DEFN_BIN_OP(+,add) DEFN_BIN_OP(-,sub) //DEFN_BIN_OP(/,div) DEFN_BIN_OP_T(/,div,const sc_fxnum_fast&) #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP // binary functions #define DEFN_BIN_FNC_T(fnc,tp) \ inline \ void \ fnc ( sc_fxval& c, const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ); \ SC_FXVAL_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval& c, tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ); \ SC_FXVAL_OBSERVER_WRITE_( c ) \ } #define DEFN_BIN_FNC(fnc) \ DEFN_BIN_FNC_T(fnc,const sc_fxnum_fast&) DEFN_BIN_FNC(mult) DEFN_BIN_FNC(div) DEFN_BIN_FNC(add) DEFN_BIN_FNC(sub) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC // relational (including equality) operators #define DEFN_REL_OP_T(op,ret,tp) \ inline \ bool \ operator op ( const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.m_rep ); \ return ( ret ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ int result = sc_dt::cmp_scfx_rep( *tmp.m_rep, *b.m_rep ); \ return ( ret ); \ } #define DEFN_REL_OP(op,ret) \ DEFN_REL_OP_T(op,ret,const sc_fxnum_fast&) DEFN_REL_OP(<,result < 0) DEFN_REL_OP(<=,result <= 0) DEFN_REL_OP(>,result > 0 && result != 2) DEFN_REL_OP(>=,result >= 0 && result != 2) DEFN_REL_OP(==,result == 0) DEFN_REL_OP(!=,result != 0) #undef DEFN_REL_OP_T #undef DEFN_REL_OP // assignment operators inline sc_fxval& sc_fxval::operator = ( const sc_fxnum& a ) { *m_rep = *a.get_rep(); SC_FXVAL_OBSERVER_WRITE_( *this ) return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxval& \ sc_fxval::operator = ( tp b ) \ { \ sc_fxval tmp( b ); \ *m_rep = *tmp.m_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(const sc_fxnum_fast&) #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,fnc,tp) \ inline \ sc_fxval& \ sc_fxval::operator op ( tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( *this ) \ sc_fxval tmp( b ); \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.m_rep ); \ delete m_rep; \ m_rep = new_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } #define DEFN_ASN_OP(op,fnc) \ inline \ sc_fxval& \ sc_fxval::operator op ( const sc_fxnum& b ) \ { \ SC_FXVAL_OBSERVER_READ_( *this ) \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.get_rep() ); \ delete m_rep; \ m_rep = new_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,fnc,const sc_fxnum_fast&) DEFN_ASN_OP(*=,mult) DEFN_ASN_OP(/=,div) DEFN_ASN_OP(+=,add) DEFN_ASN_OP(-=,sub) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast // // Fixed-point value types; limited precision. // ---------------------------------------------------------------------------- // public constructors inline sc_fxval_fast::sc_fxval_fast( const sc_fxnum& a, sc_fxval_fast_observer* observer_ ) : m_val( a.to_double() ), m_observer( observer_ ) { SC_FXVAL_FAST_OBSERVER_DEFAULT_ SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) } inline sc_fxval_fast::sc_fxval_fast( const sc_fxnum_fast& a, sc_fxval_fast_observer* observer_ ) : m_val( a.get_val() ), m_observer( observer_ ) { SC_FXVAL_FAST_OBSERVER_DEFAULT_ SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) } // binary functions #define DEFN_BIN_FNC_T(fnc,op,tp) \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxval_fast& a, tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ c.m_val = a.m_val op tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval_fast& c, tp a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ c.m_val = tmp.m_val op b.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ } #define DEFN_BIN_FNC(fnc,op) \ DEFN_BIN_FNC_T(fnc,op,const sc_fxval&) \ DEFN_BIN_FNC_T(fnc,op,const sc_fxnum&) DEFN_BIN_FNC(mult,*) DEFN_BIN_FNC(div,/) DEFN_BIN_FNC(add,+) DEFN_BIN_FNC(sub,-) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC // assignment operators inline sc_fxval_fast& sc_fxval_fast::operator = ( const sc_fxnum_fast& a ) { m_val = a.get_val(); SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator = ( tp a ) \ { \ sc_fxval_fast tmp( a ); \ m_val = tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(const sc_fxnum&) #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator op ( tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ sc_fxval_fast tmp( b ); \ m_val op tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } #define DEFN_ASN_OP(op) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator op ( const sc_fxnum_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ m_val op b.get_val(); \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,const sc_fxnum&) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fix.h0000644000175000017500000026106214342422106020703 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fix.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fix.h,v $ // Revision 1.2 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FIX_H #define SC_FIX_H #include "sysc/datatypes/fx/sc_fxnum.h" namespace sc_dt { // classes defined in this module class sc_fix; class sc_fix_fast; // ---------------------------------------------------------------------------- // CLASS : sc_fix // // "Unconstrained" signed fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_fix : public sc_fxnum { public: // constructors explicit sc_fix( sc_fxnum_observer* = 0 ); sc_fix( int, int, sc_fxnum_observer* = 0 ); sc_fix( sc_q_mode, sc_o_mode, sc_fxnum_observer* = 0 ); sc_fix( sc_q_mode, sc_o_mode, int, sc_fxnum_observer* = 0 ); sc_fix( int, int, sc_q_mode, sc_o_mode, sc_fxnum_observer* = 0 ); sc_fix( int, int, sc_q_mode, sc_o_mode, int, sc_fxnum_observer* = 0 ); explicit sc_fix( const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_fix( int, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_fix( sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_fix( sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_fix( int, int, sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); sc_fix( int, int, sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); explicit sc_fix( const sc_fxtype_params&, sc_fxnum_observer* = 0 ); sc_fix( const sc_fxtype_params&, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T(tp) \ sc_fix( tp, \ int, int, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ sc_q_mode, sc_o_mode, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ sc_q_mode, sc_o_mode, int, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ int, int, sc_q_mode, sc_o_mode, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ int, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ int, int, sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ const sc_fxtype_params&, \ sc_fxnum_observer* = 0 ); \ sc_fix( tp, \ const sc_fxtype_params&, \ const sc_fxcast_switch&, \ sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_fix( tp, \ sc_fxnum_observer* = 0 ); \ DECL_CTORS_T(tp) #define DECL_CTORS_T_B(tp) \ explicit sc_fix( tp, \ sc_fxnum_observer* = 0 ); \ DECL_CTORS_T(tp) DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_fix( const sc_fix& ); // unary bitwise operators const sc_fix operator ~ () const; // unary bitwise functions friend void b_not( sc_fix&, const sc_fix& ); // binary bitwise operators friend const sc_fix operator & ( const sc_fix&, const sc_fix& ); friend const sc_fix operator & ( const sc_fix&, const sc_fix_fast& ); friend const sc_fix operator & ( const sc_fix_fast&, const sc_fix& ); friend const sc_fix operator | ( const sc_fix&, const sc_fix& ); friend const sc_fix operator | ( const sc_fix&, const sc_fix_fast& ); friend const sc_fix operator | ( const sc_fix_fast&, const sc_fix& ); friend const sc_fix operator ^ ( const sc_fix&, const sc_fix& ); friend const sc_fix operator ^ ( const sc_fix&, const sc_fix_fast& ); friend const sc_fix operator ^ ( const sc_fix_fast&, const sc_fix& ); // binary bitwise functions friend void b_and( sc_fix&, const sc_fix&, const sc_fix& ); friend void b_and( sc_fix&, const sc_fix&, const sc_fix_fast& ); friend void b_and( sc_fix&, const sc_fix_fast&, const sc_fix& ); friend void b_or ( sc_fix&, const sc_fix&, const sc_fix& ); friend void b_or ( sc_fix&, const sc_fix&, const sc_fix_fast& ); friend void b_or ( sc_fix&, const sc_fix_fast&, const sc_fix& ); friend void b_xor( sc_fix&, const sc_fix&, const sc_fix& ); friend void b_xor( sc_fix&, const sc_fix&, const sc_fix_fast& ); friend void b_xor( sc_fix&, const sc_fix_fast&, const sc_fix& ); // assignment operators sc_fix& operator = ( const sc_fix& ); #define DECL_ASN_OP_T(op,tp) \ sc_fix& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_fix&) DECL_ASN_OP_T(&=,const sc_fix_fast&) DECL_ASN_OP_T(|=,const sc_fix&) DECL_ASN_OP_T(|=,const sc_fix_fast&) DECL_ASN_OP_T(^=,const sc_fix&) DECL_ASN_OP_T(^=,const sc_fix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_fix& operator ++ (); sc_fix& operator -- (); }; // ---------------------------------------------------------------------------- // CLASS : sc_fix_fast // // "Unconstrained" signed fixed-point class; limited precision. // ---------------------------------------------------------------------------- class SC_API sc_fix_fast : public sc_fxnum_fast { public: // constructors explicit sc_fix_fast( sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( sc_q_mode, sc_o_mode, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( sc_q_mode, sc_o_mode, int, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, sc_q_mode, sc_o_mode, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, sc_q_mode, sc_o_mode, int, sc_fxnum_fast_observer* = 0 ); explicit sc_fix_fast( const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, sc_q_mode, sc_o_mode, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( int, int, sc_q_mode, sc_o_mode, int, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); explicit sc_fix_fast( const sc_fxtype_params&, sc_fxnum_fast_observer* = 0 ); sc_fix_fast( const sc_fxtype_params&, const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T(tp) \ sc_fix_fast( tp, \ int, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ sc_q_mode, sc_o_mode, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ sc_q_mode, sc_o_mode, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ int, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ int, int, sc_q_mode, sc_o_mode, int, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ const sc_fxtype_params&, \ sc_fxnum_fast_observer* = 0 ); \ sc_fix_fast( tp, \ const sc_fxtype_params&, \ const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_fix_fast( tp, \ sc_fxnum_fast_observer* = 0 ); \ DECL_CTORS_T(tp) #define DECL_CTORS_T_B(tp) \ explicit sc_fix_fast( tp, \ sc_fxnum_fast_observer* = 0 ); \ DECL_CTORS_T(tp) DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_fix_fast( const sc_fix_fast& ); // unary bitwise operators const sc_fix_fast operator ~ () const; // unary bitwise functions friend void b_not( sc_fix_fast&, const sc_fix_fast& ); // binary bitwise operators friend const sc_fix_fast operator & ( const sc_fix_fast&, const sc_fix_fast& ); friend const sc_fix_fast operator ^ ( const sc_fix_fast&, const sc_fix_fast& ); friend const sc_fix_fast operator | ( const sc_fix_fast&, const sc_fix_fast& ); // binary bitwise functions friend void b_and( sc_fix_fast&, const sc_fix_fast&, const sc_fix_fast& ); friend void b_or ( sc_fix_fast&, const sc_fix_fast&, const sc_fix_fast& ); friend void b_xor( sc_fix_fast&, const sc_fix_fast&, const sc_fix_fast& ); // assignment operators sc_fix_fast& operator = ( const sc_fix_fast& ); #define DECL_ASN_OP_T(op,tp) \ sc_fix_fast& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_fix&) DECL_ASN_OP_T(&=,const sc_fix_fast&) DECL_ASN_OP_T(|=,const sc_fix&) DECL_ASN_OP_T(|=,const sc_fix_fast&) DECL_ASN_OP_T(^=,const sc_fix&) DECL_ASN_OP_T(^=,const sc_fix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_fix_fast& operator ++ (); sc_fix_fast& operator -- (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fix // // "Unconstrained" signed fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- // constructors inline sc_fix::sc_fix( sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params(), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_ ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( sc_q_mode qm, sc_o_mode om, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om, nb ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params(), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_ ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( qm, om, nb ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix::sc_fix( const sc_fxtype_params& type_params_, sc_fxnum_observer* observer_ ) : sc_fxnum( type_params_, SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix::sc_fix( const sc_fxtype_params& type_params_, const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_fxnum( type_params_, SC_TC_, cast_sw, observer_ ) {} #define DEFN_CTORS_T_A(tp) \ inline \ sc_fix::sc_fix( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params(), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params(), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_TC_, \ cast_sw, \ observer_ ) \ {} #define DEFN_CTORS_T_B(tp) \ inline \ sc_fix::sc_fix( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ a.type_params(), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ a.type_params(), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix::sc_fix( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_fxnum( a, \ type_params_, \ SC_TC_, \ cast_sw, \ observer_ ) \ {} DEFN_CTORS_T_A(int) DEFN_CTORS_T_A(unsigned int) DEFN_CTORS_T_A(long) DEFN_CTORS_T_A(unsigned long) DEFN_CTORS_T_A(float) DEFN_CTORS_T_A(double) DEFN_CTORS_T_A(const char*) DEFN_CTORS_T_A(const sc_fxval&) DEFN_CTORS_T_A(const sc_fxval_fast&) DEFN_CTORS_T_B(const sc_fxnum&) DEFN_CTORS_T_B(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T_A(int64) DEFN_CTORS_T_A(uint64) DEFN_CTORS_T_A(const sc_int_base&) DEFN_CTORS_T_A(const sc_uint_base&) DEFN_CTORS_T_A(const sc_signed&) DEFN_CTORS_T_A(const sc_unsigned&) #endif #undef DEFN_CTORS_T_A #undef DEFN_CTORS_T_B // copy constructor inline sc_fix::sc_fix( const sc_fix& a ) : sc_fxnum( a, a.type_params(), SC_TC_, sc_fxcast_switch(), 0 ) {} // unary bitwise operators inline const sc_fix sc_fix::operator ~ () const { SC_FXNUM_OBSERVER_READ_( *this ) int iwl_c = iwl(); int wl_c = wl(); sc_fix c( wl_c, iwl_c ); for( int i = iwl_c - wl_c; i < iwl_c; ++ i ) c.set_bit( i, ! get_bit( i ) ); return sc_fix( c, wl_c, iwl_c ); } // unary bitwise functions inline void b_not( sc_fix& c, const sc_fix& a ) { SC_FXNUM_OBSERVER_READ_( a ) int iwl_c = c.iwl(); for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) c.set_bit( i, ! a.get_bit( i ) ); c.cast(); SC_FXNUM_OBSERVER_WRITE_( c ) } // binary bitwise operators #define DEFN_BIN_OP_T(op,op2,tp1,tp2) \ inline \ const sc_fix \ operator op ( const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_a = a.iwl(); \ int iwl_b = b.iwl(); \ int iwl_c = sc_max( iwl_a, iwl_b ); \ int fwl_c = sc_max( a.wl() - iwl_a, b.wl() - iwl_b ); \ sc_fix c( iwl_c + fwl_c, iwl_c ); \ for( int i = -fwl_c; i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ return sc_fix( c, iwl_c + fwl_c, iwl_c ); \ } DEFN_BIN_OP_T(&,&&,sc_fix,sc_fix) DEFN_BIN_OP_T(&,&&,sc_fix,sc_fix_fast) DEFN_BIN_OP_T(&,&&,sc_fix_fast,sc_fix) DEFN_BIN_OP_T(|,||,sc_fix,sc_fix) DEFN_BIN_OP_T(|,||,sc_fix,sc_fix_fast) DEFN_BIN_OP_T(|,||,sc_fix_fast,sc_fix) DEFN_BIN_OP_T(^,!=,sc_fix,sc_fix) DEFN_BIN_OP_T(^,!=,sc_fix,sc_fix_fast) DEFN_BIN_OP_T(^,!=,sc_fix_fast,sc_fix) #undef DEFN_BIN_OP_T // binary bitwise functions #define DEFN_BIN_FNC_T(fnc,op2,tp1,tp2) \ inline \ void \ fnc ( sc_fix& c, const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_c = c.iwl(); \ for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ c.cast(); \ SC_FXNUM_OBSERVER_WRITE_( c ) \ } DEFN_BIN_FNC_T(b_and,&&,sc_fix,sc_fix) DEFN_BIN_FNC_T(b_and,&&,sc_fix,sc_fix_fast) DEFN_BIN_FNC_T(b_and,&&,sc_fix_fast,sc_fix) DEFN_BIN_FNC_T(b_or,||,sc_fix,sc_fix) DEFN_BIN_FNC_T(b_or,||,sc_fix,sc_fix_fast) DEFN_BIN_FNC_T(b_or,||,sc_fix_fast,sc_fix) DEFN_BIN_FNC_T(b_xor,!=,sc_fix,sc_fix) DEFN_BIN_FNC_T(b_xor,!=,sc_fix,sc_fix_fast) DEFN_BIN_FNC_T(b_xor,!=,sc_fix_fast,sc_fix) #undef DEFN_BIN_FNC_T // assignment operators inline sc_fix& sc_fix::operator = ( const sc_fix& a ) { sc_fxnum::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fix& \ sc_fix::operator op ( tp a ) \ { \ sc_fxnum::operator op( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP #define DEFN_ASN_OP_T(op,op2,tp) \ inline \ sc_fix& \ sc_fix::operator op ( const tp& b ) \ { \ SC_FXNUM_OBSERVER_READ_( *this ) \ b.observer_read(); \ int iwl_c = iwl(); \ for( int i = iwl_c - wl(); i < iwl_c; ++ i ) \ set_bit( i, get_bit( i ) op2 b.get_bit( i ) ); \ cast(); \ SC_FXNUM_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(&=,&&,sc_fix) DEFN_ASN_OP_T(&=,&&,sc_fix_fast) DEFN_ASN_OP_T(|=,||,sc_fix) DEFN_ASN_OP_T(|=,||,sc_fix_fast) DEFN_ASN_OP_T(^=,!=,sc_fix) DEFN_ASN_OP_T(^=,!=,sc_fix_fast) #undef DEFN_ASN_OP_T // auto-increment and auto-decrement inline const sc_fxval sc_fix::operator ++ ( int ) { return sc_fxval( sc_fxnum::operator ++ ( 0 ) ); } inline const sc_fxval sc_fix::operator -- ( int ) { return sc_fxval( sc_fxnum::operator -- ( 0 ) ); } inline sc_fix& sc_fix::operator ++ () { sc_fxnum::operator ++ (); return *this; } inline sc_fix& sc_fix::operator -- () { sc_fxnum::operator -- (); return *this; } // ---------------------------------------------------------------------------- // CLASS : sc_fix_fast // // "Unconstrained" signed fixed-point class; limited precision. // ---------------------------------------------------------------------------- // constructors inline sc_fix_fast::sc_fix_fast( sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params(), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_ ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( sc_q_mode qm, sc_o_mode om, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om, nb ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params(), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_ ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( qm, om, nb ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, int nb, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( sc_fxtype_params( wl_, iwl_, qm, om, nb ), SC_TC_, cast_sw, observer_ ) {} inline sc_fix_fast::sc_fix_fast( const sc_fxtype_params& type_params_, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( type_params_, SC_TC_, sc_fxcast_switch(), observer_ ) {} inline sc_fix_fast::sc_fix_fast( const sc_fxtype_params& type_params_, const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_fxnum_fast( type_params_, SC_TC_, cast_sw, observer_ ) {} #define DEFN_CTORS_T_A(tp) \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params(), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params(), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_ ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_TC_, \ cast_sw, \ observer_ ) \ {} #define DEFN_CTORS_T_B(tp) \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ a.type_params(), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ a.type_params(), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), wl_, iwl_ ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( a.type_params(), qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, sc_q_mode qm, sc_o_mode om, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ int wl_, int iwl_, \ sc_q_mode qm, sc_o_mode om, int nb, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ sc_fxtype_params( wl_, iwl_, qm, om, nb ), \ SC_TC_, \ cast_sw, \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxtype_params& type_params_, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_TC_, \ sc_fxcast_switch(), \ observer_ ) \ {} \ \ inline \ sc_fix_fast::sc_fix_fast( tp a, \ const sc_fxtype_params& type_params_, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ ) \ : sc_fxnum_fast( a, \ type_params_, \ SC_TC_, \ cast_sw, \ observer_ ) \ {} DEFN_CTORS_T_A(int) DEFN_CTORS_T_A(unsigned int) DEFN_CTORS_T_A(long) DEFN_CTORS_T_A(unsigned long) DEFN_CTORS_T_A(float) DEFN_CTORS_T_A(double) DEFN_CTORS_T_A(const char*) DEFN_CTORS_T_A(const sc_fxval&) DEFN_CTORS_T_A(const sc_fxval_fast&) DEFN_CTORS_T_B(const sc_fxnum&) DEFN_CTORS_T_B(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T_A(int64) DEFN_CTORS_T_A(uint64) DEFN_CTORS_T_A(const sc_int_base&) DEFN_CTORS_T_A(const sc_uint_base&) DEFN_CTORS_T_A(const sc_signed&) DEFN_CTORS_T_A(const sc_unsigned&) #endif #undef DEFN_CTORS_T_A #undef DEFN_CTORS_T_B // copy constructor inline sc_fix_fast::sc_fix_fast( const sc_fix_fast& a ) : sc_fxnum_fast( a, a.type_params(), SC_TC_, sc_fxcast_switch(), 0 ) {} // unary bitwise operators inline const sc_fix_fast sc_fix_fast::operator ~ () const { SC_FXNUM_FAST_OBSERVER_READ_( *this ) int iwl_c = iwl(); int wl_c = wl(); sc_fix_fast c( wl_c, iwl_c ); for( int i = iwl_c - wl_c; i < iwl_c; ++ i ) c.set_bit( i, ! get_bit( i ) ); return sc_fix_fast( c, wl_c, iwl_c ); } // unary bitwise functions inline void b_not( sc_fix_fast& c, const sc_fix_fast& a ) { SC_FXNUM_FAST_OBSERVER_READ_( a ) int iwl_c = c.iwl(); for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) c.set_bit( i, ! a.get_bit( i ) ); c.cast(); SC_FXNUM_FAST_OBSERVER_WRITE_( c ) } // binary bitwise operators #define DEFN_BIN_OP_T(op,op2,tp1,tp2) \ inline \ const sc_fix_fast \ operator op ( const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_a = a.iwl(); \ int iwl_b = b.iwl(); \ int iwl_c = sc_max( iwl_a, iwl_b ); \ int fwl_c = sc_max( a.wl() - iwl_a, b.wl() - iwl_b ); \ sc_fix_fast c( iwl_c + fwl_c, iwl_c ); \ for( int i = -fwl_c; i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ return sc_fix_fast( c, iwl_c + fwl_c, iwl_c ); \ } DEFN_BIN_OP_T(&,&&,sc_fix_fast,sc_fix_fast) DEFN_BIN_OP_T(|,||,sc_fix_fast,sc_fix_fast) DEFN_BIN_OP_T(^,!=,sc_fix_fast,sc_fix_fast) #undef DEFN_BIN_OP_T // binary bitwise functions #define DEFN_BIN_FNC_T(fnc,op2,tp1,tp2) \ inline \ void \ fnc ( sc_fix_fast& c, const tp1& a, const tp2& b ) \ { \ a.observer_read(); \ b.observer_read(); \ int iwl_c = c.iwl(); \ for( int i = iwl_c - c.wl(); i < iwl_c; ++ i ) \ c.set_bit( i, a.get_bit( i ) op2 b.get_bit( i ) ); \ c.cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( c ) \ } DEFN_BIN_FNC_T(b_and,&&,sc_fix_fast,sc_fix_fast) DEFN_BIN_FNC_T(b_or,||,sc_fix_fast,sc_fix_fast) DEFN_BIN_FNC_T(b_xor,!=,sc_fix_fast,sc_fix_fast) #undef DEFN_BIN_FNC_T // assignment operators inline sc_fix_fast& sc_fix_fast::operator = ( const sc_fix_fast& a ) { sc_fxnum_fast::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fix_fast& \ sc_fix_fast::operator op ( tp a ) \ { \ sc_fxnum_fast::operator op( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP #define DEFN_ASN_OP_T(op,op2,tp) \ inline \ sc_fix_fast& \ sc_fix_fast::operator op ( const tp& b ) \ { \ SC_FXNUM_FAST_OBSERVER_READ_( *this ) \ b.observer_read(); \ int iwl_c = iwl(); \ for( int i = iwl_c - wl(); i < iwl_c; ++ i ) \ set_bit( i, get_bit( i ) op2 b.get_bit( i ) ); \ cast(); \ SC_FXNUM_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(&=,&&,sc_fix) DEFN_ASN_OP_T(&=,&&,sc_fix_fast) DEFN_ASN_OP_T(|=,||,sc_fix) DEFN_ASN_OP_T(|=,||,sc_fix_fast) DEFN_ASN_OP_T(^=,!=,sc_fix) DEFN_ASN_OP_T(^=,!=,sc_fix_fast) #undef DEFN_ASN_OP_T // auto-increment and auto-decrement inline const sc_fxval_fast sc_fix_fast::operator ++ ( int ) { return sc_fxval_fast( sc_fxnum_fast::operator ++ ( 0 ) ); } inline const sc_fxval_fast sc_fix_fast::operator -- ( int ) { return sc_fxval_fast( sc_fxnum_fast::operator -- ( 0 ) ); } inline sc_fix_fast& sc_fix_fast::operator ++ () { sc_fxnum_fast::operator ++ (); return *this; } inline sc_fix_fast& sc_fix_fast::operator -- () { sc_fxnum_fast::operator -- (); return *this; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxval.cpp0000644000175000017500000004264714342422106021576 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxval.cpp - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxval.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include #include #include #include #include "sysc/datatypes/fx/sc_fxval.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_fxval // // Fixed-point value type; arbitrary precision. // ---------------------------------------------------------------------------- // explicit conversion to character string const std::string sc_fxval::to_string() const { return std::string( m_rep->to_string( SC_DEC, -1, SC_E ) ); } const std::string sc_fxval::to_string( sc_numrep numrep ) const { return std::string( m_rep->to_string( numrep, -1, SC_E ) ); } const std::string sc_fxval::to_string( sc_numrep numrep, bool w_prefix ) const { return std::string( m_rep->to_string( numrep, (w_prefix ? 1 : 0), SC_E ) ); } const std::string sc_fxval::to_string( sc_fmt fmt ) const { return std::string( m_rep->to_string( SC_DEC, -1, fmt ) ); } const std::string sc_fxval::to_string( sc_numrep numrep, sc_fmt fmt ) const { return std::string( m_rep->to_string( numrep, -1, fmt ) ); } const std::string sc_fxval::to_string( sc_numrep numrep, bool w_prefix, sc_fmt fmt ) const { return std::string( m_rep->to_string( numrep, (w_prefix ? 1 : 0), fmt ) ); } const std::string sc_fxval::to_dec() const { return std::string( m_rep->to_string( SC_DEC, -1, SC_E ) ); } const std::string sc_fxval::to_bin() const { return std::string( m_rep->to_string( SC_BIN, -1, SC_E ) ); } const std::string sc_fxval::to_oct() const { return std::string( m_rep->to_string( SC_OCT, -1, SC_E ) ); } const std::string sc_fxval::to_hex() const { return std::string( m_rep->to_string( SC_HEX, -1, SC_E ) ); } // print or dump content void sc_fxval::print( ::std::ostream& os ) const { m_rep->print( os ); } void sc_fxval::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } void sc_fxval::dump( ::std::ostream& os ) const { os << "sc_fxval" << ::std::endl; os << "(" << ::std::endl; os << "rep = "; m_rep->dump( os ); // TO BE COMPLETED // os << "r_flag = " << m_r_flag << ::std::endl; // os << "observer = "; // if( m_observer != 0 ) // m_observer->dump( os ); // else // os << "0" << ::std::endl; os << ")" << ::std::endl; } // protected methods and friend functions sc_fxval_observer* sc_fxval::lock_observer() const { SC_ASSERT_( m_observer != 0, "lock observer failed" ); sc_fxval_observer* tmp = m_observer; m_observer = 0; return tmp; } void sc_fxval::unlock_observer( sc_fxval_observer* observer_ ) const { SC_ASSERT_( observer_ != 0, "unlock observer failed" ); m_observer = observer_; } // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast // // Fixed-point value types; limited precision. // ---------------------------------------------------------------------------- static void print_dec( scfx_string& s, scfx_ieee_double id, int w_prefix, sc_fmt fmt ) { if( id.negative() != 0 ) { id.negative( 0 ); s += '-'; } if( w_prefix == 1 ) { scfx_print_prefix( s, SC_DEC ); } if( id.is_zero() ) { s += '0'; return; } // split 'id' into its integer and fractional part double int_part; double frac_part = std::modf( static_cast( id ), &int_part ); int i; // print integer part int int_digits = 0; int int_zeros = 0; if( int_part != 0.0 ) { int_digits = (int) std::ceil( std::log10( int_part + 1.0 ) ); int len = s.length(); s.append( int_digits ); bool zero_digits = ( frac_part == 0.0 && fmt != SC_F ); for( i = int_digits + len - 1; i >= len; i-- ) { unsigned int remainder = (unsigned int) std::fmod( int_part, 10.0 ); s[i] = static_cast( '0' + remainder ); if( zero_digits ) { if( remainder == 0 ) int_zeros ++; else zero_digits = false; } int_part /= 10.0; } // discard trailing zeros from int_part s.discard( int_zeros ); if( s[len] == '0' ) { // int_digits was overestimated by one s.remove( len ); -- int_digits; } } // print fractional part int frac_digits = 0; int frac_zeros = 0; if( frac_part != 0.0 ) { s += '.'; bool zero_digits = ( int_digits == 0 && fmt != SC_F ); frac_zeros = (int) std::floor( - std::log10( frac_part + DBL_EPSILON ) ); frac_part *= std::pow( 10.0, frac_zeros ); frac_digits = frac_zeros; if( ! zero_digits ) { for( i = 0; i < frac_zeros; i ++ ) s += '0'; frac_zeros = 0; } while( frac_part != 0.0 ) { frac_part *= 10.0; int n = static_cast( frac_part ); if( zero_digits ) { if( n == 0 ) frac_zeros ++; else zero_digits = false; } if( ! zero_digits ) s += static_cast( '0' + n ); frac_part -= n; frac_digits ++; } } // print exponent if( fmt != SC_F ) { if( frac_digits == 0 ) scfx_print_exp( s, int_zeros ); else if( int_digits == 0 ) scfx_print_exp( s, - frac_zeros ); } } static void print_other( scfx_string& s, const scfx_ieee_double& id, sc_numrep numrep, int w_prefix, sc_fmt fmt, const scfx_params* params ) { scfx_ieee_double id2 = id; sc_numrep numrep2 = numrep; bool numrep_is_sm = ( numrep == SC_BIN_SM || numrep == SC_OCT_SM || numrep == SC_HEX_SM ); if( numrep_is_sm ) { if( id2.negative() != 0 ) { s += '-'; id2.negative( 0 ); } switch( numrep ) { case SC_BIN_SM: numrep2 = SC_BIN_US; break; case SC_OCT_SM: numrep2 = SC_OCT_US; break; case SC_HEX_SM: numrep2 = SC_HEX_US; break; default: ; } } if( w_prefix != 0 ) { scfx_print_prefix( s, numrep ); } numrep = numrep2; sc_fxval_fast a( id2 ); int msb, lsb; if( params != 0 ) { msb = params->iwl() - 1; lsb = params->iwl() - params->wl(); if( params->enc() == SC_TC_ && ( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) && ! numrep_is_sm && params->wl() > 1 ) -- msb; else if( params->enc() == SC_US_ && ( numrep == SC_BIN || numrep == SC_OCT || numrep == SC_HEX || numrep == SC_CSD ) ) ++ msb; } else { if( a.is_zero() ) { msb = 0; lsb = 0; } else { msb = id2.exponent() + 1; while( a.get_bit( msb ) == a.get_bit( msb - 1 ) ) -- msb; if( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) -- msb; lsb = id2.exponent() - 52; while( ! a.get_bit( lsb ) ) ++ lsb; } } int step; switch( numrep ) { case SC_BIN: case SC_BIN_US: case SC_CSD: step = 1; break; case SC_OCT: case SC_OCT_US: step = 3; break; case SC_HEX: case SC_HEX_US: step = 4; break; default: SC_REPORT_FATAL( sc_core::SC_ID_ASSERTION_FAILED_ , "unexpected sc_numrep" ); sc_core::sc_abort(); } msb = (int) std::ceil( double( msb + 1 ) / step ) * step - 1; lsb = (int) std::floor( double( lsb ) / step ) * step; if( msb < 0 ) { s += '.'; if( fmt == SC_F ) { int sign = ( id2.negative() != 0 ) ? ( 1 << step ) - 1 : 0; for( int i = ( msb + 1 ) / step; i < 0; i ++ ) { if( sign < 10 ) s += static_cast( sign + '0' ); else s += static_cast( sign + 'a' - 10 ); } } } int i = msb; while( i >= lsb ) { int value = 0; for( int j = step - 1; j >= 0; -- j ) { value += static_cast( a.get_bit( i ) ) << j; -- i; } if( value < 10 ) s += static_cast( value + '0' ); else s += static_cast( value + 'a' - 10 ); if( i == -1 ) s += '.'; } if( lsb > 0 && fmt == SC_F ) { for( i = lsb / step; i > 0; i -- ) s += '0'; } if( s[s.length() - 1] == '.' ) s.discard( 1 ); if( fmt != SC_F ) { if( msb < 0 ) scfx_print_exp( s, ( msb + 1 ) / step ); else if( lsb > 0 ) scfx_print_exp( s, lsb / step ); } if( numrep == SC_CSD ) scfx_tc2csd( s, w_prefix ); } const char* to_string( const scfx_ieee_double& id, sc_numrep numrep, int w_prefix, sc_fmt fmt, const scfx_params* params = 0 ) { static scfx_string s; s.clear(); if( id.is_nan() ) scfx_print_nan( s ); else if( id.is_inf() ) scfx_print_inf( s, static_cast( id.negative() ) ); else if( id.negative() && ! id.is_zero() && ( numrep == SC_BIN_US || numrep == SC_OCT_US || numrep == SC_HEX_US ) ) s += "negative"; else if( numrep == SC_DEC ) sc_dt::print_dec( s, id, w_prefix, fmt ); else sc_dt::print_other( s, id, numrep, w_prefix, fmt, params ); return s; } // explicit conversion to character string const std::string sc_fxval_fast::to_string() const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, SC_E ) ); } const std::string sc_fxval_fast::to_string( sc_numrep numrep ) const { return std::string( sc_dt::to_string( m_val, numrep, -1, SC_E ) ); } const std::string sc_fxval_fast::to_string( sc_numrep numrep, bool w_prefix ) const { return std::string( sc_dt::to_string( m_val, numrep, (w_prefix ? 1 : 0), SC_E ) ); } const std::string sc_fxval_fast::to_string( sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, fmt ) ); } const std::string sc_fxval_fast::to_string( sc_numrep numrep, sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, numrep, -1, fmt ) ); } const std::string sc_fxval_fast::to_string( sc_numrep numrep, bool w_prefix, sc_fmt fmt ) const { return std::string( sc_dt::to_string( m_val, numrep, (w_prefix ? 1 : 0), fmt ) ); } const std::string sc_fxval_fast::to_dec() const { return std::string( sc_dt::to_string( m_val, SC_DEC, -1, SC_E ) ); } const std::string sc_fxval_fast::to_bin() const { return std::string( sc_dt::to_string( m_val, SC_BIN, -1, SC_E ) ); } const std::string sc_fxval_fast::to_oct() const { return std::string( sc_dt::to_string( m_val, SC_OCT, -1, SC_E ) ); } const std::string sc_fxval_fast::to_hex() const { return std::string( sc_dt::to_string( m_val, SC_HEX, -1, SC_E ) ); } // print or dump content void sc_fxval_fast::print( ::std::ostream& os ) const { os << sc_dt::to_string( m_val, SC_DEC, -1, SC_E ); } void sc_fxval_fast::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } void sc_fxval_fast::dump( ::std::ostream& os ) const { os << "sc_fxval_fast" << ::std::endl; os << "(" << ::std::endl; os << "val = " << m_val << ::std::endl; // TO BE COMPLETED // os << "r_flag = " << m_r_flag << ::std::endl; // os << "observer = "; // if( m_observer != 0 ) // m_observer->dump( os ); // else // os << "0" << ::std::endl; os << ")" << ::std::endl; } // internal use only; bool sc_fxval_fast::get_bit( int i ) const { scfx_ieee_double id( m_val ); if( id.is_zero() || id.is_nan() || id.is_inf() ) return false; // convert to two's complement unsigned int m0 = id.mantissa0(); unsigned int m1 = id.mantissa1(); if( id.is_normal() ) m0 += 1U << 20; if( id.negative() != 0 ) { m0 = ~ m0; m1 = ~ m1; unsigned int tmp = m1; m1 += 1U; if( m1 <= tmp ) m0 += 1U; } // get the right bit int j = i - id.exponent(); if( ( j += 20 ) >= 32 ) return ( ( m0 & 1U << 31 ) != 0 ); else if( j >= 0 ) return ( ( m0 & 1U << j ) != 0 ); else if( ( j += 32 ) >= 0 ) return ( ( m1 & 1U << j ) != 0 ); else return false; } // protected methods and friend functions sc_fxval_fast_observer* sc_fxval_fast::lock_observer() const { SC_ASSERT_( m_observer != 0, "lock observer failed" ); sc_fxval_fast_observer* tmp = m_observer; m_observer = 0; return tmp; } void sc_fxval_fast::unlock_observer( sc_fxval_fast_observer* observer_ ) const { SC_ASSERT_( observer_ != 0, "unlock observer failed" ); m_observer = observer_; } #define SCFX_FAIL_IF_(cnd) \ { \ if( ( cnd ) ) \ return static_cast( scfx_ieee_double::nan() ); \ } double sc_fxval_fast::from_string( const char* s ) { SCFX_FAIL_IF_( s == 0 || *s == 0 ); scfx_string s2; s2 += s; s2 += '\0'; bool sign_char; int sign = scfx_parse_sign( s, sign_char ); sc_numrep numrep = scfx_parse_prefix( s ); int base = 0; switch( numrep ) { case SC_DEC: { base = 10; if( scfx_is_nan( s ) ) // special case: NaN return static_cast( scfx_ieee_double::nan() ); if( scfx_is_inf( s ) ) // special case: Infinity return static_cast( scfx_ieee_double::inf( sign ) ); break; } case SC_BIN: case SC_BIN_US: { SCFX_FAIL_IF_( sign_char ); base = 2; break; } case SC_BIN_SM: { base = 2; break; } case SC_OCT: case SC_OCT_US: { SCFX_FAIL_IF_( sign_char ); base = 8; break; } case SC_OCT_SM: { base = 8; break; } case SC_HEX: case SC_HEX_US: { SCFX_FAIL_IF_( sign_char ); base = 16; break; } case SC_HEX_SM: { base = 16; break; } case SC_CSD: { SCFX_FAIL_IF_( sign_char ); base = 2; scfx_csd2tc( s2 ); s = (const char*) s2 + 4; numrep = SC_BIN; break; } default:;// Martin, what is default??? } // // find end of mantissa and count the digits and points // const char *end = s; bool based_point = false; int int_digits = 0; int frac_digits = 0; while( *end ) { if( scfx_exp_start( end ) ) break; if( *end == '.' ) { SCFX_FAIL_IF_( based_point ); based_point = true; } else { SCFX_FAIL_IF_( ! scfx_is_digit( *end, numrep ) ); if( based_point ) frac_digits ++; else int_digits ++; } end ++; } SCFX_FAIL_IF_( int_digits == 0 && frac_digits == 0 ); // [ exponent ] int exponent = 0; if( *end ) { for( const char *e = end + 2; *e; e ++ ) SCFX_FAIL_IF_( ! scfx_is_digit( *e, SC_DEC ) ); exponent = std::atoi( end + 1 ); } // // convert the mantissa // double integer = 0.0; if( int_digits != 0 ) { bool first_digit = true; for( ; s < end; s ++ ) { if( *s == '.' ) break; if( first_digit ) { integer = scfx_to_digit( *s, numrep ); switch( numrep ) { case SC_BIN: case SC_OCT: case SC_HEX: { if( integer >= ( base >> 1 ) ) integer -= base; // two's complement break; } default: ; } first_digit = false; } else { integer *= base; integer += scfx_to_digit( *s, numrep ); } } } // [ . fraction ] double fraction = 0.0; if( frac_digits != 0 ) { s ++; // skip '.' bool first_digit = ( int_digits == 0 ); double scale = 1.0; for( ; s < end; s ++ ) { scale /= base; if( first_digit ) { fraction = scfx_to_digit( *s, numrep ); switch( numrep ) { case SC_BIN: case SC_OCT: case SC_HEX: { if( fraction >= ( base >> 1 ) ) fraction -= base; // two's complement break; } default: ; } fraction *= scale; first_digit = false; } else fraction += scfx_to_digit( *s, numrep ) * scale; } } double exp = ( exponent != 0 ) ? std::pow( (double) base, (double) exponent ) : 1; return ( sign * ( integer + fraction ) * exp ); } #undef SCFX_FAIL_IF_ } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_fxval.h0000644000175000017500000023104414342422106021232 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_fxval.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_fxval.h,v $ // Revision 1.3 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.2 2010/12/07 20:09:08 acg // Andy Goodrich: Philipp Hartmann's constructor disambiguation fix // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_FXVAL_H #define SC_FXVAL_H #include "sysc/datatypes/fx/scfx_rep.h" #ifndef SC_FX_EXCLUDE_OTHER #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #endif #include "sysc/datatypes/fx/sc_fxval_observer.h" #ifdef SC_FXVAL_IMPLICIT_CONV # define SCFX_EXPLICIT_ // nothing #else # define SCFX_EXPLICIT_ explicit #endif #ifdef SC_FXVAL_IMPLICIT_OTHER # define SCFX_EXPLICIT_OTHER_ #else # define SCFX_EXPLICIT_OTHER_ explicit #endif namespace sc_dt { // classes defined in this module class sc_fxval; class sc_fxval_fast; // forward class declarations class sc_fxnum; class sc_fxnum_fast; // ---------------------------------------------------------------------------- // CLASS : sc_fxval // // Fixed-point value type; arbitrary precision. // ---------------------------------------------------------------------------- class SC_API sc_fxval { friend class sc_fxnum; protected: sc_fxval_observer* observer() const; public: // internal use only; explicit sc_fxval( scfx_rep* ); explicit sc_fxval( sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( int, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( unsigned int, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( long, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( unsigned long, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( float, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( double, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval( const char*, sc_fxval_observer* = 0 ); sc_fxval( const sc_fxval&, sc_fxval_observer* = 0 ); sc_fxval( const sc_fxval_fast&, sc_fxval_observer* = 0 ); sc_fxval( const sc_fxnum&, sc_fxval_observer* = 0 ); sc_fxval( const sc_fxnum_fast&, sc_fxval_observer* = 0 ); #ifndef SC_FX_EXCLUDE_OTHER SCFX_EXPLICIT_OTHER_ sc_fxval( int64, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval( uint64, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_int_base&, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_uint_base&, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_signed&, sc_fxval_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval( const sc_unsigned&, sc_fxval_observer* = 0 ); #endif ~sc_fxval(); // internal use only; const scfx_rep* get_rep() const; void set_rep( scfx_rep* ); // unary operators const sc_fxval operator - () const; const sc_fxval& operator + () const; // unary functions friend void neg( sc_fxval&, const sc_fxval& ); // binary operators #define DECL_BIN_OP_T(op,tp) \ friend const sc_fxval operator op ( const sc_fxval&, tp ); \ friend const sc_fxval operator op ( tp, const sc_fxval& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_OP_OTHER(op) \ DECL_BIN_OP_T(op,int64) \ DECL_BIN_OP_T(op,uint64) \ DECL_BIN_OP_T(op,const sc_int_base&) \ DECL_BIN_OP_T(op,const sc_uint_base&) \ DECL_BIN_OP_T(op,const sc_signed&) \ DECL_BIN_OP_T(op,const sc_unsigned&) #else #define DECL_BIN_OP_OTHER(op) #endif #define DECL_BIN_OP(op,dummy) \ friend const sc_fxval operator op ( const sc_fxval&, const sc_fxval& ); \ DECL_BIN_OP_T(op,int) \ DECL_BIN_OP_T(op,unsigned int) \ DECL_BIN_OP_T(op,long) \ DECL_BIN_OP_T(op,unsigned long) \ DECL_BIN_OP_T(op,float) \ DECL_BIN_OP_T(op,double) \ DECL_BIN_OP_T(op,const char*) \ DECL_BIN_OP_T(op,const sc_fxval_fast&) \ DECL_BIN_OP_T(op,const sc_fxnum_fast&) \ DECL_BIN_OP_OTHER(op) DECL_BIN_OP(*,mult) DECL_BIN_OP(+,add) DECL_BIN_OP(-,sub) // declaration below doesn't compile with BCB5 (E2206) // DECL_BIN_OP(/,div) // previous macro expanded friend const sc_fxval operator / ( const sc_fxval&, const sc_fxval& ); DECL_BIN_OP_T(/,int) DECL_BIN_OP_T(/,unsigned int) DECL_BIN_OP_T(/,long) DECL_BIN_OP_T(/,unsigned long) DECL_BIN_OP_T(/,float) DECL_BIN_OP_T(/,double) DECL_BIN_OP_T(/,const char*) DECL_BIN_OP_T(/,const sc_fxval_fast&) DECL_BIN_OP_T(/,const sc_fxnum_fast&) // DECL_BIN_OP_OTHER(/) #ifndef SC_FX_EXCLUDE_OTHER DECL_BIN_OP_T(/,int64) \ DECL_BIN_OP_T(/,uint64) \ DECL_BIN_OP_T(/,const sc_int_base&) \ DECL_BIN_OP_T(/,const sc_uint_base&) \ DECL_BIN_OP_T(/,const sc_signed&) \ DECL_BIN_OP_T(/,const sc_unsigned&) #endif #undef DECL_BIN_OP_T #undef DECL_BIN_OP_OTHER #undef DECL_BIN_OP friend const sc_fxval operator << ( const sc_fxval&, int ); friend const sc_fxval operator >> ( const sc_fxval&, int ); // binary functions #define DECL_BIN_FNC_T(fnc,tp) \ friend void fnc ( sc_fxval&, const sc_fxval&, tp ); \ friend void fnc ( sc_fxval&, tp, const sc_fxval& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_FNC_OTHER(fnc) \ DECL_BIN_FNC_T(fnc,int64) \ DECL_BIN_FNC_T(fnc,uint64) \ DECL_BIN_FNC_T(fnc,const sc_int_base&) \ DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ DECL_BIN_FNC_T(fnc,const sc_signed&) \ DECL_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DECL_BIN_FNC_OTHER(fnc) #endif #define DECL_BIN_FNC(fnc) \ friend void fnc ( sc_fxval&, const sc_fxval&, const sc_fxval& ); \ DECL_BIN_FNC_T(fnc,int) \ DECL_BIN_FNC_T(fnc,unsigned int) \ DECL_BIN_FNC_T(fnc,long) \ DECL_BIN_FNC_T(fnc,unsigned long) \ DECL_BIN_FNC_T(fnc,float) \ DECL_BIN_FNC_T(fnc,double) \ DECL_BIN_FNC_T(fnc,const char*) \ DECL_BIN_FNC_T(fnc,const sc_fxval_fast&) \ DECL_BIN_FNC_T(fnc,const sc_fxnum_fast&) \ DECL_BIN_FNC_OTHER(fnc) DECL_BIN_FNC(mult) DECL_BIN_FNC(div) DECL_BIN_FNC(add) DECL_BIN_FNC(sub) #undef DECL_BIN_FNC_T #undef DECL_BIN_FNC_OTHER #undef DECL_BIN_FNC friend void lshift( sc_fxval&, const sc_fxval&, int ); friend void rshift( sc_fxval&, const sc_fxval&, int ); // relational (including equality) operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxval&, tp ); \ friend bool operator op ( tp, const sc_fxval& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_REL_OP_OTHER(op) \ DECL_REL_OP_T(op,int64) \ DECL_REL_OP_T(op,uint64) \ DECL_REL_OP_T(op,const sc_int_base&) \ DECL_REL_OP_T(op,const sc_uint_base&) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) #else #define DECL_REL_OP_OTHER(op) #endif #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxval&, const sc_fxval& ); \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) \ DECL_REL_OP_T(op,float) \ DECL_REL_OP_T(op,double) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_T(op,const sc_fxval_fast&) \ DECL_REL_OP_T(op,const sc_fxnum_fast&) \ DECL_REL_OP_OTHER(op) DECL_REL_OP(<) DECL_REL_OP(<=) DECL_REL_OP(>) DECL_REL_OP(>=) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP_OTHER #undef DECL_REL_OP // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxval& operator op( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_fxval& operator ++ (); sc_fxval& operator -- (); // implicit conversion operator double() const; // necessary evil! // explicit conversion to primitive types short to_short() const; unsigned short to_ushort() const; int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; float to_float() const; double to_double() const; // explicit conversion to character string const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; const std::string to_string( sc_fmt ) const; const std::string to_string( sc_numrep, sc_fmt ) const; const std::string to_string( sc_numrep, bool, sc_fmt ) const; const std::string to_dec() const; const std::string to_bin() const; const std::string to_oct() const; const std::string to_hex() const; // query value bool is_neg() const; bool is_zero() const; bool is_nan() const; bool is_inf() const; bool is_normal() const; bool rounding_flag() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void scan( ::std::istream& = ::std::cin ); void dump( ::std::ostream& = ::std::cout ) const; // internal use only; bool get_bit( int ) const; protected: sc_fxval_observer* lock_observer() const; void unlock_observer( sc_fxval_observer* ) const; void get_type( int&, int&, sc_enc& ) const; const sc_fxval quantization( const scfx_params&, bool& ) const; const sc_fxval overflow( const scfx_params&, bool& ) const; private: scfx_rep* m_rep; mutable sc_fxval_observer* m_observer; }; // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast // // Fixed-point value type; limited precision. // ---------------------------------------------------------------------------- class SC_API sc_fxval_fast { friend class sc_fxnum_fast; protected: sc_fxval_fast_observer* observer() const; public: explicit sc_fxval_fast( sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( int, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( unsigned int, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( long, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( unsigned long, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( float, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( double, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_ sc_fxval_fast( const char*, sc_fxval_fast_observer* = 0 ); sc_fxval_fast( const sc_fxval&, sc_fxval_fast_observer* = 0 ); sc_fxval_fast( const sc_fxval_fast&, sc_fxval_fast_observer* = 0 ); sc_fxval_fast( const sc_fxnum&, sc_fxval_fast_observer* = 0 ); sc_fxval_fast( const sc_fxnum_fast&, sc_fxval_fast_observer* = 0 ); #ifndef SC_FX_EXCLUDE_OTHER SCFX_EXPLICIT_OTHER_ sc_fxval_fast( int64, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval_fast( uint64, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_int_base&, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_uint_base&, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_signed&, sc_fxval_fast_observer* = 0 ); SCFX_EXPLICIT_OTHER_ sc_fxval_fast( const sc_unsigned&, sc_fxval_fast_observer* = 0 ); #endif ~sc_fxval_fast(); // internal use only; double get_val() const; void set_val( double ); // unary operators const sc_fxval_fast operator - () const; const sc_fxval_fast& operator + () const; // unary functions friend void neg( sc_fxval_fast&, const sc_fxval_fast& ); // binary operators #define DECL_BIN_OP_T(op,tp) \ friend const sc_fxval_fast operator op ( const sc_fxval_fast&, tp ); \ friend const sc_fxval_fast operator op ( tp, const sc_fxval_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_OP_OTHER(op) \ DECL_BIN_OP_T(op,int64) \ DECL_BIN_OP_T(op,uint64) \ DECL_BIN_OP_T(op,const sc_int_base&) \ DECL_BIN_OP_T(op,const sc_uint_base&) \ DECL_BIN_OP_T(op,const sc_signed&) \ DECL_BIN_OP_T(op,const sc_unsigned&) #else #define DECL_BIN_OP_OTHER(op) #endif #define DECL_BIN_OP(op,dummy) \ friend const sc_fxval_fast operator op ( const sc_fxval_fast&, \ const sc_fxval_fast& ); \ DECL_BIN_OP_T(op,int) \ DECL_BIN_OP_T(op,unsigned int) \ DECL_BIN_OP_T(op,long) \ DECL_BIN_OP_T(op,unsigned long) \ DECL_BIN_OP_T(op,float) \ DECL_BIN_OP_T(op,double) \ DECL_BIN_OP_T(op,const char*) \ DECL_BIN_OP_OTHER(op) DECL_BIN_OP(*,mult) DECL_BIN_OP(+,add) DECL_BIN_OP(-,sub) // don't use macro // DECL_BIN_OP(/,div) friend const sc_fxval_fast operator / ( const sc_fxval_fast&, const sc_fxval_fast& ); DECL_BIN_OP_T(/,int) DECL_BIN_OP_T(/,unsigned int) DECL_BIN_OP_T(/,long) DECL_BIN_OP_T(/,unsigned long) DECL_BIN_OP_T(/,float) DECL_BIN_OP_T(/,double) DECL_BIN_OP_T(/,const char*) // DECL_BIN_OP_OTHER(/) #ifndef SC_FX_EXCLUDE_OTHER DECL_BIN_OP_T(/,int64) \ DECL_BIN_OP_T(/,uint64) \ DECL_BIN_OP_T(/,const sc_int_base&) \ DECL_BIN_OP_T(/,const sc_uint_base&) \ DECL_BIN_OP_T(/,const sc_signed&) \ DECL_BIN_OP_T(/,const sc_unsigned&) #endif #undef DECL_BIN_OP_T #undef DECL_BIN_OP_OTHER #undef DECL_BIN_OP friend const sc_fxval_fast operator << ( const sc_fxval_fast&, int ); friend const sc_fxval_fast operator >> ( const sc_fxval_fast&, int ); // binary functions #define DECL_BIN_FNC_T(fnc,tp) \ friend void fnc ( sc_fxval_fast&, const sc_fxval_fast&, tp ); \ friend void fnc ( sc_fxval_fast&, tp, const sc_fxval_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_BIN_FNC_OTHER(fnc) \ DECL_BIN_FNC_T(fnc,int64) \ DECL_BIN_FNC_T(fnc,uint64) \ DECL_BIN_FNC_T(fnc,const sc_int_base&) \ DECL_BIN_FNC_T(fnc,const sc_uint_base&) \ DECL_BIN_FNC_T(fnc,const sc_signed&) \ DECL_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DECL_BIN_FNC_OTHER(fnc) #endif #define DECL_BIN_FNC(fnc) \ friend void fnc ( sc_fxval_fast&, const sc_fxval_fast&, \ const sc_fxval_fast& ); \ DECL_BIN_FNC_T(fnc,int) \ DECL_BIN_FNC_T(fnc,unsigned int) \ DECL_BIN_FNC_T(fnc,long) \ DECL_BIN_FNC_T(fnc,unsigned long) \ DECL_BIN_FNC_T(fnc,float) \ DECL_BIN_FNC_T(fnc,double) \ DECL_BIN_FNC_T(fnc,const char*) \ DECL_BIN_FNC_T(fnc,const sc_fxval&) \ DECL_BIN_FNC_T(fnc,const sc_fxnum&) \ DECL_BIN_FNC_OTHER(fnc) DECL_BIN_FNC(mult) DECL_BIN_FNC(div) DECL_BIN_FNC(add) DECL_BIN_FNC(sub) #undef DECL_BIN_FNC_T #undef DECL_BIN_FNC_OTHER #undef DECL_BIN_FNC friend void lshift( sc_fxval_fast&, const sc_fxval_fast&, int ); friend void rshift( sc_fxval_fast&, const sc_fxval_fast&, int ); // relational (including equality) operators #define DECL_REL_OP_T(op,tp) \ friend bool operator op ( const sc_fxval_fast&, tp ); \ friend bool operator op ( tp, const sc_fxval_fast& ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_REL_OP_OTHER(op) \ DECL_REL_OP_T(op,int64) \ DECL_REL_OP_T(op,uint64) \ DECL_REL_OP_T(op,const sc_int_base&) \ DECL_REL_OP_T(op,const sc_uint_base&) \ DECL_REL_OP_T(op,const sc_signed&) \ DECL_REL_OP_T(op,const sc_unsigned&) #else #define DECL_REL_OP_OTHER(op) #endif #define DECL_REL_OP(op) \ friend bool operator op ( const sc_fxval_fast&, const sc_fxval_fast& ); \ DECL_REL_OP_T(op,int) \ DECL_REL_OP_T(op,unsigned int) \ DECL_REL_OP_T(op,long) \ DECL_REL_OP_T(op,unsigned long) \ DECL_REL_OP_T(op,float) \ DECL_REL_OP_T(op,double) \ DECL_REL_OP_T(op,const char*) \ DECL_REL_OP_OTHER(op) DECL_REL_OP(<) DECL_REL_OP(<=) DECL_REL_OP(>) DECL_REL_OP(>=) DECL_REL_OP(==) DECL_REL_OP(!=) #undef DECL_REL_OP_T #undef DECL_REL_OP_OTHER #undef DECL_REL_OP // assignment operators #define DECL_ASN_OP_T(op,tp) \ sc_fxval_fast& operator op( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_fxval_fast& operator ++ (); sc_fxval_fast& operator -- (); // implicit conversion operator double() const; // necessary evil! // explicit conversion to primitive types short to_short() const; unsigned short to_ushort() const; int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; float to_float() const; double to_double() const; // explicit conversion to character string const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; const std::string to_string( sc_fmt ) const; const std::string to_string( sc_numrep, sc_fmt ) const; const std::string to_string( sc_numrep, bool, sc_fmt ) const; const std::string to_dec() const; const std::string to_bin() const; const std::string to_oct() const; const std::string to_hex() const; // query value bool is_neg() const; bool is_zero() const; bool is_nan() const; bool is_inf() const; bool is_normal() const; bool rounding_flag() const; // print or dump content void print( ::std::ostream& = ::std::cout ) const; void scan( ::std::istream& = ::std::cin ); void dump( ::std::ostream& = ::std::cout ) const; // internal use only; bool get_bit( int ) const; protected: sc_fxval_fast_observer* lock_observer() const; void unlock_observer( sc_fxval_fast_observer* ) const; static double from_string( const char* ); private: double m_val; mutable sc_fxval_fast_observer* m_observer; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_fxval // // Fixed-point value type; arbitrary precision. // ---------------------------------------------------------------------------- // protected method inline sc_fxval_observer* sc_fxval::observer() const { return m_observer; } // internal use only; inline sc_fxval::sc_fxval( scfx_rep* a ) : m_rep( a != 0 ? a : new scfx_rep ), m_observer( 0 ) {} // public constructors inline sc_fxval::sc_fxval( sc_fxval_observer* observer_ ) : m_rep( new scfx_rep ), m_observer( observer_ ) { SC_FXVAL_OBSERVER_DEFAULT_ SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) } inline sc_fxval::sc_fxval( const sc_fxval& a, sc_fxval_observer* observer_ ) : m_rep( new scfx_rep( *a.m_rep ) ), m_observer( observer_ ) { SC_FXVAL_OBSERVER_DEFAULT_ SC_FXVAL_OBSERVER_READ_( a ) SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_OBSERVER_WRITE_( *this ) } #define DEFN_CTOR_T(tp,arg) \ inline \ sc_fxval::sc_fxval( tp a, \ sc_fxval_observer* observer_ ) \ : m_rep( new scfx_rep( arg ) ), \ m_observer( observer_ ) \ { \ SC_FXVAL_OBSERVER_DEFAULT_ \ SC_FXVAL_OBSERVER_CONSTRUCT_( *this ) \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ } #define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,a) #define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,a.to_double()) #define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.value()) DEFN_CTOR_T_A(int) DEFN_CTOR_T_A(unsigned int) DEFN_CTOR_T_A(long) DEFN_CTOR_T_A(unsigned long) DEFN_CTOR_T_A(float) DEFN_CTOR_T_A(double) DEFN_CTOR_T_A(const char*) DEFN_CTOR_T_B(const sc_fxval_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTOR_T_A(int64) DEFN_CTOR_T_A(uint64) DEFN_CTOR_T_C(const sc_int_base&) DEFN_CTOR_T_C(const sc_uint_base&) DEFN_CTOR_T_A(const sc_signed&) DEFN_CTOR_T_A(const sc_unsigned&) #endif #undef DEFN_CTOR_T #undef DEFN_CTOR_T_A #undef DEFN_CTOR_T_B #undef DEFN_CTOR_T_C inline sc_fxval::~sc_fxval() { SC_FXVAL_OBSERVER_DESTRUCT_( *this ) delete m_rep; } // internal use only; inline const scfx_rep* sc_fxval::get_rep() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep; } // internal use only; inline void sc_fxval::set_rep( scfx_rep* rep_ ) { delete m_rep; m_rep = rep_; SC_FXVAL_OBSERVER_WRITE_( *this ) } // unary operators inline const sc_fxval sc_fxval::operator - () const { SC_FXVAL_OBSERVER_READ_( *this ) return sc_fxval( sc_dt::neg_scfx_rep( *m_rep ) ); } inline const sc_fxval& sc_fxval::operator + () const { // SC_FXVAL_OBSERVER_READ_( *this ) return *this; } // unary functions inline void neg( sc_fxval& c, const sc_fxval& a ) { SC_FXVAL_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::neg_scfx_rep( *a.m_rep ); SC_FXVAL_OBSERVER_WRITE_( c ) } // binary operators #define DEFN_BIN_OP_T(op,fnc,tp) \ inline \ const sc_fxval \ operator op ( const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ) ); \ } \ \ inline \ const sc_fxval \ operator op ( tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ) ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_OP_OTHER(op,fnc) \ DEFN_BIN_OP_T(op,fnc,int64) \ DEFN_BIN_OP_T(op,fnc,uint64) \ DEFN_BIN_OP_T(op,fnc,const sc_int_base&) \ DEFN_BIN_OP_T(op,fnc,const sc_uint_base&) \ DEFN_BIN_OP_T(op,fnc,const sc_signed&) \ DEFN_BIN_OP_T(op,fnc,const sc_unsigned&) #else #define DEFN_BIN_OP_OTHER(op,fnc) #endif #define DEFN_BIN_OP(op,fnc) \ inline \ const sc_fxval \ operator op ( const sc_fxval& a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ SC_FXVAL_OBSERVER_READ_( b ) \ return sc_fxval( sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ) ); \ } \ \ DEFN_BIN_OP_T(op,fnc,int) \ DEFN_BIN_OP_T(op,fnc,unsigned int) \ DEFN_BIN_OP_T(op,fnc,long) \ DEFN_BIN_OP_T(op,fnc,unsigned long) \ DEFN_BIN_OP_T(op,fnc,float) \ DEFN_BIN_OP_T(op,fnc,double) \ DEFN_BIN_OP_T(op,fnc,const char*) \ DEFN_BIN_OP_T(op,fnc,const sc_fxval_fast&) \ DEFN_BIN_OP_OTHER(op,fnc) DEFN_BIN_OP(*,mult) DEFN_BIN_OP(+,add) DEFN_BIN_OP(-,sub) // don't use macro //DEFN_BIN_OP(/,div) inline const sc_fxval operator / ( const sc_fxval& a, const sc_fxval& b ) { SC_FXVAL_OBSERVER_READ_( a ) SC_FXVAL_OBSERVER_READ_( b ) return sc_fxval( sc_dt::div_scfx_rep( *a.m_rep, *b.m_rep ) ); } DEFN_BIN_OP_T(/,div,int) DEFN_BIN_OP_T(/,div,unsigned int) DEFN_BIN_OP_T(/,div,long) DEFN_BIN_OP_T(/,div,unsigned long) DEFN_BIN_OP_T(/,div,float) DEFN_BIN_OP_T(/,div,double) DEFN_BIN_OP_T(/,div,const char*) DEFN_BIN_OP_T(/,div,const sc_fxval_fast&) //DEFN_BIN_OP_OTHER(/,div) #ifndef SC_FX_EXCLUDE_OTHER DEFN_BIN_OP_T(/,div,int64) \ DEFN_BIN_OP_T(/,div,uint64) \ DEFN_BIN_OP_T(/,div,const sc_int_base&) \ DEFN_BIN_OP_T(/,div,const sc_uint_base&) \ DEFN_BIN_OP_T(/,div,const sc_signed&) \ DEFN_BIN_OP_T(/,div,const sc_unsigned&) #endif #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP_OTHER #undef DEFN_BIN_OP inline const sc_fxval operator << ( const sc_fxval& a, int b ) { SC_FXVAL_OBSERVER_READ_( a ) return sc_fxval( sc_dt::lsh_scfx_rep( *a.m_rep, b ) ); } inline const sc_fxval operator >> ( const sc_fxval& a, int b ) { SC_FXVAL_OBSERVER_READ_( a ) return sc_fxval( sc_dt::rsh_scfx_rep( *a.m_rep, b ) ); } // binary functions #define DEFN_BIN_FNC_T(fnc,tp) \ inline \ void \ fnc ( sc_fxval& c, const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *tmp.m_rep ); \ SC_FXVAL_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval& c, tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *tmp.m_rep, *b.m_rep ); \ SC_FXVAL_OBSERVER_WRITE_( c ) \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_FNC_OTHER(fnc) \ DEFN_BIN_FNC_T(fnc,int64) \ DEFN_BIN_FNC_T(fnc,uint64) \ DEFN_BIN_FNC_T(fnc,const sc_int_base&) \ DEFN_BIN_FNC_T(fnc,const sc_uint_base&) \ DEFN_BIN_FNC_T(fnc,const sc_signed&) \ DEFN_BIN_FNC_T(fnc,const sc_unsigned&) #else #define DEFN_BIN_FNC_OTHER(fnc) #endif #define DEFN_BIN_FNC(fnc) \ inline \ void \ fnc( sc_fxval& c, const sc_fxval& a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ SC_FXVAL_OBSERVER_READ_( b ) \ delete c.m_rep; \ c.m_rep = sc_dt::fnc ## _scfx_rep( *a.m_rep, *b.m_rep ); \ SC_FXVAL_OBSERVER_WRITE_( c ) \ } \ \ DEFN_BIN_FNC_T(fnc,int) \ DEFN_BIN_FNC_T(fnc,unsigned int) \ DEFN_BIN_FNC_T(fnc,long) \ DEFN_BIN_FNC_T(fnc,unsigned long) \ DEFN_BIN_FNC_T(fnc,float) \ DEFN_BIN_FNC_T(fnc,double) \ DEFN_BIN_FNC_T(fnc,const char*) \ DEFN_BIN_FNC_T(fnc,const sc_fxval_fast&) \ DEFN_BIN_FNC_OTHER(fnc) DEFN_BIN_FNC(mult) DEFN_BIN_FNC(div) DEFN_BIN_FNC(add) DEFN_BIN_FNC(sub) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC_OTHER #undef DEFN_BIN_FNC inline void lshift( sc_fxval& c, const sc_fxval& a, int b ) { SC_FXVAL_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::lsh_scfx_rep( *a.m_rep, b ); SC_FXVAL_OBSERVER_WRITE_( c ) } inline void rshift( sc_fxval& c, const sc_fxval& a, int b ) { SC_FXVAL_OBSERVER_READ_( a ) delete c.m_rep; c.m_rep = sc_dt::rsh_scfx_rep( *a.m_rep, b ); SC_FXVAL_OBSERVER_WRITE_( c ) } // relational (including equality) operators #define DEFN_REL_OP_T(op,ret,tp) \ inline \ bool \ operator op ( const sc_fxval& a, tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ sc_fxval tmp( b ); \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *tmp.m_rep ); \ return ( ret ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( b ) \ sc_fxval tmp( a ); \ int result = sc_dt::cmp_scfx_rep( *tmp.m_rep, *b.m_rep ); \ return ( ret ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_REL_OP_OTHER(op,ret) \ DEFN_REL_OP_T(op,ret,int64) \ DEFN_REL_OP_T(op,ret,uint64) \ DEFN_REL_OP_T(op,ret,const sc_int_base&) \ DEFN_REL_OP_T(op,ret,const sc_uint_base&) \ DEFN_REL_OP_T(op,ret,const sc_signed&) \ DEFN_REL_OP_T(op,ret,const sc_unsigned&) #else #define DEFN_REL_OP_OTHER(op,ret) #endif #define DEFN_REL_OP(op,ret) \ inline \ bool \ operator op ( const sc_fxval& a, const sc_fxval& b) \ { \ SC_FXVAL_OBSERVER_READ_( a ) \ SC_FXVAL_OBSERVER_READ_( b ) \ int result = sc_dt::cmp_scfx_rep( *a.m_rep, *b.m_rep ); \ return ( ret ); \ } \ \ DEFN_REL_OP_T(op,ret,int) \ DEFN_REL_OP_T(op,ret,unsigned int) \ DEFN_REL_OP_T(op,ret,long) \ DEFN_REL_OP_T(op,ret,unsigned long) \ DEFN_REL_OP_T(op,ret,float) \ DEFN_REL_OP_T(op,ret,double) \ DEFN_REL_OP_T(op,ret,const char*) \ DEFN_REL_OP_T(op,ret,const sc_fxval_fast&) \ DEFN_REL_OP_OTHER(op,ret) DEFN_REL_OP(<,result < 0) DEFN_REL_OP(<=,result <= 0) DEFN_REL_OP(>,result > 0 && result != 2) DEFN_REL_OP(>=,result >= 0 && result != 2) DEFN_REL_OP(==,result == 0) DEFN_REL_OP(!=,result != 0) #undef DEFN_REL_OP_T #undef DEFN_REL_OP_OTHER #undef DEFN_REL_OP // assignment operators inline sc_fxval& sc_fxval::operator = ( const sc_fxval& a ) { if( &a != this ) { SC_FXVAL_OBSERVER_READ_( a ) *m_rep = *a.m_rep; SC_FXVAL_OBSERVER_WRITE_( *this ) } return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxval& \ sc_fxval::operator = ( tp b ) \ { \ sc_fxval tmp( b ); \ *m_rep = *tmp.m_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(float) DEFN_ASN_OP_T(double) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const sc_fxval_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) #endif #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,fnc,tp) \ inline \ sc_fxval& \ sc_fxval::operator op ( tp b ) \ { \ SC_FXVAL_OBSERVER_READ_( *this ) \ sc_fxval tmp( b ); \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *tmp.m_rep ); \ delete m_rep; \ m_rep = new_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op,fnc) \ DEFN_ASN_OP_T(op,fnc,int64) \ DEFN_ASN_OP_T(op,fnc,uint64) \ DEFN_ASN_OP_T(op,fnc,const sc_int_base&) \ DEFN_ASN_OP_T(op,fnc,const sc_uint_base&) \ DEFN_ASN_OP_T(op,fnc,const sc_signed&) \ DEFN_ASN_OP_T(op,fnc,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op,fnc) #endif #define DEFN_ASN_OP(op,fnc) \ inline \ sc_fxval& \ sc_fxval::operator op ( const sc_fxval& b ) \ { \ SC_FXVAL_OBSERVER_READ_( *this ) \ SC_FXVAL_OBSERVER_READ_( b ) \ scfx_rep* new_rep = sc_dt::fnc ## _scfx_rep( *m_rep, *b.m_rep ); \ delete m_rep; \ m_rep = new_rep; \ SC_FXVAL_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,fnc,int) \ DEFN_ASN_OP_T(op,fnc,unsigned int) \ DEFN_ASN_OP_T(op,fnc,long) \ DEFN_ASN_OP_T(op,fnc,unsigned long) \ DEFN_ASN_OP_T(op,fnc,float) \ DEFN_ASN_OP_T(op,fnc,double) \ DEFN_ASN_OP_T(op,fnc,const char*) \ DEFN_ASN_OP_T(op,fnc,const sc_fxval_fast&) \ DEFN_ASN_OP_OTHER(op,fnc) DEFN_ASN_OP(*=,mult) DEFN_ASN_OP(/=,div) DEFN_ASN_OP(+=,add) DEFN_ASN_OP(-=,sub) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP inline sc_fxval& sc_fxval::operator <<= ( int b ) { SC_FXVAL_OBSERVER_READ_( *this ) m_rep->lshift( b ); SC_FXVAL_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxval& sc_fxval::operator >>= ( int b ) { SC_FXVAL_OBSERVER_READ_( *this ) m_rep->rshift( b ); SC_FXVAL_OBSERVER_WRITE_( *this ) return *this; } // auto-increment and auto-decrement inline const sc_fxval sc_fxval::operator ++ ( int ) { sc_fxval c = *this; (*this) += 1; return c; } inline const sc_fxval sc_fxval::operator -- ( int ) { sc_fxval c = *this; (*this) -= 1; return c; } inline sc_fxval& sc_fxval::operator ++ () { (*this) += 1; return *this; } inline sc_fxval& sc_fxval::operator -- () { (*this) -= 1; return *this; } // implicit conversion inline sc_fxval::operator double() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->to_double(); } // explicit conversion to primitive types inline short sc_fxval::to_short() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned short sc_fxval::to_ushort() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline int sc_fxval::to_int() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline int64 sc_fxval::to_int64() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned int sc_fxval::to_uint() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline uint64 sc_fxval::to_uint64() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->to_uint64(); } inline long sc_fxval::to_long() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline unsigned long sc_fxval::to_ulong() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_uint64() ); } inline float sc_fxval::to_float() const { SC_FXVAL_OBSERVER_READ_( *this ) return static_cast( m_rep->to_double() ); } inline double sc_fxval::to_double() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->to_double(); } // query value inline bool sc_fxval::is_neg() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->is_neg(); } inline bool sc_fxval::is_zero() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->is_zero(); } inline bool sc_fxval::is_nan() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->is_nan(); } inline bool sc_fxval::is_inf() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->is_inf(); } inline bool sc_fxval::is_normal() const { SC_FXVAL_OBSERVER_READ_( *this ) return m_rep->is_normal(); } inline bool sc_fxval::rounding_flag() const { return m_rep->rounding_flag(); } // internal use only; inline bool sc_fxval::get_bit( int i ) const { return m_rep->get_bit( i ); } // protected methods and friend functions inline void sc_fxval::get_type( int& wl, int& iwl, sc_enc& enc ) const { m_rep->get_type( wl, iwl, enc ); } inline const sc_fxval sc_fxval::quantization( const scfx_params& params, bool& q_flag ) const { return sc_fxval( sc_dt::quantization_scfx_rep( *m_rep, params, q_flag ) ); } inline const sc_fxval sc_fxval::overflow( const scfx_params& params, bool& o_flag ) const { return sc_fxval( sc_dt::overflow_scfx_rep( *m_rep, params, o_flag ) ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxval& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxval& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_fxval_fast // // Fixed-point value type; limited precision. // ---------------------------------------------------------------------------- // protected method inline sc_fxval_fast_observer* sc_fxval_fast::observer() const { return m_observer; } // public constructors inline sc_fxval_fast::sc_fxval_fast( sc_fxval_fast_observer* observer_ ) : m_val( 0.0 ), m_observer( observer_ ) { SC_FXVAL_FAST_OBSERVER_DEFAULT_ SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) } inline sc_fxval_fast::sc_fxval_fast( const sc_fxval_fast& a, sc_fxval_fast_observer* observer_ ) : m_val( a.m_val ), m_observer( observer_ ) { SC_FXVAL_FAST_OBSERVER_DEFAULT_ SC_FXVAL_FAST_OBSERVER_READ_( a ) SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) } #define DEFN_CTOR_T(tp,arg) \ inline \ sc_fxval_fast::sc_fxval_fast( tp a, \ sc_fxval_fast_observer* observer_ ) \ : m_val( arg ), \ m_observer( observer_ ) \ { \ SC_FXVAL_FAST_OBSERVER_DEFAULT_ \ SC_FXVAL_FAST_OBSERVER_CONSTRUCT_( *this ) \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ } #define DEFN_CTOR_T_A(tp) DEFN_CTOR_T(tp,static_cast( a )) #define DEFN_CTOR_T_B(tp) DEFN_CTOR_T(tp,from_string( a )) #define DEFN_CTOR_T_C(tp) DEFN_CTOR_T(tp,a.to_double()) DEFN_CTOR_T_A(int) DEFN_CTOR_T_A(unsigned int) DEFN_CTOR_T_A(long) DEFN_CTOR_T_A(unsigned long) DEFN_CTOR_T_A(float) DEFN_CTOR_T_A(double) DEFN_CTOR_T_B(const char*) DEFN_CTOR_T_C(const sc_fxval&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTOR_T_A(int64) DEFN_CTOR_T_A(uint64) DEFN_CTOR_T_C(const sc_int_base&) DEFN_CTOR_T_C(const sc_uint_base&) DEFN_CTOR_T_C(const sc_signed&) DEFN_CTOR_T_C(const sc_unsigned&) #endif #undef DEFN_CTOR_T #undef DEFN_CTOR_T_A #undef DEFN_CTOR_T_B #undef DEFN_CTOR_T_C #undef DEFN_CTOR_T_D #undef DEFN_CTOR_T_E inline sc_fxval_fast::~sc_fxval_fast() { SC_FXVAL_FAST_OBSERVER_DESTRUCT_( *this ) } // internal use only; inline double sc_fxval_fast::get_val() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) return m_val; } // internal use only; inline void sc_fxval_fast::set_val( double val_ ) { m_val = val_; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) } // unary operators inline const sc_fxval_fast sc_fxval_fast::operator - () const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) return sc_fxval_fast( - m_val ); } inline const sc_fxval_fast& sc_fxval_fast::operator + () const { // SC_FXVAL_FAST_OBSERVER_READ_( *this ) return *this; } // unary functions inline void neg( sc_fxval_fast& c, const sc_fxval_fast& a ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) c.m_val = - a.m_val; SC_FXVAL_FAST_OBSERVER_WRITE_( c ) } // binary operators #define DEFN_BIN_OP_T(op,tp) \ inline \ const sc_fxval_fast \ operator op ( const sc_fxval_fast& a, tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ return sc_fxval_fast( a.m_val op tmp.m_val ); \ } \ \ inline \ const sc_fxval_fast \ operator op ( tp a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ return sc_fxval_fast( tmp.m_val op b.m_val ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_OP_OTHER(op) \ DEFN_BIN_OP_T(op,int64) \ DEFN_BIN_OP_T(op,uint64) \ DEFN_BIN_OP_T(op,const sc_int_base&) \ DEFN_BIN_OP_T(op,const sc_uint_base&) \ DEFN_BIN_OP_T(op,const sc_signed&) \ DEFN_BIN_OP_T(op,const sc_unsigned&) #else #define DEFN_BIN_OP_OTHER(op) #endif #define DEFN_BIN_OP(op,dummy) \ inline \ const sc_fxval_fast \ operator op ( const sc_fxval_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ return sc_fxval_fast( a.m_val op b.m_val ); \ } \ \ DEFN_BIN_OP_T(op,int) \ DEFN_BIN_OP_T(op,unsigned int) \ DEFN_BIN_OP_T(op,long) \ DEFN_BIN_OP_T(op,unsigned long) \ DEFN_BIN_OP_T(op,float) \ DEFN_BIN_OP_T(op,double) \ DEFN_BIN_OP_T(op,const char*) \ DEFN_BIN_OP_OTHER(op) DEFN_BIN_OP(*,mult) DEFN_BIN_OP(+,add) DEFN_BIN_OP(-,sub) //DEFN_BIN_OP(/,div) inline const sc_fxval_fast operator / ( const sc_fxval_fast& a, const sc_fxval_fast& b ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) SC_FXVAL_FAST_OBSERVER_READ_( b ) return sc_fxval_fast( a.m_val / b.m_val ); } DEFN_BIN_OP_T(/,int) DEFN_BIN_OP_T(/,unsigned int) DEFN_BIN_OP_T(/,long) DEFN_BIN_OP_T(/,unsigned long) DEFN_BIN_OP_T(/,float) DEFN_BIN_OP_T(/,double) DEFN_BIN_OP_T(/,const char*) //DEFN_BIN_OP_OTHER(/) #ifndef SC_FX_EXCLUDE_OTHER DEFN_BIN_OP_T(/,int64) DEFN_BIN_OP_T(/,uint64) DEFN_BIN_OP_T(/,const sc_int_base&) DEFN_BIN_OP_T(/,const sc_uint_base&) DEFN_BIN_OP_T(/,const sc_signed&) DEFN_BIN_OP_T(/,const sc_unsigned&) #endif #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP_OTHER #undef DEFN_BIN_OP inline const sc_fxval_fast operator << ( const sc_fxval_fast& a, int b ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) return sc_fxval_fast( a.m_val * scfx_pow2( b ) ); } inline const sc_fxval_fast operator >> ( const sc_fxval_fast& a, int b ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) return sc_fxval_fast( a.m_val * scfx_pow2( -b ) ); } // binary functions #define DEFN_BIN_FNC_T(fnc,op,tp) \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxval_fast& a, tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ c.m_val = a.m_val op tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ } \ \ inline \ void \ fnc ( sc_fxval_fast& c, tp a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ c.m_val = tmp.m_val op b.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_BIN_FNC_OTHER(fnc,op) \ DEFN_BIN_FNC_T(fnc,op,int64) \ DEFN_BIN_FNC_T(fnc,op,uint64) \ DEFN_BIN_FNC_T(fnc,op,const sc_int_base&) \ DEFN_BIN_FNC_T(fnc,op,const sc_uint_base&) \ DEFN_BIN_FNC_T(fnc,op,const sc_signed&) \ DEFN_BIN_FNC_T(fnc,op,const sc_unsigned&) #else #define DEFN_BIN_FNC_OTHER(fnc,op) #endif #define DEFN_BIN_FNC(fnc,op) \ inline \ void \ fnc ( sc_fxval_fast& c, const sc_fxval_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ c.m_val = a.m_val op b.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( c ) \ } \ \ DEFN_BIN_FNC_T(fnc,op,int) \ DEFN_BIN_FNC_T(fnc,op,unsigned int) \ DEFN_BIN_FNC_T(fnc,op,long) \ DEFN_BIN_FNC_T(fnc,op,unsigned long) \ DEFN_BIN_FNC_T(fnc,op,float) \ DEFN_BIN_FNC_T(fnc,op,double) \ DEFN_BIN_FNC_T(fnc,op,const char*) \ DEFN_BIN_FNC_OTHER(fnc,op) DEFN_BIN_FNC(mult,*) DEFN_BIN_FNC(div,/) DEFN_BIN_FNC(add,+) DEFN_BIN_FNC(sub,-) #undef DEFN_BIN_FNC_T #undef DEFN_BIN_FNC_OTHER #undef DEFN_BIN_FNC inline void lshift( sc_fxval_fast& c, const sc_fxval_fast& a, int b ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) c.m_val = a.m_val * scfx_pow2( b ); SC_FXVAL_FAST_OBSERVER_WRITE_( c ) } inline void rshift( sc_fxval_fast& c, const sc_fxval_fast& a, int b ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) c.m_val = a.m_val * scfx_pow2( -b ); SC_FXVAL_FAST_OBSERVER_WRITE_( c ) } // relational (including equality) operators #define DEFN_REL_OP_T(op,tp) \ inline \ bool \ operator op ( const sc_fxval_fast& a, tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ sc_fxval_fast tmp( b ); \ return ( a.m_val op tmp.m_val ); \ } \ \ inline \ bool \ operator op ( tp a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ sc_fxval_fast tmp( a ); \ return ( tmp.m_val op b.m_val ); \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_REL_OP_OTHER(op) \ DEFN_REL_OP_T(op,int64) \ DEFN_REL_OP_T(op,uint64) \ DEFN_REL_OP_T(op,const sc_int_base&) \ DEFN_REL_OP_T(op,const sc_uint_base&) \ DEFN_REL_OP_T(op,const sc_signed&) \ DEFN_REL_OP_T(op,const sc_unsigned&) #else #define DEFN_REL_OP_OTHER(op) #endif #define DEFN_REL_OP(op) \ inline \ bool \ operator op ( const sc_fxval_fast& a, const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( a ) \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ return ( a.m_val op b.m_val ); \ } \ \ DEFN_REL_OP_T(op,int) \ DEFN_REL_OP_T(op,unsigned int) \ DEFN_REL_OP_T(op,long) \ DEFN_REL_OP_T(op,unsigned long) \ DEFN_REL_OP_T(op,float) \ DEFN_REL_OP_T(op,double) \ DEFN_REL_OP_T(op,const char*) \ DEFN_REL_OP_OTHER(op) DEFN_REL_OP(<) DEFN_REL_OP(<=) DEFN_REL_OP(>) DEFN_REL_OP(>=) DEFN_REL_OP(==) DEFN_REL_OP(!=) #undef DEFN_REL_OP_T #undef DEFN_REL_OP_OTHER #undef DEFN_REL_OP // assignment operators inline sc_fxval_fast& sc_fxval_fast::operator = ( const sc_fxval_fast& a ) { if( &a != this ) { SC_FXVAL_FAST_OBSERVER_READ_( a ) m_val = a.m_val; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) } return *this; } #define DEFN_ASN_OP_T(tp) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator = ( tp a ) \ { \ sc_fxval_fast tmp( a ); \ m_val = tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } DEFN_ASN_OP_T(int) DEFN_ASN_OP_T(unsigned int) DEFN_ASN_OP_T(long) DEFN_ASN_OP_T(unsigned long) DEFN_ASN_OP_T(float) DEFN_ASN_OP_T(double) DEFN_ASN_OP_T(const char*) DEFN_ASN_OP_T(const sc_fxval&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_ASN_OP_T(int64) DEFN_ASN_OP_T(uint64) DEFN_ASN_OP_T(const sc_int_base&) DEFN_ASN_OP_T(const sc_uint_base&) DEFN_ASN_OP_T(const sc_signed&) DEFN_ASN_OP_T(const sc_unsigned&) #endif #undef DEFN_ASN_OP_T #define DEFN_ASN_OP_T(op,tp) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator op ( tp b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ sc_fxval_fast tmp( b ); \ m_val op tmp.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ inline \ sc_fxval_fast& \ sc_fxval_fast::operator op ( const sc_fxval_fast& b ) \ { \ SC_FXVAL_FAST_OBSERVER_READ_( *this ) \ SC_FXVAL_FAST_OBSERVER_READ_( b ) \ m_val op b.m_val; \ SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) \ return *this; \ } \ \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP inline sc_fxval_fast& sc_fxval_fast::operator <<= ( int b ) { SC_FXVAL_FAST_OBSERVER_READ_( *this ) m_val *= scfx_pow2( b ); SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxval_fast& sc_fxval_fast::operator >>= ( int b ) { SC_FXVAL_FAST_OBSERVER_READ_( *this ) m_val *= scfx_pow2( -b ); SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return *this; } // auto-increment and auto-decrement inline const sc_fxval_fast sc_fxval_fast::operator ++ ( int ) { SC_FXVAL_FAST_OBSERVER_READ_( *this ) SC_FXVAL_FAST_OBSERVER_READ_( *this ) double c = m_val; m_val = m_val + 1; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return sc_fxval_fast( c ); } inline const sc_fxval_fast sc_fxval_fast::operator -- ( int ) { SC_FXVAL_FAST_OBSERVER_READ_( *this ) SC_FXVAL_FAST_OBSERVER_READ_( *this ) double c = m_val; m_val = m_val - 1; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return sc_fxval_fast( c ); } inline sc_fxval_fast& sc_fxval_fast::operator ++ () { SC_FXVAL_FAST_OBSERVER_READ_( *this ) m_val = m_val + 1; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return *this; } inline sc_fxval_fast& sc_fxval_fast::operator -- () { SC_FXVAL_FAST_OBSERVER_READ_( *this ) m_val = m_val - 1; SC_FXVAL_FAST_OBSERVER_WRITE_( *this ) return *this; } // implicit conversion inline sc_fxval_fast::operator double() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) return m_val; } // explicit conversion to primitive types inline short sc_fxval_fast::to_short() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned short sc_fxval_fast::to_ushort() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline int64 sc_fxval_fast::to_int64() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline int sc_fxval_fast::to_int() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned int sc_fxval_fast::to_uint() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline uint64 sc_fxval_fast::to_uint64() const { // SC_FXVAL_FAST_OBSERVER_READ_ in is_normal if (!is_normal()) { return 0; } int exponent; double mantissa_dbl = frexp(m_val, &exponent); uint64 mantissa = static_cast(fabs(mantissa_dbl) * (UINT64_ONE << 53)); exponent -= 53; if (!(-64 < exponent && exponent < 64)) { return 0; } mantissa = exponent >= 0 ? mantissa << exponent : mantissa >> -exponent; return mantissa_dbl >= 0 ? mantissa : -mantissa; } inline long sc_fxval_fast::to_long() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline unsigned long sc_fxval_fast::to_ulong() const { // SC_FXVAL_FAST_OBSERVER_READ_ in to_uint64 return static_cast( to_uint64() ); } inline float sc_fxval_fast::to_float() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) return static_cast( m_val ); } inline double sc_fxval_fast::to_double() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) return m_val; } // query value inline bool sc_fxval_fast::is_neg() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return ( id.negative() != 0 ); } inline bool sc_fxval_fast::is_zero() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return id.is_zero(); } inline bool sc_fxval_fast::is_nan() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return id.is_nan(); } inline bool sc_fxval_fast::is_inf() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return id.is_inf(); } inline bool sc_fxval_fast::is_normal() const { SC_FXVAL_FAST_OBSERVER_READ_( *this ) scfx_ieee_double id( m_val ); return ( id.is_normal() || id.is_subnormal() || id.is_zero() ); } inline bool sc_fxval_fast::rounding_flag() const { // does not apply to sc_fxval_fast; included for API compatibility return false; } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_fxval_fast& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_fxval_fast& a ) { a.scan( is ); return is; } } // namespace sc_dt #undef SCFX_EXPLICIT_ #undef SCFX_EXPLICIT_OTHER_ #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/sc_ufixed.h0000644000175000017500000005464414342422106021407 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_ufixed.h - Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_ufixed.h,v $ // Revision 1.2 2011/01/19 18:57:40 acg // Andy Goodrich: changes for IEEE_1666_2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:58 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_UFIXED_H #define SC_UFIXED_H #include "sysc/datatypes/fx/sc_ufix.h" namespace sc_dt { // classes defined in this module template class sc_ufixed; template class sc_ufixed_fast; // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_ufixed // // "Constrained" unsigned fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- template class sc_ufixed : public sc_ufix { public: // constructors explicit sc_ufixed( sc_fxnum_observer* = 0 ); explicit sc_ufixed( const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_ufixed( tp, sc_fxnum_observer* = 0 ); \ sc_ufixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); #define DECL_CTORS_T_B(tp) \ explicit sc_ufixed( tp, sc_fxnum_observer* = 0 ); \ sc_ufixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 ); DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_ufixed( const sc_ufixed& ); // assignment operators sc_ufixed& operator = ( const sc_ufixed& ); #define DECL_ASN_OP_T(op,tp) \ sc_ufixed& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_ufix&) DECL_ASN_OP_T(&=,const sc_ufix_fast&) DECL_ASN_OP_T(|=,const sc_ufix&) DECL_ASN_OP_T(|=,const sc_ufix_fast&) DECL_ASN_OP_T(^=,const sc_ufix&) DECL_ASN_OP_T(^=,const sc_ufix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval operator ++ ( int ); const sc_fxval operator -- ( int ); sc_ufixed& operator ++ (); sc_ufixed& operator -- (); }; // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_ufixed_fast // // "Constrained" unsigned fixed-point class; limited precision. // ---------------------------------------------------------------------------- template class sc_ufixed_fast : public sc_ufix_fast { public: // constructors explicit sc_ufixed_fast( sc_fxnum_fast_observer* = 0 ); explicit sc_ufixed_fast( const sc_fxcast_switch&, sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_A(tp) \ sc_ufixed_fast( tp, sc_fxnum_fast_observer* = 0 ); \ sc_ufixed_fast( tp, const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); #define DECL_CTORS_T_B(tp) \ explicit sc_ufixed_fast( tp, sc_fxnum_fast_observer* = 0 ); \ sc_ufixed_fast( tp, const sc_fxcast_switch&, \ sc_fxnum_fast_observer* = 0 ); DECL_CTORS_T_A(int) DECL_CTORS_T_A(unsigned int) DECL_CTORS_T_A(long) DECL_CTORS_T_A(unsigned long) DECL_CTORS_T_A(float) DECL_CTORS_T_A(double) DECL_CTORS_T_A(const char*) DECL_CTORS_T_A(const sc_fxval&) DECL_CTORS_T_A(const sc_fxval_fast&) DECL_CTORS_T_A(const sc_fxnum&) DECL_CTORS_T_A(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DECL_CTORS_T_B(int64) DECL_CTORS_T_B(uint64) DECL_CTORS_T_B(const sc_int_base&) DECL_CTORS_T_B(const sc_uint_base&) DECL_CTORS_T_B(const sc_signed&) DECL_CTORS_T_B(const sc_unsigned&) #endif #undef DECL_CTORS_T_A #undef DECL_CTORS_T_B // copy constructor sc_ufixed_fast( const sc_ufixed_fast& ); // assignment operators sc_ufixed_fast& operator = ( const sc_ufixed_fast& ); #define DECL_ASN_OP_T(op,tp) \ sc_ufixed_fast& operator op ( tp ); #ifndef SC_FX_EXCLUDE_OTHER #define DECL_ASN_OP_OTHER(op) \ DECL_ASN_OP_T(op,int64) \ DECL_ASN_OP_T(op,uint64) \ DECL_ASN_OP_T(op,const sc_int_base&) \ DECL_ASN_OP_T(op,const sc_uint_base&) \ DECL_ASN_OP_T(op,const sc_signed&) \ DECL_ASN_OP_T(op,const sc_unsigned&) #else #define DECL_ASN_OP_OTHER(op) #endif #define DECL_ASN_OP(op) \ DECL_ASN_OP_T(op,int) \ DECL_ASN_OP_T(op,unsigned int) \ DECL_ASN_OP_T(op,long) \ DECL_ASN_OP_T(op,unsigned long) \ DECL_ASN_OP_T(op,float) \ DECL_ASN_OP_T(op,double) \ DECL_ASN_OP_T(op,const char*) \ DECL_ASN_OP_T(op,const sc_fxval&) \ DECL_ASN_OP_T(op,const sc_fxval_fast&) \ DECL_ASN_OP_T(op,const sc_fxnum&) \ DECL_ASN_OP_T(op,const sc_fxnum_fast&) \ DECL_ASN_OP_OTHER(op) DECL_ASN_OP(=) DECL_ASN_OP(*=) DECL_ASN_OP(/=) DECL_ASN_OP(+=) DECL_ASN_OP(-=) DECL_ASN_OP_T(<<=,int) DECL_ASN_OP_T(>>=,int) DECL_ASN_OP_T(&=,const sc_ufix&) DECL_ASN_OP_T(&=,const sc_ufix_fast&) DECL_ASN_OP_T(|=,const sc_ufix&) DECL_ASN_OP_T(|=,const sc_ufix_fast&) DECL_ASN_OP_T(^=,const sc_ufix&) DECL_ASN_OP_T(^=,const sc_ufix_fast&) #undef DECL_ASN_OP_T #undef DECL_ASN_OP_OTHER #undef DECL_ASN_OP // auto-increment and auto-decrement const sc_fxval_fast operator ++ ( int ); const sc_fxval_fast operator -- ( int ); sc_ufixed_fast& operator ++ (); sc_ufixed_fast& operator -- (); }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_ufixed // // "Constrained" unsigned fixed-point class; arbitrary precision. // ---------------------------------------------------------------------------- template inline sc_ufixed::sc_ufixed( sc_fxnum_observer* observer_ ) : sc_ufix( W, I, Q, O, N, observer_ ) {} template inline sc_ufixed::sc_ufixed( const sc_fxcast_switch& cast_sw, sc_fxnum_observer* observer_ ) : sc_ufix( W, I, Q, O, N, cast_sw, observer_ ) {} #define DEFN_CTORS_T(tp) \ template \ inline \ sc_ufixed::sc_ufixed( tp a, \ sc_fxnum_observer* observer_ ) \ : sc_ufix( a, W, I, Q, O, N, observer_ ) \ {} \ \ template \ inline \ sc_ufixed::sc_ufixed( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_observer* observer_ ) \ : sc_ufix( a, W, I, Q, O, N, cast_sw, observer_ ) \ {} DEFN_CTORS_T(int) DEFN_CTORS_T(unsigned int) DEFN_CTORS_T(long) DEFN_CTORS_T(unsigned long) DEFN_CTORS_T(float) DEFN_CTORS_T(double) DEFN_CTORS_T(const char*) DEFN_CTORS_T(const sc_fxval&) DEFN_CTORS_T(const sc_fxval_fast&) DEFN_CTORS_T(const sc_fxnum&) DEFN_CTORS_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T(int64) DEFN_CTORS_T(uint64) DEFN_CTORS_T(const sc_int_base&) DEFN_CTORS_T(const sc_uint_base&) DEFN_CTORS_T(const sc_signed&) DEFN_CTORS_T(const sc_unsigned&) #endif #undef DEFN_CTORS_T // copy constructor template inline sc_ufixed::sc_ufixed( const sc_ufixed& a ) : sc_ufix( a, W, I, Q, O, N ) {} // assignment operators template inline sc_ufixed& sc_ufixed::operator = ( const sc_ufixed& a ) { sc_ufix::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ template \ inline \ sc_ufixed& \ sc_ufixed::operator op ( tp a ) \ { \ sc_ufix::operator op ( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) DEFN_ASN_OP_T(&=,const sc_ufix&) DEFN_ASN_OP_T(&=,const sc_ufix_fast&) DEFN_ASN_OP_T(|=,const sc_ufix&) DEFN_ASN_OP_T(|=,const sc_ufix_fast&) DEFN_ASN_OP_T(^=,const sc_ufix&) DEFN_ASN_OP_T(^=,const sc_ufix_fast&) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP // auto-increment and auto-decrement template inline const sc_fxval sc_ufixed::operator ++ ( int ) { return sc_fxval( sc_ufix::operator ++ ( 0 ) ); } template inline const sc_fxval sc_ufixed::operator -- ( int ) { return sc_fxval( sc_ufix::operator -- ( 0 ) ); } template inline sc_ufixed& sc_ufixed::operator ++ () { sc_ufix::operator ++ (); return *this; } template inline sc_ufixed& sc_ufixed::operator -- () { sc_ufix::operator -- (); return *this; } // ---------------------------------------------------------------------------- // TEMPLATE CLASS : sc_ufixed_fast // // "Constrained" unsigned fixed-point class; limited precision. // ---------------------------------------------------------------------------- template inline sc_ufixed_fast::sc_ufixed_fast( sc_fxnum_fast_observer* observer_ ) : sc_ufix_fast( W, I, Q, O, N, observer_ ) {} template inline sc_ufixed_fast::sc_ufixed_fast( const sc_fxcast_switch& cast_sw, sc_fxnum_fast_observer* observer_ ) : sc_ufix_fast( W, I, Q, O, N, cast_sw, observer_ ) {} #define DEFN_CTORS_T(tp) \ template \ inline \ sc_ufixed_fast::sc_ufixed_fast( tp a, \ sc_fxnum_fast_observer* observer_ )\ : sc_ufix_fast( a, W, I, Q, O, N, observer_ ) \ {} \ \ template \ inline \ sc_ufixed_fast::sc_ufixed_fast( tp a, \ const sc_fxcast_switch& cast_sw, \ sc_fxnum_fast_observer* observer_ )\ : sc_ufix_fast( a, W, I, Q, O, N, cast_sw, observer_ ) \ {} DEFN_CTORS_T(int) DEFN_CTORS_T(unsigned int) DEFN_CTORS_T(long) DEFN_CTORS_T(unsigned long) DEFN_CTORS_T(float) DEFN_CTORS_T(double) DEFN_CTORS_T(const char*) DEFN_CTORS_T(const sc_fxval&) DEFN_CTORS_T(const sc_fxval_fast&) DEFN_CTORS_T(const sc_fxnum&) DEFN_CTORS_T(const sc_fxnum_fast&) #ifndef SC_FX_EXCLUDE_OTHER DEFN_CTORS_T(int64) DEFN_CTORS_T(uint64) DEFN_CTORS_T(const sc_int_base&) DEFN_CTORS_T(const sc_uint_base&) DEFN_CTORS_T(const sc_signed&) DEFN_CTORS_T(const sc_unsigned&) #endif #undef DEFN_CTORS_T // copy constructor template inline sc_ufixed_fast::sc_ufixed_fast( const sc_ufixed_fast& a ) : sc_ufix_fast( a, W, I, Q, O, N ) {} // assignment operators template inline sc_ufixed_fast& sc_ufixed_fast::operator = ( const sc_ufixed_fast& a ) { sc_ufix_fast::operator = ( a ); return *this; } #define DEFN_ASN_OP_T(op,tp) \ template \ inline \ sc_ufixed_fast& \ sc_ufixed_fast::operator op ( tp a ) \ { \ sc_ufix_fast::operator op ( a ); \ return *this; \ } #ifndef SC_FX_EXCLUDE_OTHER #define DEFN_ASN_OP_OTHER(op) \ DEFN_ASN_OP_T(op,int64) \ DEFN_ASN_OP_T(op,uint64) \ DEFN_ASN_OP_T(op,const sc_int_base&) \ DEFN_ASN_OP_T(op,const sc_uint_base&) \ DEFN_ASN_OP_T(op,const sc_signed&) \ DEFN_ASN_OP_T(op,const sc_unsigned&) #else #define DEFN_ASN_OP_OTHER(op) #endif #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,unsigned int) \ DEFN_ASN_OP_T(op,long) \ DEFN_ASN_OP_T(op,unsigned long) \ DEFN_ASN_OP_T(op,float) \ DEFN_ASN_OP_T(op,double) \ DEFN_ASN_OP_T(op,const char*) \ DEFN_ASN_OP_T(op,const sc_fxval&) \ DEFN_ASN_OP_T(op,const sc_fxval_fast&) \ DEFN_ASN_OP_T(op,const sc_fxnum&) \ DEFN_ASN_OP_T(op,const sc_fxnum_fast&) \ DEFN_ASN_OP_OTHER(op) DEFN_ASN_OP(=) DEFN_ASN_OP(*=) DEFN_ASN_OP(/=) DEFN_ASN_OP(+=) DEFN_ASN_OP(-=) DEFN_ASN_OP_T(<<=,int) DEFN_ASN_OP_T(>>=,int) DEFN_ASN_OP_T(&=,const sc_ufix&) DEFN_ASN_OP_T(&=,const sc_ufix_fast&) DEFN_ASN_OP_T(|=,const sc_ufix&) DEFN_ASN_OP_T(|=,const sc_ufix_fast&) DEFN_ASN_OP_T(^=,const sc_ufix&) DEFN_ASN_OP_T(^=,const sc_ufix_fast&) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP_OTHER #undef DEFN_ASN_OP // auto-increment and auto-decrement template inline const sc_fxval_fast sc_ufixed_fast::operator ++ ( int ) { return sc_fxval_fast( sc_ufix_fast::operator ++ ( 0 ) ); } template inline const sc_fxval_fast sc_ufixed_fast::operator -- ( int ) { return sc_fxval_fast( sc_ufix_fast::operator -- ( 0 ) ); } template inline sc_ufixed_fast& sc_ufixed_fast::operator ++ () { sc_ufix_fast::operator ++ (); return *this; } template inline sc_ufixed_fast& sc_ufixed_fast::operator -- () { sc_ufix_fast::operator -- (); return *this; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/fx/fx.h0000644000175000017500000000376514342422106020051 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** fx.h - Master include file for the fixed-point types. Original Author: Martin Janssen, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: fx.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:57 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef FX_H #define FX_H #include "sysc/datatypes/fx/sc_fixed.h" #include "sysc/datatypes/fx/sc_fxcast_switch.h" #include "sysc/datatypes/fx/sc_fxtype_params.h" #include "sysc/datatypes/fx/sc_ufixed.h" #include "sysc/datatypes/fx/scfx_other_defs.h" #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/0000755000175000017500000000000014342422106017425 5ustar carstencarstensystemc-2.3.4/src/sysc/datatypes/int/sc_int_base.h0000644000175000017500000007456514342422106022070 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_int_base.h -- A signed integer whose length is less than 64 bit. Unlike arbitrary precision, arithmetic and bitwise operations are performed using the native types (hence capped at 64 bits). The sc_int integer is useful when the user does not need arbitrary precision and the performance is superior to sc_bigint/sc_biguint. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Resolved ambiguity with sc_(un)signed. - Merged the code for 64- and 32-bit versions via the constants in sc_nbdefs.h. - Eliminated redundant file inclusions. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_int_base.h,v $ // Revision 1.3 2011/08/24 22:05:45 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.4 2006/05/08 17:50:01 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_INT_BASE_H #define SC_INT_BASE_H #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/kernel/sc_object.h" #include "sysc/datatypes/misc/sc_value_base.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/int/sc_length_param.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/utils/sc_temporary.h" namespace sc_dt { class sc_concatref; // classes defined in this module class sc_int_bitref_r; class sc_int_bitref; class sc_int_subref_r; class sc_int_subref; class sc_int_base; class sc_signed_subref_r; class sc_unsigned_subref_r; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_signed; class sc_unsigned; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; } // namespace sc_dt // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; } // namespace sc_core namespace sc_dt { extern SC_API const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH]; // friend operator declarations // relational operators inline bool operator == ( const sc_int_base& a, const sc_int_base& b ); inline bool operator != ( const sc_int_base& a, const sc_int_base& b ); inline bool operator < ( const sc_int_base& a, const sc_int_base& b ); inline bool operator <= ( const sc_int_base& a, const sc_int_base& b ); inline bool operator > ( const sc_int_base& a, const sc_int_base& b ); inline bool operator >= ( const sc_int_base& a, const sc_int_base& b ); // ---------------------------------------------------------------------------- // CLASS : sc_int_bitref_r // // Proxy class for sc_int bit selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_int_bitref_r : public sc_value_base { friend class sc_int_base; protected: // constructor sc_int_bitref_r() : sc_value_base(), m_index(), m_obj_p() {} // initializer for sc_core::sc_vpool: void initialize( const sc_int_base* obj_p, int index_ ) { m_obj_p = (sc_int_base*)obj_p; m_index = index_; } public: // copy constructor sc_int_bitref_r( const sc_int_bitref_r& a ) : sc_value_base(a), m_index(a.m_index), m_obj_p(a.m_obj_p) {} // destructor virtual ~sc_int_bitref_r() {} // capacity int length() const { return 1; } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation support virtual int concat_length( bool *xz_present_p ) const { if (xz_present_p) *xz_present_p = false; return 1; } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; dst_p[word_i] &= ~bit_mask; return false; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { bool non_zero; int bit_mask = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; if ( operator uint64() ) { dst_p[word_i] |= bit_mask; non_zero = true; } else { dst_p[word_i] &= ~bit_mask; non_zero = false; } return non_zero; } virtual uint64 concat_get_uint64() const { return operator uint64(); } // implicit conversions operator uint64 () const; bool operator ! () const; bool operator ~ () const; // explicit conversions uint64 value() const { return operator uint64(); } bool to_bool() const { return operator uint64(); } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_bool(); } protected: int m_index; sc_int_base* m_obj_p; private: // disabled sc_int_bitref_r& operator = ( const sc_int_bitref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_int_bitref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_int_bitref // // Proxy class for sc_int bit selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_int_bitref : public sc_int_bitref_r { friend class sc_int_base; friend class sc_core::sc_vpool; // constructor sc_int_bitref() : sc_int_bitref_r() {} public: // copy constructor sc_int_bitref( const sc_int_bitref& a ) : sc_int_bitref_r( a ) {} // assignment operators sc_int_bitref& operator = ( const sc_int_bitref_r& b ); sc_int_bitref& operator = ( const sc_int_bitref& b ); sc_int_bitref& operator = ( bool b ); sc_int_bitref& operator &= ( bool b ); sc_int_bitref& operator |= ( bool b ); sc_int_bitref& operator ^= ( bool b ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); public: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_int_bitref& ); // ---------------------------------------------------------------------------- // CLASS : sc_int_subref_r // // Proxy class for sc_int part selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_int_subref_r : public sc_value_base { friend class sc_int_base; friend class sc_int_signal; friend class sc_int_subref; protected: // constructor sc_int_subref_r() : sc_value_base(), m_left(0), m_obj_p(0), m_right(0) {} // initializer for sc_core::sc_vpool: void initialize( const sc_int_base* obj_p, int left_i, int right_i ) { m_obj_p = (sc_int_base*)obj_p; m_left = left_i; m_right = right_i; } public: // copy constructor sc_int_subref_r( const sc_int_subref_r& a ) : sc_value_base(a), m_left( a.m_left ), m_obj_p( a.m_obj_p ), m_right( a.m_right ) {} // destructor virtual ~sc_int_subref_r() {} // capacity int length() const { return ( m_left - m_right + 1 ); } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return length(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const { int len = length(); uint64 val = operator uint_type(); if ( len < 64 ) return (uint64)(val & ~((uint_type)-1 << len)); else return (uint64)val; } // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // implicit conversion to uint_type operator uint_type () const; // explicit conversions uint_type value() const { return operator uint_type(); } int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } protected: int m_left; sc_int_base* m_obj_p; int m_right; private: const sc_int_subref_r& operator = ( const sc_int_subref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_int_subref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_int_subref // // Proxy class for sc_int part selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_int_subref : public sc_int_subref_r { friend class sc_int_base; friend class sc_core::sc_vpool; protected: // constructor sc_int_subref() : sc_int_subref_r() {} public: // copy constructor sc_int_subref( const sc_int_subref& a ) : sc_int_subref_r( a ) {} // assignment operators sc_int_subref& operator = ( int_type v ); sc_int_subref& operator = ( const sc_int_base& a ); sc_int_subref& operator = ( const sc_int_subref_r& a ) { return operator = ( a.operator uint_type() ); } sc_int_subref& operator = ( const sc_int_subref& a ) { return operator = ( a.operator uint_type() ); } template< class T > sc_int_subref& operator = ( const sc_generic_base& a ) { return operator = ( a->to_int64() ); } sc_int_subref& operator = ( const char* a ); sc_int_subref& operator = ( unsigned long a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( long a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( unsigned int a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( int a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( uint64 a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( double a ) { return operator = ( (int_type) a ); } sc_int_subref& operator = ( const sc_signed& ); sc_int_subref& operator = ( const sc_unsigned& ); sc_int_subref& operator = ( const sc_bv_base& ); sc_int_subref& operator = ( const sc_lv_base& ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); public: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_int_subref& ); // ---------------------------------------------------------------------------- // CLASS : sc_int_base // // Base class for sc_int. // ---------------------------------------------------------------------------- class SC_API sc_int_base : public sc_value_base { friend class sc_int_bitref_r; friend class sc_int_bitref; friend class sc_int_subref_r; friend class sc_int_subref; // support methods void invalid_length() const; void invalid_index( int i ) const; void invalid_range( int l, int r ) const; void check_length() const { if( m_len <= 0 || m_len > SC_INTWIDTH ) { invalid_length(); } } void check_index( int i ) const { if( i < 0 || i >= m_len ) { invalid_index( i ); } } void check_range( int l, int r ) const { if( r < 0 || l >= m_len || l < r ) { invalid_range( l, r ); } } void check_value() const; void extend_sign() { #ifdef DEBUG_SYSTEMC check_value(); #endif m_val = ( m_val << m_ulen >> m_ulen ); } public: // constructors explicit sc_int_base( int w = sc_length_param().len() ) : m_val( 0 ), m_len( w ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); } sc_int_base( int_type v, int w ) : m_val( v ), m_len( w ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); extend_sign(); } sc_int_base( const sc_int_base& a ) : sc_value_base(a), m_val( a.m_val ), m_len( a.m_len ), m_ulen( a.m_ulen ) {} explicit sc_int_base( const sc_int_subref_r& a ) : m_val( a ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { extend_sign(); } template< class T > explicit sc_int_base( const sc_generic_base& a ) : m_val( a->to_int64() ), m_len( a->length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); extend_sign(); } explicit sc_int_base( const sc_signed& a ); explicit sc_int_base( const sc_unsigned& a ); explicit sc_int_base( const sc_bv_base& v ); explicit sc_int_base( const sc_lv_base& v ); explicit sc_int_base( const sc_uint_subref_r& v ); explicit sc_int_base( const sc_signed_subref_r& v ); explicit sc_int_base( const sc_unsigned_subref_r& v ); // destructor virtual ~sc_int_base() {} // assignment operators sc_int_base& operator = ( int_type v ) { m_val = v; extend_sign(); return *this; } sc_int_base& operator = ( const sc_int_base& a ) { m_val = a.m_val; extend_sign(); return *this; } sc_int_base& operator = ( const sc_int_subref_r& a ) { m_val = a; extend_sign(); return *this; } template sc_int_base& operator = ( const sc_generic_base& a ) { m_val = a->to_int64(); extend_sign(); return *this; } sc_int_base& operator = ( const sc_signed& a ); sc_int_base& operator = ( const sc_unsigned& a ); #ifdef SC_INCLUDE_FX sc_int_base& operator = ( const sc_fxval& a ); sc_int_base& operator = ( const sc_fxval_fast& a ); sc_int_base& operator = ( const sc_fxnum& a ); sc_int_base& operator = ( const sc_fxnum_fast& a ); #endif sc_int_base& operator = ( const sc_bv_base& a ); sc_int_base& operator = ( const sc_lv_base& a ); sc_int_base& operator = ( const char* a ); sc_int_base& operator = ( unsigned long a ) { m_val = a; extend_sign(); return *this; } sc_int_base& operator = ( long a ) { m_val = a; extend_sign(); return *this; } sc_int_base& operator = ( unsigned int a ) { m_val = a; extend_sign(); return *this; } sc_int_base& operator = ( int a ) { m_val = a; extend_sign(); return *this; } sc_int_base& operator = ( uint64 a ) { m_val = a; extend_sign(); return *this; } sc_int_base& operator = ( double a ) { m_val = (int_type) a; extend_sign(); return *this; } // arithmetic assignment operators sc_int_base& operator += ( int_type v ) { m_val += v; extend_sign(); return *this; } sc_int_base& operator -= ( int_type v ) { m_val -= v; extend_sign(); return *this; } sc_int_base& operator *= ( int_type v ) { m_val *= v; extend_sign(); return *this; } sc_int_base& operator /= ( int_type v ) { m_val /= v; extend_sign(); return *this; } sc_int_base& operator %= ( int_type v ) { m_val %= v; extend_sign(); return *this; } // bitwise assignment operators sc_int_base& operator &= ( int_type v ) { m_val &= v; extend_sign(); return *this; } sc_int_base& operator |= ( int_type v ) { m_val |= v; extend_sign(); return *this; } sc_int_base& operator ^= ( int_type v ) { m_val ^= v; extend_sign(); return *this; } sc_int_base& operator <<= ( int_type v ) { m_val <<= v; extend_sign(); return *this; } sc_int_base& operator >>= ( int_type v ) { m_val >>= v; /* no sign extension needed */ return *this; } // prefix and postfix increment and decrement operators sc_int_base& operator ++ () // prefix { ++ m_val; extend_sign(); return *this; } const sc_int_base operator ++ ( int ) // postfix { sc_int_base tmp( *this ); ++ m_val; extend_sign(); return tmp; } sc_int_base& operator -- () // prefix { -- m_val; extend_sign(); return *this; } const sc_int_base operator -- ( int ) // postfix { sc_int_base tmp( *this ); -- m_val; extend_sign(); return tmp; } // relational operators friend bool operator == ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val == b.m_val; } friend bool operator != ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val != b.m_val; } friend bool operator < ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val < b.m_val; } friend bool operator <= ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val <= b.m_val; } friend bool operator > ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val > b.m_val; } friend bool operator >= ( const sc_int_base& a, const sc_int_base& b ) { return a.m_val >= b.m_val; } // bit selection sc_int_bitref& operator [] ( int i ); const sc_int_bitref_r& operator [] ( int i ) const; sc_int_bitref& bit( int i ); const sc_int_bitref_r& bit( int i ) const; // part selection sc_int_subref& operator () ( int left, int right ); const sc_int_subref_r& operator () ( int left, int right ) const; sc_int_subref& range( int left, int right ); const sc_int_subref_r& range( int left, int right ) const; // bit access, without bounds checking or sign extension bool test( int i ) const { return ( 0 != (m_val & (UINT_ONE << i)) ); } void set( int i ) { m_val |= (UINT_ONE << i); } void set( int i, bool v ) { v ? m_val |= (UINT_ONE << i) : m_val &= ~(UINT_ONE << i); } // capacity int length() const { return m_len; } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return length(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const { if ( m_len < 64 ) return (uint64)(m_val & ~((uint_type)-1 << m_len)); else return (uint64)m_val; } virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // implicit conversion to int_type operator int_type() const { return m_val; } // explicit conversions int_type value() const { return operator int_type(); } int to_int() const { return (int) m_val; } unsigned int to_uint() const { return (unsigned int) m_val; } long to_long() const { return (long) m_val; } unsigned long to_ulong() const { return (unsigned long) m_val; } int64 to_int64() const { return (int64) m_val; } uint64 to_uint64() const { return (uint64) m_val; } double to_double() const { return (double) m_val; } long long_low() const { return (long) (m_val & UINT64_32ONES); } long long_high() const { return (long) ((m_val >> 32) & UINT64_32ONES); } // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } void scan( ::std::istream& is = ::std::cin ); protected: int_type m_val; // value int m_len; // length int m_ulen; // unused length }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_int_base& ); inline ::std::istream& operator >> ( ::std::istream&, sc_int_base& ); // ---------------------------------------------------------------------------- // CLASS : sc_int_bitref_r // // Proxy class for sc_int bit selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to uint64 inline sc_int_bitref_r::operator uint64 () const { return m_obj_p->test( m_index ); } inline bool sc_int_bitref_r::operator ! () const { return ! m_obj_p->test( m_index ); } inline bool sc_int_bitref_r::operator ~ () const { return ! m_obj_p->test( m_index ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_int_bitref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_int_bitref // // Proxy class for sc_int bit selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline sc_int_bitref& sc_int_bitref::operator = ( const sc_int_bitref_r& b ) { m_obj_p->set( m_index, (bool) b ); m_obj_p->extend_sign(); return *this; } inline sc_int_bitref& sc_int_bitref::operator = ( const sc_int_bitref& b ) { m_obj_p->set( m_index, (bool) b ); m_obj_p->extend_sign(); return *this; } inline sc_int_bitref& sc_int_bitref::operator = ( bool b ) { m_obj_p->set( m_index, b ); m_obj_p->extend_sign(); return *this; } inline sc_int_bitref& sc_int_bitref::operator &= ( bool b ) { if( ! b ) { m_obj_p->set( m_index, b ); m_obj_p->extend_sign(); } return *this; } inline sc_int_bitref& sc_int_bitref::operator |= ( bool b ) { if( b ) { m_obj_p->set( m_index, b ); m_obj_p->extend_sign(); } return *this; } inline sc_int_bitref& sc_int_bitref::operator ^= ( bool b ) { if( b ) { m_obj_p->m_val ^= (UINT_ONE << m_index); m_obj_p->extend_sign(); } return *this; } inline ::std::istream& operator >> ( ::std::istream& is, sc_int_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_int_subref_r // // Proxy class for sc_int part selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to int_type inline sc_int_subref_r::operator uint_type() const { uint_type /*int_type*/ val = m_obj_p->m_val; int uleft = SC_INTWIDTH - (m_left + 1); int uright = uleft + m_right; return ( val << uleft >> uright ); } // reduce methods inline bool sc_int_subref_r::and_reduce() const { sc_int_base a( *this ); return a.and_reduce(); } inline bool sc_int_subref_r::or_reduce() const { sc_int_base a( *this ); return a.or_reduce(); } inline bool sc_int_subref_r::xor_reduce() const { sc_int_base a( *this ); return a.xor_reduce(); } // explicit conversions inline int sc_int_subref_r::to_int() const { int result = static_cast(operator uint_type()); return result; } inline unsigned int sc_int_subref_r::to_uint() const { unsigned int result = static_cast(operator uint_type()); return result; } inline long sc_int_subref_r::to_long() const { long result = static_cast(operator uint_type()); return result; } inline unsigned long sc_int_subref_r::to_ulong() const { unsigned long result = static_cast(operator uint_type()); return result; } inline int64 sc_int_subref_r::to_int64() const { int64 result = operator uint_type(); return result; } inline uint64 sc_int_subref_r::to_uint64() const { uint64 result = operator uint_type(); return result; } inline double sc_int_subref_r::to_double() const { double result = static_cast(operator uint_type()); return result; } // explicit conversion to character string inline const std::string sc_int_subref_r::to_string( sc_numrep numrep ) const { sc_uint_base a(length()); a = operator uint_type(); return a.to_string( numrep ); } inline const std::string sc_int_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { sc_uint_base a(length()); a = operator uint_type(); return a.to_string( numrep, w_prefix ); } // functional notation for the reduce methods inline bool and_reduce( const sc_int_subref_r& a ) { return a.and_reduce(); } inline bool nand_reduce( const sc_int_subref_r& a ) { return a.nand_reduce(); } inline bool or_reduce( const sc_int_subref_r& a ) { return a.or_reduce(); } inline bool nor_reduce( const sc_int_subref_r& a ) { return a.nor_reduce(); } inline bool xor_reduce( const sc_int_subref_r& a ) { return a.xor_reduce(); } inline bool xnor_reduce( const sc_int_subref_r& a ) { return a.xnor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_int_subref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_int_subref // // Proxy class for sc_int part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline sc_int_subref& sc_int_subref::operator = ( const sc_int_base& a ) { return operator = ( a.operator int_type() ); } inline sc_int_subref& sc_int_subref::operator = ( const char* a ) { sc_int_base aa( length() ); return ( *this = aa = a ); } inline ::std::istream& operator >> ( ::std::istream& is, sc_int_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_int_base // // Base class for sc_int. // ---------------------------------------------------------------------------- // bit selection inline sc_int_bitref& sc_int_base::operator [] ( int i ) { check_index( i ); sc_int_bitref* result_p = sc_int_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline const sc_int_bitref_r& sc_int_base::operator [] ( int i ) const { check_index( i ); sc_int_bitref* result_p = sc_int_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline sc_int_bitref& sc_int_base::bit( int i ) { check_index( i ); sc_int_bitref* result_p = sc_int_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline const sc_int_bitref_r& sc_int_base::bit( int i ) const { check_index( i ); sc_int_bitref* result_p = sc_int_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } // part selection inline sc_int_subref& sc_int_base::operator () ( int left, int right ) { check_range( left, right ); sc_int_subref* result_p = sc_int_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline const sc_int_subref_r& sc_int_base::operator () ( int left, int right ) const { check_range( left, right ); sc_int_subref* result_p = sc_int_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline sc_int_subref& sc_int_base::range( int left, int right ) { check_range( left, right ); sc_int_subref* result_p = sc_int_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline const sc_int_subref_r& sc_int_base::range( int left, int right ) const { check_range( left, right ); sc_int_subref* result_p = sc_int_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } // functional notation for the reduce methods inline bool and_reduce( const sc_int_base& a ) { return a.and_reduce(); } inline bool nand_reduce( const sc_int_base& a ) { return a.nand_reduce(); } inline bool or_reduce( const sc_int_base& a ) { return a.or_reduce(); } inline bool nor_reduce( const sc_int_base& a ) { return a.nor_reduce(); } inline bool xor_reduce( const sc_int_base& a ) { return a.xor_reduce(); } inline bool xnor_reduce( const sc_int_base& a ) { return a.xnor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_int_base& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_int_base& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_length_param.cpp0000644000175000017500000000545314342422106023266 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_length_param.cpp - Original Author: Martin Janssen, Synopsys, Inc., 2002-03-19 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_length_param.cpp,v $ // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include "sysc/datatypes/int/sc_length_param.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_phash; } // namespace sc_core namespace sc_dt { template class SC_API sc_global; template class SC_API sc_context; // ---------------------------------------------------------------------------- // CLASS : sc_length_param // // Length parameter type. // ---------------------------------------------------------------------------- const std::string sc_length_param::to_string() const { std::stringstream ss; print(ss); return ss.str(); } void sc_length_param::print( ::std::ostream& os ) const { os << "(" << m_len << ")"; } void sc_length_param::dump( ::std::ostream& os ) const { os << "sc_length_param" << ::std::endl; os << "(" << ::std::endl; os << "len = " << m_len << ::std::endl; os << ")" << ::std::endl; } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_nbexterns.h0000644000175000017500000001024214342422106022272 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbexterns.h -- External functions for both sc_signed and sc_unsigned classes. These functions work on two parameters u and v, and copy the result to the first parameter u. This is also the reason that they are suffixed with _on_help. The vec_* functions are called through either these functions or those in sc_nbfriends.cpp. The functions in sc_nbfriends.cpp perform their work on two inputs u and v, and return the result object. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_nbexterns.h,v $ // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_NBEXTERNS_H #define SC_NBEXTERNS_H #include "sysc/datatypes/int/sc_nbutils.h" namespace sc_dt { extern void add_on_help(small_type &us, int unb, int und, sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); extern void mul_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); void div_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); extern void mod_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); extern void mul_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); void div_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); extern void mod_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd); extern void and_on_help(small_type us, int unb, int und, sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); extern void or_on_help(small_type us, int unb, int und, sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); extern void xor_on_help(small_type us, int unb, int und, sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_biguint.h0000644000175000017500000001535614342422106021736 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_biguint.h -- Template version of sc_unsigned. This class enables compile-time bit widths for sc_unsigned numbers. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Gene Bushayev, Synopsys, Inc. Description of Modification: - Interface between sc_bigint and sc_bv/sc_lv. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_biguint.h,v $ // Revision 1.2 2011/02/18 20:19:14 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_BIGUINT_H #define SC_BIGUINT_H #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" namespace sc_dt { // classes defined in this module template class sc_biguint; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_biguint // // Arbitrary size unsigned integer type. // ---------------------------------------------------------------------------- #ifdef SC_MAX_NBITS template< int W = SC_MAX_NBITS > #else template< int W > #endif class sc_biguint : public sc_unsigned { public: // constructors sc_biguint() : sc_unsigned( W ) {} sc_biguint( const sc_biguint& v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const sc_unsigned& v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const sc_unsigned_subref& v ) : sc_unsigned( W ) { *this = v; } template< class T > sc_biguint( const sc_generic_base& a ) : sc_unsigned( W ) { a->to_sc_unsigned(*this); } sc_biguint( const sc_signed& v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const sc_signed_subref& v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const char* v ) : sc_unsigned( W ) { *this = v; } sc_biguint( int64 v ) : sc_unsigned( W ) { *this = v; } sc_biguint( uint64 v ) : sc_unsigned( W ) { *this = v; } sc_biguint( long v ) : sc_unsigned( W ) { *this = v; } sc_biguint( unsigned long v ) : sc_unsigned( W ) { *this = v; } sc_biguint( int v ) : sc_unsigned( W ) { *this = v; } sc_biguint( unsigned int v ) : sc_unsigned( W ) { *this = v; } sc_biguint( double v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const sc_bv_base& v ) : sc_unsigned( W ) { *this = v; } sc_biguint( const sc_lv_base& v ) : sc_unsigned( W ) { *this = v; } #ifdef SC_INCLUDE_FX explicit sc_biguint( const sc_fxval& v ) : sc_unsigned( W ) { *this = v; } explicit sc_biguint( const sc_fxval_fast& v ) : sc_unsigned( W ) { *this = v; } explicit sc_biguint( const sc_fxnum& v ) : sc_unsigned( W ) { *this = v; } explicit sc_biguint( const sc_fxnum_fast& v ) : sc_unsigned( W ) { *this = v; } #endif #ifndef SC_MAX_NBITS // destructor ~sc_biguint() {} #endif // assignment operators sc_biguint& operator = ( const sc_biguint& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_unsigned& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_unsigned_subref& v ) { sc_unsigned::operator = ( v ); return *this; } template< class T > sc_biguint& operator = ( const sc_generic_base& a ) { a->to_sc_unsigned(*this); return *this; } sc_biguint& operator = ( const sc_signed& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_signed_subref& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const char* v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( int64 v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( uint64 v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( long v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( unsigned long v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( int v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( unsigned int v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( double v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_bv_base& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_lv_base& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_int_base& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_uint_base& v ) { sc_unsigned::operator = ( v ); return *this; } #ifdef SC_INCLUDE_FX sc_biguint& operator = ( const sc_fxval& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_fxval_fast& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_fxnum& v ) { sc_unsigned::operator = ( v ); return *this; } sc_biguint& operator = ( const sc_fxnum_fast& v ) { sc_unsigned::operator = ( v ); return *this; } #endif }; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_int.h0000644000175000017500000002075414342422106021065 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_int.h -- A signed integer whose length is less than 64 bits. Unlike arbitrary precision, arithmetic and bitwise operations are performed using the native types (hence capped at 64 bits). The sc_int integer is useful when the user does not need arbitrary precision and the performance is superior to sc_bigint/sc_biguint. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Resolved ambiguity with sc_(un)signed. - Merged the code for 64- and 32-bit versions via the constants in sc_nbdefs.h. - Eliminated redundant file inclusions. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_int.h,v $ // Revision 1.2 2011/02/18 20:19:14 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_INT_H #define SC_INT_H #include "sysc/datatypes/int/sc_int_base.h" namespace sc_dt { // classes defined in this module template class sc_int; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_int // // Template class sc_int is the interface that the user sees. It is // derived from sc_int_base and most of its methods are just wrappers // that call the corresponding method in the parent class. Note that // the length of sc_int datatype is specified as a template parameter. // ---------------------------------------------------------------------------- template class sc_int : public sc_int_base { public: // constructors sc_int() : sc_int_base( W ) {} sc_int( int_type v ) : sc_int_base( v, W ) {} sc_int( const sc_int& a ) : sc_int_base( a ) {} sc_int( const sc_int_base& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( const sc_int_subref_r& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } template< class T > sc_int( const sc_generic_base& a ) : sc_int_base( W ) { sc_int_base::operator = ( a->to_int64() ); } sc_int( const sc_signed& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( const sc_unsigned& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } #ifdef SC_INCLUDE_FX explicit sc_int( const sc_fxval& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } explicit sc_int( const sc_fxval_fast& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } explicit sc_int( const sc_fxnum& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } explicit sc_int( const sc_fxnum_fast& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } #endif sc_int( const sc_bv_base& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( const sc_lv_base& a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( const char* a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( unsigned long a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( long a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( unsigned int a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( int a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( uint64 a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } sc_int( double a ) : sc_int_base( W ) { sc_int_base::operator = ( a ); } // assignment operators sc_int& operator = ( int_type v ) { sc_int_base::operator = ( v ); return *this; } sc_int& operator = ( const sc_int_base& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_int_subref_r& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_int& a ) { m_val = a.m_val; return *this; } template< class T > sc_int& operator = ( const sc_generic_base& a ) { sc_int_base::operator = ( a->to_int64() ); return *this; } sc_int& operator = ( const sc_signed& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_unsigned& a ) { sc_int_base::operator = ( a ); return *this; } #ifdef SC_INCLUDE_FX sc_int& operator = ( const sc_fxval& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_fxval_fast& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_fxnum& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_fxnum_fast& a ) { sc_int_base::operator = ( a ); return *this; } #endif sc_int& operator = ( const sc_bv_base& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const sc_lv_base& a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( const char* a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( unsigned long a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( long a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( unsigned int a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( int a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( uint64 a ) { sc_int_base::operator = ( a ); return *this; } sc_int& operator = ( double a ) { sc_int_base::operator = ( a ); return *this; } // arithmetic assignment operators sc_int& operator += ( int_type v ) { sc_int_base::operator += ( v ); return *this; } sc_int& operator -= ( int_type v ) { sc_int_base::operator -= ( v ); return *this; } sc_int& operator *= ( int_type v ) { sc_int_base::operator *= ( v ); return *this; } sc_int& operator /= ( int_type v ) { sc_int_base::operator /= ( v ); return *this; } sc_int& operator %= ( int_type v ) { sc_int_base::operator %= ( v ); return *this; } // bitwise assignment operators sc_int& operator &= ( int_type v ) { sc_int_base::operator &= ( v ); return *this; } sc_int& operator |= ( int_type v ) { sc_int_base::operator |= ( v ); return *this; } sc_int& operator ^= ( int_type v ) { sc_int_base::operator ^= ( v ); return *this; } sc_int& operator <<= ( int_type v ) { sc_int_base::operator <<= ( v ); return *this; } sc_int& operator >>= ( int_type v ) { sc_int_base::operator >>= ( v ); return *this; } // prefix and postfix increment and decrement operators sc_int& operator ++ () // prefix { sc_int_base::operator ++ (); return *this; } const sc_int operator ++ ( int ) // postfix { return sc_int( sc_int_base::operator ++ ( 0 ) ); } sc_int& operator -- () // prefix { sc_int_base::operator -- (); return *this; } const sc_int operator -- ( int ) // postfix { return sc_int( sc_int_base::operator -- ( 0 ) ); } }; } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_bigint.h0000644000175000017500000001511714342422106021544 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bigint.h -- Template version of sc_signed. This class enables compile-time bit widths for sc_signed numbers. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Gene Bushayev, Synopsys, Inc. Description of Modification: - Interface between sc_bigint and sc_bv/sc_lv. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bigint.h,v $ // Revision 1.2 2011/02/18 20:19:14 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_BIGINT_H #define SC_BIGINT_H #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" namespace sc_dt { // classes defined in this module template class sc_bigint; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bigint // // Arbitrary size signed integer type. // ---------------------------------------------------------------------------- #ifdef SC_MAX_NBITS template< int W = SC_MAX_NBITS > #else template< int W > #endif class sc_bigint : public sc_signed { public: // constructors sc_bigint() : sc_signed( W ) {} sc_bigint( const sc_bigint& v ) : sc_signed( W ) { *this = v; } sc_bigint( const sc_signed& v ) : sc_signed( W ) { *this = v; } sc_bigint( const sc_signed_subref& v ) : sc_signed( W ) { *this = v; } template< class T > sc_bigint( const sc_generic_base& a ) : sc_signed( W ) { a->to_sc_signed(*this); } sc_bigint( const sc_unsigned& v ) : sc_signed( W ) { *this = v; } sc_bigint( const sc_unsigned_subref& v ) : sc_signed( W ) { *this = v; } sc_bigint( const char* v ) : sc_signed( W ) { *this = v; } sc_bigint( int64 v ) : sc_signed( W ) { *this = v; } sc_bigint( uint64 v ) : sc_signed( W ) { *this = v; } sc_bigint( long v ) : sc_signed( W ) { *this = v; } sc_bigint( unsigned long v ) : sc_signed( W ) { *this = v; } sc_bigint( int v ) : sc_signed( W ) { *this = v; } sc_bigint( unsigned int v ) : sc_signed( W ) { *this = v; } sc_bigint( double v ) : sc_signed( W ) { *this = v; } sc_bigint( const sc_bv_base& v ) : sc_signed( W ) { *this = v; } sc_bigint( const sc_lv_base& v ) : sc_signed( W ) { *this = v; } #ifdef SC_INCLUDE_FX explicit sc_bigint( const sc_fxval& v ) : sc_signed( W ) { *this = v; } explicit sc_bigint( const sc_fxval_fast& v ) : sc_signed( W ) { *this = v; } explicit sc_bigint( const sc_fxnum& v ) : sc_signed( W ) { *this = v; } explicit sc_bigint( const sc_fxnum_fast& v ) : sc_signed( W ) { *this = v; } #endif #ifndef SC_MAX_NBITS // destructor ~sc_bigint() {} #endif // assignment operators sc_bigint& operator = ( const sc_bigint& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_signed& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = (const sc_signed_subref& v ) { sc_signed::operator = ( v ); return *this; } template< class T > sc_bigint& operator = ( const sc_generic_base& a ) { a->to_sc_signed(*this); return *this;} sc_bigint& operator = ( const sc_unsigned& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_unsigned_subref& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const char* v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( int64 v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( uint64 v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( long v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( unsigned long v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( int v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( unsigned int v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( double v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_bv_base& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_lv_base& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_int_base& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_uint_base& v ) { sc_signed::operator = ( v ); return *this; } #ifdef SC_INCLUDE_FX sc_bigint& operator = ( const sc_fxval& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_fxval_fast& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_fxnum& v ) { sc_signed::operator = ( v ); return *this; } sc_bigint& operator = ( const sc_fxnum_fast& v ) { sc_signed::operator = ( v ); return *this; } #endif }; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_signed.cpp0000644000175000017500000026101614342422106022075 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signed.cpp -- Arbitrary precision signed arithmetic. This file includes the definitions of sc_signed_bitref, sc_signed_subref, and sc_signed classes. The first two classes are proxy classes to reference one bit and a range of bits of a sc_signed number, respectively. This file also includes sc_nbcommon.cpp and sc_nbfriends.cpp, which contain the definitions shared by sc_unsigned. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_signed.cpp,v $ // Revision 1.6 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.5 2008/12/10 20:38:45 acg // Andy Goodrich: fixed conversion of double values to the digits vector. // The bits above the radix were not being masked off. // // Revision 1.4 2008/06/19 17:47:56 acg // Andy Goodrich: fixes for bugs. See 2.2.1 RELEASENOTES. // // Revision 1.3 2008/04/29 21:20:41 acg // Andy Goodrich: added mask to first word transferred when processing // a negative sc_signed value in sc_signed::concat_get_data(). // // Revision 1.2 2007/11/04 21:27:00 acg // Andy Goodrich: changes to make sure the proper value is returned from // concat_get_data(). // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.5 2006/10/23 19:32:47 acg // Andy Goodrich: further fix for incorrect value being returned from // concat_get_data. This one is in the non-aligned value code. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include #include #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/kernel/sc_macros.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/fx/sc_fix.h" #include "sysc/datatypes/fx/scfx_other_defs.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_vpool; template class SC_API sc_vpool; } // namespace sc_core namespace sc_dt { // Pool of temporary instances: sc_core::sc_vpool sc_signed_bitref::m_pool(9); sc_core::sc_vpool sc_signed_subref::m_pool(9); void sc_signed::invalid_init( const char* type_name, int nb ) const { std::stringstream msg; msg << "sc_signed( "<< type_name << " ) : nb = " << nb << " is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_INIT_FAILED_, msg.str().c_str() ); } // ----------------------------------------------------------------------------- // SECTION: Public members - Invalid selections. // ----------------------------------------------------------------------------- void sc_signed::invalid_index( int i ) const { std::stringstream msg; msg << "sc_bigint bit selection: index = " << i << " violates " "0 <= index <= " << (nbits-1); SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_signed::invalid_range( int l, int r ) const { std::stringstream msg; msg << "sc_bigint part selection: left = " << l << ", right = " << r << "\n" " violates either (" << (nbits-1) << " >= left >= 0) or " "(" << (nbits-1) << " >= right >= 0)"; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // SECTION: Public members. // ---------------------------------------------------------------------------- // Most public members are included from sc_nbcommon.inc. However, some // concatenation support appears here to optimize between the signed and // unsigned cases. // Insert this object's value at the specified place in a vector of biguint // style values. bool sc_signed::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Index to next word to set in dst_p. int end_i; // Index of high order word to set. int left_shift; // Amount to shift value left. sc_digit mask; // Mask for partial word sets. // CALCULATE METRICS FOR DATA MOVEMENT: dst_i = low_i / BITS_PER_DIGIT; end_i = (low_i + nbits - 1) / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; // ALL DATA TO BE MOVED IS IN A SINGLE WORD: mask = ~(~0U << left_shift); dst_p[dst_i] = ( dst_p[dst_i] & ~mask ); dst_i++; for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; return false; } bool sc_signed::concat_get_data( sc_digit* dst_p, int low_i ) const { sc_digit carry; // Carry bit for complements. int dst_i; // Index to next word to set in dst_p. int end_i; // Index of high order word to set. int high_i; // Index w/in word of high order bit. int left_shift; // Amount to shift value left. sc_digit left_word; // High word component for set. sc_digit mask; // Mask for partial word sets. bool result; // True if inserted non-zero data. int right_shift; // Amount to shift value right. sc_digit right_word; // Low word component for set. int src_i; // Index to next word to get from digit. // CALCULATE METRICS FOR DATA MOVEMENT: dst_i = low_i / BITS_PER_DIGIT; high_i = low_i + nbits - 1; end_i = high_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; switch ( sgn ) { // POSITIVE SOURCE VALUE: case SC_POS: result = true; // ALL DATA TO BE MOVED IS IN A SINGLE WORD: if ( dst_i == end_i ) { mask = ~(~0U << left_shift); dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | (digit[0] << left_shift) ) & DIGIT_MASK; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { dst_p[dst_i] = digit[src_i]; } high_i = high_i % BITS_PER_DIGIT; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = digit[src_i] & mask; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { high_i = high_i % BITS_PER_DIGIT; right_shift = BITS_PER_DIGIT - left_shift; mask = ~(~0U << left_shift); right_word = digit[0]; dst_p[dst_i] = (dst_p[dst_i] & mask) | ((right_word << left_shift) & DIGIT_MASK); for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) { left_word = digit[src_i]; dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | (right_word >> right_shift); right_word = left_word; } left_word = (src_i < ndigits) ? digit[src_i] : 0; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = ((left_word << left_shift) | (right_word >> right_shift)) & mask; } break; // SOURCE VALUE IS NEGATIVE: case SC_NEG: // ALL DATA TO BE MOVED IS IN A SINGLE WORD: result = true; if ( dst_i == end_i ) { mask = ~(~0U << nbits); right_word = ((digit[0] ^ DIGIT_MASK) + 1) & mask; mask = ~(~0U << left_shift); dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | (right_word << left_shift) ) & DIGIT_MASK; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { carry = 1; for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { right_word = (digit[src_i] ^ DIGIT_MASK) + carry; dst_p[dst_i] = right_word & DIGIT_MASK; carry = right_word >> BITS_PER_DIGIT; } high_i = high_i % BITS_PER_DIGIT; mask = (~(~1U << high_i)) & DIGIT_MASK; right_word = (src_i < ndigits) ? (digit[src_i] ^ DIGIT_MASK) + carry : DIGIT_MASK + carry; dst_p[dst_i] = right_word & mask; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { high_i = high_i % BITS_PER_DIGIT; right_shift = BITS_PER_DIGIT - left_shift; mask = ~(~0U << left_shift); carry = 1; right_word = (digit[0] ^ DIGIT_MASK) + carry; dst_p[dst_i] = (dst_p[dst_i] & mask) | ((right_word << left_shift) & DIGIT_MASK); carry = right_word >> BITS_PER_DIGIT; right_word &= DIGIT_MASK; for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) { left_word = (digit[src_i] ^ DIGIT_MASK) + carry; dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | (right_word >> right_shift); carry = left_word >> BITS_PER_DIGIT; right_word = left_word & DIGIT_MASK; } left_word = (src_i < ndigits) ? (digit[src_i] ^ DIGIT_MASK) + carry : carry; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = ((left_word << left_shift) | (right_word >> right_shift)) & mask; } break; // VALUE IS ZERO: default: result = false; // ALL DATA TO BE MOVED IS IN A SINGLE WORD: if ( dst_i == end_i ) { mask = ~(~0U << nbits) << left_shift; dst_p[dst_i] = dst_p[dst_i] & ~mask; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { dst_p[dst_i] = 0; } dst_p[dst_i] = 0; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { mask = ~(~0U << left_shift); dst_p[dst_i] = (dst_p[dst_i] & mask); for ( dst_i++; dst_i <= end_i; dst_i++ ) { dst_p[dst_i] = 0; } } break; } return result; } // Return this object instance's bits as a uint64 without sign extension. uint64 sc_signed::concat_get_uint64() const { uint64 result; switch ( sgn ) { case SC_POS: result = 0; if ( ndigits > 2 ) result = digit[2]; if ( ndigits > 1 ) result = (result << BITS_PER_DIGIT) | digit[1]; result = (result << BITS_PER_DIGIT) | digit[0]; break; case SC_NEG: result = 0; if ( ndigits > 2 ) result = digit[2]; if ( ndigits > 1 ) result = (result << BITS_PER_DIGIT) | digit[1]; result = (result << BITS_PER_DIGIT) | digit[0]; result = -result; if ( nbits < 64 ) { uint64 mask = ~uint64(0); result = result & ~(mask << nbits); } break; default: result = 0; break; } return result; } // #### OPTIMIZE void sc_signed::concat_set(int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_signed::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src<0) ? (int_type)-1 : 0; } void sc_signed::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_signed::concat_set(uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } // ---------------------------------------------------------------------------- // SECTION: Public members - Reduction methods. // ---------------------------------------------------------------------------- bool sc_signed::and_reduce() const { sc_digit current; // Current digit examining. int i; // Index of digit examining. if ( sgn == SC_NEG ) { current = (1 << BITS_PER_DIGIT); for ( i = 0; i < ndigits-1; i++ ) { current = (current >> BITS_PER_DIGIT) + (digit[i]^DIGIT_MASK); if ( (current & DIGIT_MASK) != DIGIT_MASK ) return false; } current = (current >> BITS_PER_DIGIT) + (digit[i]^DIGIT_MASK); if ( (current & ~(~0U << (nbits % BITS_PER_DIGIT))) == static_cast(~(~0U << (nbits % BITS_PER_DIGIT))) ) return true; } return false; } bool sc_signed::or_reduce() const { return sgn == SC_ZERO ? false : true; } bool sc_signed::xor_reduce() const { int i; // Digit examining. int odd; // Flag for odd number of digits. odd = 0; for ( i = 0; i < nbits; i++ ) if ( test(i) ) odd = ~odd; return odd ? true : false; } // ---------------------------------------------------------------------------- // SECTION: Public members - Assignment operators. // ---------------------------------------------------------------------------- // assignment operators const sc_signed& sc_signed::operator = ( const char* a ) { if( a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); } else if( *a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); } else try { int len = length(); sc_fix aa( a, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return this->operator = ( aa ); } catch( const sc_core::sc_report& ) { std::stringstream msg; msg << "character string '" << a << "' is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); } return *this; } const sc_signed& sc_signed::operator=(int64 v) { sgn = get_sign(v); // v >= 0 now. if (sgn == SC_ZERO) vec_zero(ndigits, digit); else { from_uint(ndigits, digit, (uint64) v); if (nbits <= (int)BITS_PER_INT64) convert_SM_to_2C_to_SM(); } return *this; } const sc_signed& sc_signed::operator=(uint64 v) { sgn = get_sign(v); if (sgn == SC_ZERO) vec_zero(ndigits, digit); else { from_uint(ndigits, digit, v); if (nbits <= (int)BITS_PER_INT64) convert_SM_to_2C_to_SM(); } return *this; } const sc_signed& sc_signed::operator=(long v) { sgn = get_sign(v); // v >= 0 now. if (sgn == SC_ZERO) vec_zero(ndigits, digit); else { from_uint(ndigits, digit, (unsigned long) v); if (nbits <= (int)BITS_PER_LONG) convert_SM_to_2C_to_SM(); } return *this; } const sc_signed& sc_signed::operator=(unsigned long v) { sgn = get_sign(v); if (sgn == SC_ZERO) vec_zero(ndigits, digit); else { from_uint(ndigits, digit, v); if (nbits <= (int)BITS_PER_LONG) convert_SM_to_2C_to_SM(); } return *this; } const sc_signed& sc_signed::operator=(double v) { is_bad_double(v); if (v < 0) { v = -v; sgn = SC_NEG; } else sgn = SC_POS; int i = 0; while (std::floor(v) && (i < ndigits)) { #ifndef _WIN32 digit[i++] = ((sc_digit)std::floor(remainder(v, DIGIT_RADIX))) & DIGIT_MASK; #else digit[i++] = ((sc_digit)std::floor(std::fmod(v, DIGIT_RADIX))) & DIGIT_MASK; #endif v /= DIGIT_RADIX; } vec_zero(i, ndigits, digit); convert_SM_to_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- const sc_signed& sc_signed::operator = ( const sc_bv_base& v ) { int minlen = sc_min( nbits, v.length() ); int i = 0; for( ; i < minlen; ++ i ) { safe_set( i, v.get_bit( i ), digit ); } for( ; i < nbits; ++ i ) { safe_set( i, 0, digit ); // zero-extend } convert_2C_to_SM(); return *this; } const sc_signed& sc_signed::operator = ( const sc_lv_base& v ) { int minlen = sc_min( nbits, v.length() ); int i = 0; for( ; i < minlen; ++ i ) { safe_set( i, sc_logic( v.get_bit( i ) ).to_bool(), digit ); } for( ; i < nbits; ++ i ) { safe_set( i, 0, digit ); // zero-extend } convert_2C_to_SM(); return *this; } // explicit conversion to character string const std::string sc_signed::to_string( sc_numrep numrep ) const { int len = length(); sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep ); } const std::string sc_signed::to_string( sc_numrep numrep, bool w_prefix ) const { int len = length(); sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep, w_prefix ); } // ---------------------------------------------------------------------------- // SECTION: Interfacing with sc_int_base // ---------------------------------------------------------------------------- const sc_signed& sc_signed::operator = (const sc_int_base& v) { return operator=((int64) v); } sc_signed operator + ( const sc_unsigned& u, const sc_int_base& v ) { return operator + ( u, static_cast( v ) ); } sc_signed operator + ( const sc_int_base& u, const sc_unsigned& v ) { return operator + ( static_cast( u ), v ); } sc_signed operator + (const sc_signed& u, const sc_int_base& v) { return operator+(u, (int64) v); } sc_signed operator + (const sc_int_base& u, const sc_signed& v) { return operator+((int64) u, v); } const sc_signed& sc_signed::operator += (const sc_int_base& v) { return operator+=((int64) v); } sc_signed operator - (const sc_unsigned& u, const sc_int_base& v) { return operator-(u, (int64) v); } sc_signed operator - (const sc_int_base& u, const sc_unsigned& v) { return operator-((int64) u, v); } sc_signed operator-(const sc_signed& u, const sc_int_base& v) { return operator-(u, (int64) v); } sc_signed operator - (const sc_int_base& u, const sc_signed& v) { return operator-((int64) u, v); } const sc_signed& sc_signed::operator -= (const sc_int_base& v) { return operator-=((int64) v); } sc_signed operator * ( const sc_unsigned& u, const sc_int_base& v ) { return operator * ( u, static_cast( v ) ); } sc_signed operator * ( const sc_int_base& u, const sc_unsigned& v ) { return operator * ( static_cast( u ), v ); } sc_signed operator * (const sc_signed& u, const sc_int_base& v) { return operator*(u, (int64) v); } sc_signed operator * (const sc_int_base& u, const sc_signed& v) { return operator*((int64) u, v); } const sc_signed& sc_signed::operator *= (const sc_int_base& v) { return operator*=((int64) v); } sc_signed operator / ( const sc_unsigned& u, const sc_int_base& v ) { return operator / ( u, static_cast( v ) ); } sc_signed operator / ( const sc_int_base& u, const sc_unsigned& v ) { return operator / ( static_cast( u ), v ); } sc_signed operator / (const sc_signed& u, const sc_int_base& v) { return operator/(u, (int64) v); } sc_signed operator / (const sc_int_base& u, const sc_signed& v) { return operator/((int64) u, v); } const sc_signed& sc_signed::operator /= (const sc_int_base& v) { return operator/=((int64) v); } sc_signed operator % ( const sc_unsigned& u, const sc_int_base& v ) { return operator % ( u, static_cast( v ) ); } sc_signed operator % ( const sc_int_base& u, const sc_unsigned& v ) { return operator % ( static_cast( u ), v ); } sc_signed operator % (const sc_signed& u, const sc_int_base& v) { return operator%(u, (int64) v); } sc_signed operator % (const sc_int_base& u, const sc_signed& v) { return operator%((int64) u, v); } const sc_signed& sc_signed::operator %= (const sc_int_base& v) { return operator%=((int64) v); } sc_signed operator & ( const sc_unsigned& u, const sc_int_base& v ) { return operator & ( u, static_cast( v ) ); } sc_signed operator & ( const sc_int_base& u, const sc_unsigned& v ) { return operator & ( static_cast( u ), v ); } sc_signed operator & (const sc_signed& u, const sc_int_base& v) { return operator&(u, (int64) v); } sc_signed operator & (const sc_int_base& u, const sc_signed& v) { return operator&((int64) u, v); } const sc_signed& sc_signed::operator &= (const sc_int_base& v) { return operator&=((int64) v); } sc_signed operator | ( const sc_unsigned& u, const sc_int_base& v ) { return operator | ( u, static_cast( v ) ); } sc_signed operator | ( const sc_int_base& u, const sc_unsigned& v ) { return operator | ( static_cast( u ), v ); } sc_signed operator | (const sc_signed& u, const sc_int_base& v) { return operator|(u, (int64) v); } sc_signed operator | (const sc_int_base& u, const sc_signed& v) { return operator|((int64) u, v); } const sc_signed& sc_signed::operator |= (const sc_int_base& v) { return operator|=((int64) v); } sc_signed operator ^ ( const sc_unsigned& u, const sc_int_base& v ) { return operator ^ ( u, static_cast( v ) ); } sc_signed operator ^ ( const sc_int_base& u, const sc_unsigned& v ) { return operator ^ ( static_cast( u ), v ); } sc_signed operator ^ (const sc_signed& u, const sc_int_base& v) { return operator^(u, (int64) v); } sc_signed operator ^ (const sc_int_base& u, const sc_signed& v) { return operator^((int64) u, v); } const sc_signed& sc_signed::operator ^= (const sc_int_base& v) { return operator^=((int64) v); } sc_signed operator << (const sc_signed& u, const sc_int_base& v) { return operator<<(u, (int64) v); } const sc_signed& sc_signed::operator <<= (const sc_int_base& v) { return operator<<=((int64) v); } sc_signed operator >> (const sc_signed& u, const sc_int_base& v) { return operator>>(u, (int64) v); } const sc_signed& sc_signed::operator >>= (const sc_int_base& v) { return operator>>=((int64) v); } bool operator == (const sc_signed& u, const sc_int_base& v) { return operator==(u, (int64) v); } bool operator == (const sc_int_base& u, const sc_signed& v) { return operator==((int64) u, v); } bool operator != (const sc_signed& u, const sc_int_base& v) { return operator!=(u, (int64) v); } bool operator != (const sc_int_base& u, const sc_signed& v) { return operator!=((int64) u, v); } bool operator < (const sc_signed& u, const sc_int_base& v) { return operator<(u, (int64) v); } bool operator < (const sc_int_base& u, const sc_signed& v) { return operator<((int64) u, v); } bool operator <= (const sc_signed& u, const sc_int_base& v) { return operator<=(u, (int64) v); } bool operator <= (const sc_int_base& u, const sc_signed& v) { return operator<=((int64) u, v); } bool operator > (const sc_signed& u, const sc_int_base& v) { return operator>(u, (int64) v); } bool operator > (const sc_int_base& u, const sc_signed& v) { return operator>((int64) u, v); } bool operator >= (const sc_signed& u, const sc_int_base& v) { return operator>=(u, (int64) v); } bool operator >= (const sc_int_base& u, const sc_signed& v) { return operator>=((int64) u, v); } // ---------------------------------------------------------------------------- // SECTION: Interfacing with sc_uint_base // ---------------------------------------------------------------------------- const sc_signed& sc_signed::operator = (const sc_uint_base& v) { return operator=((uint64) v); } sc_signed operator + (const sc_signed& u, const sc_uint_base& v) { return operator+(u, (uint64) v); } sc_signed operator + (const sc_uint_base& u, const sc_signed& v) { return operator+((uint64) u, v); } const sc_signed& sc_signed::operator += (const sc_uint_base& v) { return operator+=((uint64) v); } sc_signed operator - (const sc_unsigned& u, const sc_uint_base& v) { return operator-(u, (uint64) v); } sc_signed operator - (const sc_uint_base& u, const sc_unsigned& v) { return operator-((uint64) u, v); } sc_signed operator - (const sc_signed& u, const sc_uint_base& v) { return operator-(u, (uint64) v); } sc_signed operator - (const sc_uint_base& u, const sc_signed& v) { return operator-((uint64) u, v); } const sc_signed& sc_signed::operator -= (const sc_uint_base& v) { return operator-=((uint64) v); } sc_signed operator * (const sc_signed& u, const sc_uint_base& v) { return operator*(u, (uint64) v); } sc_signed operator * (const sc_uint_base& u, const sc_signed& v) { return operator*((uint64) u, v); } const sc_signed& sc_signed::operator *= (const sc_uint_base& v) { return operator*=((uint64) v); } sc_signed operator / (const sc_signed& u, const sc_uint_base& v) { return operator/(u, (uint64) v); } sc_signed operator / (const sc_uint_base& u, const sc_signed& v) { return operator/((uint64) u, v); } const sc_signed& sc_signed::operator /= (const sc_uint_base& v) { return operator/=((uint64) v); } sc_signed operator % (const sc_signed& u, const sc_uint_base& v) { return operator%(u, (uint64) v); } sc_signed operator % (const sc_uint_base& u, const sc_signed& v) { return operator%((uint64) u, v); } const sc_signed& sc_signed::operator %= (const sc_uint_base& v) { return operator%=((uint64) v); } sc_signed operator & (const sc_signed& u, const sc_uint_base& v) { return operator&(u, (uint64) v); } sc_signed operator & (const sc_uint_base& u, const sc_signed& v) { return operator&((uint64) u, v); } const sc_signed& sc_signed::operator &= (const sc_uint_base& v) { return operator&=((uint64) v); } sc_signed operator | (const sc_signed& u, const sc_uint_base& v) { return operator|(u, (uint64) v); } sc_signed operator | (const sc_uint_base& u, const sc_signed& v) { return operator|((uint64) u, v); } const sc_signed& sc_signed::operator |= (const sc_uint_base& v) { return operator|=((uint64) v); } sc_signed operator ^ (const sc_signed& u, const sc_uint_base& v) { return operator^(u, (uint64) v); } sc_signed operator ^ (const sc_uint_base& u, const sc_signed& v) { return operator^((uint64) u, v); } const sc_signed& sc_signed::operator ^= (const sc_uint_base& v) { return operator^=((uint64) v); } sc_signed operator << (const sc_signed& u, const sc_uint_base& v) { return operator<<(u, (uint64) v); } const sc_signed& sc_signed::operator <<= (const sc_uint_base& v) { return operator<<=((uint64) v); } sc_signed operator >> (const sc_signed& u, const sc_uint_base& v) { return operator>>(u, (uint64) v); } const sc_signed& sc_signed::operator >>= (const sc_uint_base& v) { return operator>>=((uint64) v); } bool operator == (const sc_signed& u, const sc_uint_base& v) { return operator==(u, (uint64) v); } bool operator == (const sc_uint_base& u, const sc_signed& v) { return operator==((uint64) u, v); } bool operator != (const sc_signed& u, const sc_uint_base& v) { return operator!=(u, (uint64) v); } bool operator != (const sc_uint_base& u, const sc_signed& v) { return operator!=((uint64) u, v); } bool operator < (const sc_signed& u, const sc_uint_base& v) { return operator<(u, (uint64) v); } bool operator < (const sc_uint_base& u, const sc_signed& v) { return operator<((uint64) u, v); } bool operator <= (const sc_signed& u, const sc_uint_base& v) { return operator<=(u, (uint64) v); } bool operator <= (const sc_uint_base& u, const sc_signed& v) { return operator<=((uint64) u, v); } bool operator > (const sc_signed& u, const sc_uint_base& v) { return operator>(u, (uint64) v); } bool operator > (const sc_uint_base& u, const sc_signed& v) { return operator>((uint64) u, v); } bool operator >= (const sc_signed& u, const sc_uint_base& v) { return operator>=(u, (uint64) v); } bool operator >= (const sc_uint_base& u, const sc_signed& v) { return operator>=((uint64) u, v); } // ---------------------------------------------------------------------------- // SECTION: Input and output operators // ---------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Operator macros. // ---------------------------------------------------------------------------- #define CONVERT_LONG(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_ULONG]; \ from_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); #define CONVERT_LONG_2(u) \ sc_digit u ## d[DIGITS_PER_ULONG]; \ from_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); #define CONVERT_INT(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_UINT]; \ from_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); #define CONVERT_INT_2(u) \ sc_digit u ## d[DIGITS_PER_UINT]; \ from_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); #define CONVERT_INT64(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_UINT64]; \ from_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); #define CONVERT_INT64_2(u) \ sc_digit u ## d[DIGITS_PER_UINT64]; \ from_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); // ---------------------------------------------------------------------------- // SECTION: PLUS operators: +, +=, ++ // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. 0 + v = v // 2. u + 0 = u // 3. if sgn(u) == sgn(v) // 3.1 u + v = +(u + v) = sgn(u) * (u + v) // 3.2 (-u) + (-v) = -(u + v) = sgn(u) * (u + v) // 4. if sgn(u) != sgn(v) // 4.1 u + (-v) = u - v = sgn(u) * (u - v) // 4.2 (-u) + v = -(u - v) ==> sgn(u) * (u - v) // // Specialization of above cases for computing ++u or u++: // 1. 0 + 1 = 1 // 3. u + 1 = u + 1 = sgn(u) * (u + 1) // 4. (-u) + 1 = -(u - 1) = sgn(u) * (u - 1) sc_signed operator+(const sc_unsigned& u, const sc_signed& v) { if (u.sgn == SC_ZERO) // case 1 return sc_signed(v); if (v.sgn == SC_ZERO) // case 2 return sc_signed(u); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed& u, const sc_unsigned& v) { if (u.sgn == SC_ZERO) // case 1 return sc_signed(v); if (v.sgn == SC_ZERO) // case 2 return sc_signed(u); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed& u, const sc_signed& v) { if (u.sgn == SC_ZERO) // case 1 return sc_signed(v); if (v.sgn == SC_ZERO) // case 2 return sc_signed(u); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed &u, int64 v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator+(int64 u, const sc_signed &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_unsigned &u, int64 v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator+(int64 u, const sc_unsigned &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed &u, uint64 v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator+(uint64 u, const sc_signed &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed &u, long v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator+(long u, const sc_signed &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_unsigned &u, long v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator+(long u, const sc_unsigned &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator+(const sc_signed &u, unsigned long v) { if (v == 0) // case 2 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 1 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator+(unsigned long u, const sc_signed &v) { if (u == 0) // case 1 return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MINUS operators: -, -=, -- // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. u - 0 = u // 2. 0 - v = -v // 3. if sgn(u) != sgn(v) // 3.1 u - (-v) = u + v = sgn(u) * (u + v) // 3.2 (-u) - v = -(u + v) ==> sgn(u) * (u + v) // 4. if sgn(u) == sgn(v) // 4.1 u - v = +(u - v) = sgn(u) * (u - v) // 4.2 (-u) - (-v) = -(u - v) = sgn(u) * (u - v) // // Specialization of above cases for computing --u or u--: // 1. 0 - 1 = -1 // 3. (-u) - 1 = -(u + 1) = sgn(u) * (u + 1) // 4. u - 1 = u - 1 = sgn(u) * (u - 1) sc_signed operator-(const sc_unsigned& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v, -v.sgn); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_unsigned& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v, -v.sgn); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v, -v.sgn); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v, -v.sgn); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed &u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator-(int64 u, const sc_signed& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_unsigned &u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator-(int64 u, const sc_unsigned& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed &u, uint64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator-(uint64 u, const sc_signed& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_unsigned &u, uint64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator-(uint64 u, const sc_unsigned& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed &u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator-(long u, const sc_signed& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_unsigned &u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator-(long u, const sc_unsigned& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_signed &u, unsigned long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator-(unsigned long u, const sc_signed& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator-(const sc_unsigned &u, unsigned long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator-(unsigned long u, const sc_unsigned& v) { if (u == 0) // case 1 return sc_signed(v, -v.sgn); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, -v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MULTIPLICATION operators: *, *= // ---------------------------------------------------------------------------- // Cases to consider when computing u * v: // 1. u * 0 = 0 * v = 0 // 2. 1 * v = v and -1 * v = -v // 3. u * 1 = u and u * -1 = -u // 4. u * v = u * v sc_signed operator*(const sc_unsigned& u, const sc_signed& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) // case 1 return sc_signed(); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, const sc_unsigned& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) // case 1 return sc_signed(); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, const sc_signed& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) // case 1 return sc_signed(); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, int64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(v); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator*(int64 u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_unsigned& u, int64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(v); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator*(int64 u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, uint64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(v); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator*(uint64 u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_INT64_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(v); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator*(long u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_unsigned& u, long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(v); // cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator*(long u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator*(const sc_signed& u, unsigned long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(v); // else cases 2-4 return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator*(unsigned long u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_signed(); CONVERT_LONG_2(u); // cases 2-4 return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: DIVISION operators: /, /= // ---------------------------------------------------------------------------- // Cases to consider when finding the quotient q = floor(u/v): // Note that u = q * v + r for r < q. // 1. 0 / 0 or u / 0 => error // 2. 0 / v => 0 = 0 * v + 0 // 3. u / v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u / v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u / v && u > v => u = q * v + r - v can be 1 or -1 sc_signed operator/(const sc_unsigned& u, const sc_signed& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, const sc_unsigned& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, const sc_signed& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, int64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator/(int64 u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(u); // other cases return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_unsigned& u, int64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator/(int64 u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(u); // other cases return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, uint64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator/(uint64 u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(u); // other cases return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator/(long u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(u); // other cases return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_unsigned& u, long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator/(long u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(u); // other cases return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator/(const sc_signed& u, unsigned long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return div_signed_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator/(unsigned long u, const sc_signed& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(u); // other cases return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MOD operators: %, %=. // ---------------------------------------------------------------------------- // Cases to consider when finding the remainder r = u % v: // Note that u = q * v + r for r < q. // 1. 0 % 0 or u % 0 => error // 2. 0 % v => 0 = 0 * v + 0 // 3. u % v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u % v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u % v && u > v => u = q * v + r - v can be 1 or -1 sc_signed operator%(const sc_unsigned& u, const sc_signed& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, const sc_unsigned& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, const sc_signed& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, int64 v) { small_type vs = get_sign(v); if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator%(int64 u, const sc_signed& v) { small_type us = get_sign(u); if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(u); // other cases return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_unsigned& u, int64 v) { small_type vs = get_sign(v); if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator%(int64 u, const sc_unsigned& v) { small_type us = get_sign(u); if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(u); // other cases return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, uint64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_INT64_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator%(uint64 u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_INT64(u); // other cases return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, long v) { small_type vs = get_sign(v); if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator%(long u, const sc_signed& v) { small_type us = get_sign(u); if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(u); // other cases return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_unsigned& u, long v) { small_type vs = get_sign(v); if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator%(long u, const sc_unsigned& v) { small_type us = get_sign(u); if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(u); // other cases return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } sc_signed operator%(const sc_signed& u, unsigned long v) { if ((u.sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 return sc_signed(); // case 2 } CONVERT_LONG_2(v); // other cases return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator%(unsigned long u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_signed(); // case 2 } CONVERT_LONG(u); // other cases return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise AND operators: &, &= // ---------------------------------------------------------------------------- // Cases to consider when computing u & v: // 1. u & 0 = 0 & v = 0 // 2. u & v => sgn = + // 3. (-u) & (-v) => sgn = - // 4. u & (-v) => sgn = + // 5. (-u) & v => sgn = + sc_signed operator&(const sc_unsigned& u, const sc_signed& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, const sc_unsigned& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, const sc_signed& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, int64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_INT64(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator&(int64 u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_INT64(u); // other cases return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_unsigned& u, int64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_INT64(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator&(int64 u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_INT64(u); // other cases return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, uint64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_INT64(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator&(uint64 u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_INT64(u); // other cases return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, long v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_LONG(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator&(long u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_LONG(u); // other cases return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_unsigned& u, long v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_LONG(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator&(long u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_LONG(u); // other cases return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator&(const sc_signed& u, unsigned long v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_signed(); CONVERT_LONG(v); // other cases return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator&(unsigned long u, const sc_signed& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_signed(); CONVERT_LONG(u); // other cases return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise OR operators: |, |= // ---------------------------------------------------------------------------- // Cases to consider when computing u | v: // 1. u | 0 = u // 2. 0 | v = v // 3. u | v => sgn = + // 4. (-u) | (-v) => sgn = - // 5. u | (-v) => sgn = - // 6. (-u) | v => sgn = - sc_signed operator|(const sc_unsigned& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator|(int64 u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_unsigned& u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator|(int64 u, const sc_unsigned& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, uint64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator|(uint64 u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator|(long u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_unsigned& u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator|(long u, const sc_unsigned& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator|(const sc_signed& u, unsigned long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator|(unsigned long u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise XOR operators: ^, ^= // ---------------------------------------------------------------------------- // Cases to consider when computing u ^ v: // Note that u ^ v = (~u & v) | (u & ~v). // 1. u ^ 0 = u // 2. 0 ^ v = v // 3. u ^ v => sgn = + // 4. (-u) ^ (-v) => sgn = - // 5. u ^ (-v) => sgn = - // 6. (-u) ^ v => sgn = + sc_signed operator^(const sc_unsigned& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, const sc_signed& v) { if (v.sgn == SC_ZERO) // case 1 return sc_signed(u); if (u.sgn == SC_ZERO) // case 2 return sc_signed(v); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator^(int64 u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_unsigned& u, int64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator^(int64 u, const sc_unsigned& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, uint64 v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_signed operator^(uint64 u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator^(long u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_unsigned& u, long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator^(long u, const sc_unsigned& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_signed operator^(const sc_signed& u, unsigned long v) { if (v == 0) // case 1 return sc_signed(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_signed operator^(unsigned long u, const sc_signed& v) { if (u == 0) return sc_signed(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise NOT operator: ~ // ---------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: LEFT SHIFT operators: <<, <<= // ---------------------------------------------------------------------------- sc_signed operator<<(const sc_signed& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) return sc_signed(u); return operator<<(u, v.to_ulong()); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: RIGHT SHIFT operators: >>, >>= // ---------------------------------------------------------------------------- sc_signed operator>>(const sc_signed& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) return sc_signed(u); return operator>>(u, v.to_ulong()); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Unary arithmetic operators. // ---------------------------------------------------------------------------- sc_signed operator+(const sc_signed& u) { return sc_signed(u); } sc_signed operator-(const sc_signed& u) { return sc_signed(u, -u.sgn); } sc_signed operator-(const sc_unsigned& u) { return sc_signed(u, -u.sgn); } // ---------------------------------------------------------------------------- // SECTION: EQUAL operator: == // ---------------------------------------------------------------------------- bool operator==(const sc_signed& u, const sc_signed& v) { if (u.sgn != v.sgn) return false; if (&u == &v) return true; if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_signed& u, int64 v) { CONVERT_INT64(v); if (u.sgn != vs) return false; if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) != 0) return false; return true; } bool operator==(int64 u, const sc_signed& v) { CONVERT_INT64(u); if (us != v.sgn) return false; if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_signed& u, uint64 v) { CONVERT_INT64(v); if (u.sgn != vs) return false; if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) != 0) return false; return true; } bool operator==(uint64 u, const sc_signed& v) { CONVERT_INT64(u); if (us != v.sgn) return false; if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_signed& u, long v) { CONVERT_LONG(v); if (u.sgn != vs) return false; if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) != 0) return false; return true; } bool operator==(long u, const sc_signed& v) { CONVERT_LONG(u); if (us != v.sgn) return false; if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_signed& u, unsigned long v) { CONVERT_LONG(v); if (u.sgn != vs) return false; if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) != 0) return false; return true; } bool operator==(unsigned long u, const sc_signed& v) { CONVERT_LONG(u); if (us != v.sgn) return false; if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) != 0) return false; return true; } // ---------------------------------------------------------------------------- // SECTION: NOT_EQUAL operator: != // ---------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: LESS THAN operator: < // ---------------------------------------------------------------------------- bool operator<(const sc_signed& u, const sc_signed& v) { if (u.sgn < v.sgn) return true; if (u.sgn > v.sgn) return false; // u.sgn == v.sgn if (&u == &v) return false; if (u.sgn == SC_POS) { if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) < 0) return true; } else if (u.sgn == SC_NEG) { if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) > 0) return true; } return false; } bool operator<(const sc_signed& u, int64 v) { CONVERT_INT64(v); if (u.sgn < vs) return true; if (u.sgn > vs) return false; // u.sgn == vs if (vs == SC_POS) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) < 0) return true; } else if (vs == SC_NEG) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) > 0) return true; } return false; } bool operator<(int64 u, const sc_signed& v) { CONVERT_INT64(u); if (us < v.sgn) return true; if (us > v.sgn) return false; // us == v.sgn if (us == SC_POS) { if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) < 0) return true; } else if (us == SC_NEG) { if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) > 0) return true; } return false; } bool operator<(const sc_signed& u, uint64 v) { CONVERT_INT64(v); if (u.sgn < vs) return true; if (u.sgn > vs) return false; // u.sgn == vs if (vs == SC_POS) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) < 0) return true; } return false; } bool operator<(uint64 u, const sc_signed& v) { CONVERT_INT64(u); if (us < v.sgn) return true; if (us > v.sgn) return false; // us == v.sgn if (us == SC_POS) { if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) < 0) return true; } return false; } bool operator<(const sc_signed& u, long v) { CONVERT_LONG(v); if (u.sgn < vs) return true; if (u.sgn > vs) return false; // u.sgn == vs if (vs == SC_POS) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) < 0) return true; } else if (vs == SC_NEG) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) > 0) return true; } return false; } bool operator<(long u, const sc_signed& v) { CONVERT_LONG(u); if (us < v.sgn) return true; if (us > v.sgn) return false; // us == v.sgn if (us == SC_POS) { if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) < 0) return true; } else if (us == SC_NEG) { if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) > 0) return true; } return false; } bool operator<(const sc_signed& u, unsigned long v) { CONVERT_LONG(v); if (u.sgn < vs) return true; if (u.sgn > vs) return false; // u.sgn == vs if (vs == SC_POS) { if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) < 0) return true; } return false; } bool operator<(unsigned long u, const sc_signed& v) { CONVERT_LONG(u); if (us < v.sgn) return true; if (us > v.sgn) return false; // us == v.sgn if (us == SC_POS) { if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) < 0) return true; } return false; } // --------------------------------------------------------------------------- // SECTION: LESS THAN or EQUAL operator: <= // --------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // --------------------------------------------------------------------------- // SECTION: GREATER THAN operator: > // --------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // --------------------------------------------------------------------------- // SECTION: GREATER THAN or EQUAL operator: >= // --------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // --------------------------------------------------------------------------- // SECTION: Public members - Other utils. // --------------------------------------------------------------------------- bool sc_signed::iszero() const { if (sgn == SC_ZERO) return true; else if (sgn != SC_NOSIGN) return false; else return check_for_zero(ndigits, digit); } bool sc_signed::sign() const { if (sgn == SC_NEG) return 1; else if (sgn != SC_NOSIGN) return 0; else return ((digit[ndigits - 1] & one_and_zeros(bit_ord(nbits - 1))) != 0); } // The rest of the utils in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Private members. // ---------------------------------------------------------------------------- // The private members in this section are included from sc_nbcommon.cpp. #define CLASS_TYPE sc_signed #define CLASS_TYPE_STR "sc_signed" #define ADD_HELPER add_signed_friend #define SUB_HELPER sub_signed_friend #define MUL_HELPER mul_signed_friend #define DIV_HELPER div_signed_friend #define MOD_HELPER mod_signed_friend #define AND_HELPER and_signed_friend #define OR_HELPER or_signed_friend #define XOR_HELPER xor_signed_friend #include "sc_nbfriends.inc" #undef SC_UNSIGNED #define SC_SIGNED #define IF_SC_SIGNED 1 // 1 = sc_signed #define CLASS_TYPE_SUBREF sc_signed_subref_r #define OTHER_CLASS_TYPE sc_unsigned #define OTHER_CLASS_TYPE_SUBREF sc_unsigned_subref_r #define MUL_ON_HELPER mul_on_help_signed #define DIV_ON_HELPER div_on_help_signed #define MOD_ON_HELPER mod_on_help_signed #include "sc_nbcommon.inc" #undef MOD_ON_HELPER #undef DIV_ON_HELPER #undef MUL_ON_HELPER #undef OTHER_CLASS_TYPE_SUBREF #undef OTHER_CLASS_TYPE #undef CLASS_TYPE_SUBREF #undef IF_SC_SIGNED #undef SC_SIGNED #undef XOR_HELPER #undef OR_HELPER #undef AND_HELPER #undef MOD_HELPER #undef DIV_HELPER #undef MUL_HELPER #undef SUB_HELPER #undef ADD_HELPER #undef CLASS_TYPE #undef CLASS_TYPE_STR #include "sc_signed_bitref.inc" #include "sc_signed_subref.inc" #undef CONVERT_LONG #undef CONVERT_LONG_2 #undef CONVERT_INT64 #undef CONVERT_INT64_2 } // namespace sc_dt // End of file. systemc-2.3.4/src/sysc/datatypes/int/sc_uint_base.cpp0000644000175000017500000004511214342422106022572 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_uint_base.cpp -- contains interface definitions between sc_uint and sc_signed, sc_unsigned, and definitions for sc_uint_subref. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_uint_base.cpp,v $ // Revision 1.5 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.4 2010/02/04 22:23:29 acg // Andy Goodrich: fixed bug in concatenation reads for part selections, // the mask being used was 32 bits and should have been 64 bits. // // Revision 1.3 2008/06/19 17:47:57 acg // Andy Goodrich: fixes for bugs. See 2.2.1 RELEASENOTES. // // Revision 1.2 2007/11/04 21:27:00 acg // Andy Goodrich: changes to make sure the proper value is returned from // concat_get_data(). // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include "sysc/kernel/sc_macros.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/fx/sc_ufix.h" #include "sysc/datatypes/fx/scfx_other_defs.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_vpool; template class SC_API sc_vpool; } // namespace sc_core namespace sc_dt { // to avoid code bloat in sc_uint_concat void sc_uint_concref_invalid_length( int length ) { std::stringstream msg; msg << "sc_uint_concref initialization: length = " << length << "violates 1 <= length <= " << SC_INTWIDTH; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } // ---------------------------------------------------------------------------- // CLASS : sc_uint_bitref // // Proxy class for sc_uint bit selection (r-value and l-value). // ---------------------------------------------------------------------------- sc_core::sc_vpool sc_uint_bitref::m_pool(9); // concatenation methods: // #### OPTIMIZE void sc_uint_bitref::concat_set(int64 src, int low_i) { sc_uint_base aa( 1 ); *this = aa = (low_i < 64) ? src >> low_i : src >> 63; } void sc_uint_bitref::concat_set(const sc_signed& src, int low_i) { sc_uint_base aa( 1 ); if ( low_i < src.length() ) *this = aa = 1 & (src >> low_i); else *this = aa = (src < 0) ? (int_type)-1 : 0; } void sc_uint_bitref::concat_set(const sc_unsigned& src, int low_i) { sc_uint_base aa( 1 ); if ( low_i < src.length() ) *this = aa = 1 & (src >> low_i); else *this = aa = 0; } void sc_uint_bitref::concat_set(uint64 src, int low_i) { sc_uint_base aa( 1 ); *this = aa = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_uint_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref_r // // Proxy class for sc_uint part selection (l-value). // ---------------------------------------------------------------------------- bool sc_uint_subref_r::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; end_i = (low_i + (m_left-m_right)) / BITS_PER_DIGIT; mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)((dst_p[dst_i] & mask)); dst_i++; for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; return false; } bool sc_uint_subref_r::concat_get_data( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int high_i; // Index of high order bit in dst_p to set. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. bool result; // True if inserting non-zero value. uint_type val; // Selection value extracted from m_obj_p. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; high_i = low_i + (m_left-m_right); end_i = high_i / BITS_PER_DIGIT; mask = ~mask_int[m_left][m_right]; val = (m_obj_p->m_val & mask) >> m_right; result = val != 0; // PROCESS THE FIRST WORD: mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)(((dst_p[dst_i] & mask)) | ((val << left_shift) & DIGIT_MASK)); switch ( end_i - dst_i ) { // BITS ARE ACROSS TWO WORDS: case 1: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS THREE WORDS: case 2: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS THREE WORDS: case 3: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; } return result; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref // // Proxy class for sc_uint part selection (r-value and l-value). // ---------------------------------------------------------------------------- sc_core::sc_vpool sc_uint_subref::m_pool(9); // assignment operators sc_uint_subref& sc_uint_subref::operator = ( uint_type v ) { uint_type val = m_obj_p->m_val; uint_type mask = mask_int[m_left][m_right]; val &= mask; val |= (v << m_right) & ~mask; m_obj_p->m_val = val; m_obj_p->extend_sign(); return *this; } sc_uint_subref& sc_uint_subref::operator = ( const sc_signed& a ) { sc_uint_base aa( length() ); return ( *this = aa = a ); } sc_uint_subref& sc_uint_subref::operator = ( const sc_unsigned& a ) { sc_uint_base aa( length() ); return ( *this = aa = a ); } sc_uint_subref& sc_uint_subref::operator = ( const sc_bv_base& a ) { sc_uint_base aa( length() ); return ( *this = aa = a ); } sc_uint_subref& sc_uint_subref::operator = ( const sc_lv_base& a ) { sc_uint_base aa( length() ); return ( *this = aa = a ); } // concatenation methods: // #### OPTIMIZE void sc_uint_subref::concat_set(int64 src, int low_i) { sc_uint_base aa( length() ); *this = aa = (low_i < 64) ? src >> low_i : src >> 63; } void sc_uint_subref::concat_set(const sc_signed& src, int low_i) { sc_uint_base aa( length() ); if ( low_i < src.length() ) *this = aa = src >> low_i; else *this = aa = (src < 0) ? (int_type)-1 : 0; } void sc_uint_subref::concat_set(const sc_unsigned& src, int low_i) { sc_uint_base aa( length() ); if ( low_i < src.length() ) *this = aa = src >> low_i; else *this = aa = 0; } void sc_uint_subref::concat_set(uint64 src, int low_i) { sc_uint_base aa( length() ); *this = aa = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_uint_subref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // ---------------------------------------------------------------------------- // CLASS : sc_uint_base // // Base class for sc_uint. // ---------------------------------------------------------------------------- // support methods void sc_uint_base::invalid_length() const { std::stringstream msg; msg << "sc_uint[_base] initialization: length = " << m_len << " violates 1 <= length <= " << SC_INTWIDTH; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here} } void sc_uint_base::invalid_index( int i ) const { std::stringstream msg; msg << "sc_uint[_base] bit selection: index = " << i << " violates 0 <= index <= " << (m_len - 1); SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_uint_base::invalid_range( int l, int r ) const { std::stringstream msg; msg << "sc_uint[_base] part selection: " << "left = " << l << ", right = " << r << " violates " << (m_len-1) << " >= left >= right >= 0"; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_uint_base::check_value() const { uint_type limit = (~UINT_ZERO >> m_ulen); if( m_val > limit ) { std::stringstream msg; msg << "sc_uint[_base]: value does not fit into a length of " << m_len; SC_REPORT_WARNING( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); } } // constructors sc_uint_base::sc_uint_base( const sc_bv_base& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v; } sc_uint_base::sc_uint_base( const sc_lv_base& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v; } sc_uint_base::sc_uint_base( const sc_int_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_uint_base::sc_uint_base( const sc_signed_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_uint_base::sc_uint_base( const sc_unsigned_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_uint_base::sc_uint_base( const sc_signed& a ) : m_val( 0 ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); #if 0 for( int i = m_len - 1; i >= 0; -- i ) { set( i, a.test( i ) ); } extend_sign(); #else *this = a.to_uint64(); #endif } sc_uint_base::sc_uint_base( const sc_unsigned& a ) : m_val( 0 ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); #if 0 for( int i = m_len - 1; i >= 0; -- i ) { set( i, a.test( i ) ); } extend_sign(); #else *this = a.to_uint64(); #endif } // assignment operators sc_uint_base& sc_uint_base::operator = ( const sc_signed& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.test( i ) ); } bool sgn = a.sign(); for( ; i < m_len; ++ i ) { // sign extension set( i, sgn ); } extend_sign(); return *this; } sc_uint_base& sc_uint_base::operator = ( const sc_unsigned& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.test( i ) ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_uint_base& sc_uint_base::operator = ( const sc_bv_base& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.get_bit( i ) ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_uint_base& sc_uint_base::operator = ( const sc_lv_base& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, sc_logic( a.get_bit( i ) ).to_bool() ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_uint_base& sc_uint_base::operator = ( const char* a ) { if( a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); } else if( *a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); } else try { int len = m_len; sc_ufix aa( a, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return this->operator = ( aa ); } catch( const sc_core::sc_report & ) { std::stringstream msg; msg << "character string '" << a << "' is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); } return *this; } // explicit conversion to character string const std::string sc_uint_base::to_string( sc_numrep numrep ) const { int len = m_len; sc_ufix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep ); } const std::string sc_uint_base::to_string( sc_numrep numrep, bool w_prefix ) const { int len = m_len; sc_ufix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep, w_prefix ); } // reduce methods bool sc_uint_base::and_reduce() const { return ( m_val == (~UINT_ZERO >> m_ulen) ); } bool sc_uint_base::or_reduce() const { return ( m_val != uint_type( 0 ) ); } bool sc_uint_base::xor_reduce() const { uint_type mask = ~UINT_ZERO; uint_type val = m_val; int n = SC_INTWIDTH; do { n >>= 1; mask >>= n; val = ((val & (mask << n)) >> n) ^ (val & mask); } while( n != 1 ); return ( val != uint_type( 0 ) ); } bool sc_uint_base::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; end_i = (low_i + (m_len-1)) / BITS_PER_DIGIT; // PROCESS THE FIRST WORD: mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)((dst_p[dst_i] & mask)); dst_i++; for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; return false; } //------------------------------------------------------------------------------ //"sc_uint_base::concat_get_data" // // This method transfers the value of this object instance to the supplied // array of sc_unsigned digits starting with the bit specified by low_i within // the array of digits. // // Notes: // (1) we don't worry about masking the high order data we transfer since // concat_get_data() is called from low order bit to high order bit. So // the bits above where we place ours will be filled in by someone else. // // dst_p -> array of sc_unsigned digits to be filled in. // low_i = first bit within dst_p to be set. //------------------------------------------------------------------------------ bool sc_uint_base::concat_get_data( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int high_i; // Index of high order bit in dst_p to set. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. bool result; // True if inserting non-zero value. uint_type val; // Value for this object. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; high_i = low_i + (m_len-1); end_i = high_i / BITS_PER_DIGIT; val = m_val; result = val != 0; // MASK OFF DATA TO BE TRANSFERRED BASE ON WIDTH: if ( m_len < 64 ) { mask = ~(~UINT_ZERO << m_len); val &= mask; } // PROCESS THE FIRST WORD: mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)(((dst_p[dst_i] & mask)) | ((val << left_shift) & DIGIT_MASK)); switch ( end_i - dst_i ) { // BITS ARE ACROSS TWO WORDS: case 1: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS THREE WORDS: case 2: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS FOUR WORDS: case 3: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; } return result; } // #### OPTIMIZE void sc_uint_base::concat_set(int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_uint_base::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src < 0) ? (int_type)-1 : 0; } void sc_uint_base::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_uint_base::concat_set(uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_uint_base::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_nbutils.cpp0000644000175000017500000014127014342422106022303 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbutils.cpp -- External and friend functions for both sc_signed and sc_unsigned classes. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_nbutils.cpp,v $ // Revision 1.4 2011/08/24 22:05:46 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.3 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.2 2007/11/04 21:26:40 acg // Andy Goodrich: added a buffer to the allocation of the q array to address // an issue with references outside the array by 1 byte detected by valgrind. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include #include #include #include #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/int/sc_nbutils.h" #include "sysc/kernel/sc_macros.h" namespace sc_dt { // only used within vec_from_str (non-standard, deprecated) static inline void is_valid_base(sc_numrep base) { switch (base) { case SC_NOBASE: case SC_BIN: case SC_OCT: case SC_DEC: case SC_HEX: break; case SC_BIN_US: case SC_BIN_SM: case SC_OCT_US: case SC_OCT_SM: case SC_HEX_US: case SC_HEX_SM: case SC_CSD: SC_REPORT_ERROR( sc_core::SC_ID_NOT_IMPLEMENTED_, "is_valid_base( sc_numrep base ) : " "bases SC_CSD, or ending in _US and _SM are not supported" ); break; default: std::stringstream msg; msg << "is_valid_base( sc_numrep base ) : base = " << base << " is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, msg.str().c_str() ); } } // ---------------------------------------------------------------------------- // ENUM : sc_numrep // // Enumeration of number representations for character string conversion. // ---------------------------------------------------------------------------- const std::string to_string( sc_numrep numrep ) { switch( numrep ) { # define CASE_ENUM2STR( Value ) \ case Value: return #Value CASE_ENUM2STR(SC_DEC); CASE_ENUM2STR(SC_BIN); CASE_ENUM2STR(SC_BIN_US); CASE_ENUM2STR(SC_BIN_SM); CASE_ENUM2STR(SC_OCT); CASE_ENUM2STR(SC_OCT_US); CASE_ENUM2STR(SC_OCT_SM); CASE_ENUM2STR(SC_HEX); CASE_ENUM2STR(SC_HEX_US); CASE_ENUM2STR(SC_HEX_SM); CASE_ENUM2STR(SC_CSD); # undef CASE_ENUM2STR default: return "unknown"; } } // ---------------------------------------------------------------------------- // SECTION: General utility functions. // ---------------------------------------------------------------------------- // Return the number of characters to advance the source of c. This // function implements one move of the FSM to parse the following // regular expressions. Error checking is done in the caller. small_type fsm_move(char c, small_type &b, small_type &s, small_type &state) { // Possible regular expressions (REs): // Let N = any digit depending on the base. // 1. [0|1|..|9]N* // 2. [+|-][0|1|..|9]N* // 3. 0[b|B|d|D|o|O|x|X][0|1|..|F]N* // 4. [+|-]?0[b|B|d|D|o|O|x|X][0|1|..|F]N* // // The finite state machine (FMS) to parse these regular expressions // has 4 states, 0 to 3. 0 is the initial state and 3 is the final // state. // // Default sign = SC_POS, default base = NB_DEFAULT_BASE. switch (state) { case 0: // The initial state. switch (c) { case '0': s = SC_POS; state = 1; return 0; // RE 1 or 3 case '+': s = SC_POS; state = 2; return 1; // RE 2 case '-': s = SC_NEG; state = 2; return 1; // RE 2 default: s = SC_POS; b = NB_DEFAULT_BASE; state = 3; return 0; // RE 1 } // break; //unreachable code case 1: // 0... switch (c) { case 'x': case 'X': b = SC_HEX; state = 3; return 2; // RE 3 or 4 case 'd': case 'D': b = SC_DEC; state = 3; return 2; // RE 3 or 4 case 'o': case 'O': b = SC_OCT; state = 3; return 2; // RE 3 or 4 case 'b': case 'B': b = SC_BIN; state = 3; return 2; // RE 3 or 4 default: b = NB_DEFAULT_BASE; state = 3; return 0; // RE 1 } // break; //unreachable code case 2: // +... or -... switch (c) { case '0': state = 1; return 0; // RE 2 or 4 default: b = NB_DEFAULT_BASE; state = 3; return 0; // RE 2 } // break; //unreachable code case 3: // The final state. break; default: // Any other state is not possible. sc_assert((0 <= state) && (state <= 3)); } // switch return 0; } // Get base b and sign s of the number in the char string v. Return a // pointer to the first char after the point where b and s are // determined or where the end of v is reached. The input string v has // to be null terminated. const char * get_base_and_sign(const char *v, small_type &b, small_type &s) { #ifdef DEBUG_SYSTEMC sc_assert(v != NULL); #endif const small_type STATE_START = 0; const small_type STATE_FINISH = 3; // Default sign = SC_POS, default base = 10. s = SC_POS; b = NB_DEFAULT_BASE; small_type state = STATE_START; small_type nskip = 0; // Skip that many chars. const char *u = v; while (*u) { if (isspace(*u)) // Skip white space. ++u; else { nskip += fsm_move(*u, b, s, state); if (state == STATE_FINISH) break; else ++u; } } // Test to see if the above loop executed more than it should // have. The max number of skipped chars is equal to the length of // the longest format specifier, e.g., "-0x". sc_assert(nskip <= 3); v += nskip; // Handles empty strings or strings without any digits after the // base or base and sign specifier. if (*v == '\0') { static const char msg[] = "get_base_and_sign( const char* v, small_type&, small_type& ) : " "v = \"\" is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg ); } return v; } //------------------------------------------------------------------------------ //"parse_binary_bits" // // This function parses the supplied string into the supplied vector as a // right justified bit value. // src_p -> character string representing the bits to be parsed. // dst_n = number of words in data_p and ctrl_p. // data_p -> words w/BITS_PER_DIGIT bits to receive the value's data bits. // ctrl_p -> words w/BITS_PER_DIGIT bits to receive the value's control bits, // or zero. // Result is true if value was non-zero. //------------------------------------------------------------------------------ void parse_binary_bits( const char* src_p, int dst_n, sc_digit* data_p, sc_digit* ctrl_p ) { int bit_i; // Number of bit now processing. sc_digit ctrl; // Control word now assembling. sc_digit data; // Data word now assembling. int delta_n; // src_n - dst_n*BITS_PER_DIGIT. int src_i; // Index in src_p now accessing (left to right). int src_n; // Length of source that is left in bits. int word_i; // Bit within word now accessing (left to right). // MAKE SURE WE HAVE A STRING TO PARSE: if( src_p == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); return; } if( *src_p == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); return; } // INDEX INTO THE SOURCE TO A DEPTH THAT WILL ACCOMODATE OUR SIZE: // // If the source is smaller than our value initialize our value to zero. src_n = strlen(src_p); delta_n = src_n - (dst_n*BITS_PER_DIGIT); if ( delta_n > 0 ) { src_p = &src_p[delta_n]; src_n -= delta_n; } else { for ( word_i = 0; word_i < dst_n; word_i++ ) data_p[word_i] = 0; if ( ctrl_p ) for ( word_i = 0; word_i < dst_n; word_i++ ) ctrl_p[word_i] = 0; } // LOOP OVER THE SOURCE ASSEMBLING WORDS AND PLACING THEM IN OUR VALUE: // // We stride right to left through the source in BITS_PER_DIGIT chunks. // Each of those chunks is processed from left to right a bit at a time. // We process the high order word specially, since there are less bits. src_n = src_n - BITS_PER_DIGIT; for (word_i=0; word_i < dst_n; word_i++) { src_i = src_n; // PARTIAL LAST WORD TO ASSEMBLE: if ( src_i < 0 ) { src_n += BITS_PER_DIGIT; data = 0; ctrl = 0; for ( src_i = 0; src_i < src_n; src_i++ ) { ctrl = ctrl << 1; data = data << 1; switch( src_p[src_i] ) { case 'X': case 'x': ctrl = ctrl | 1; data = data | 1; break; case '1': data = data | 1; break; case 'Z': case 'z': ctrl = ctrl | 1; break; case '0': break; default: { std::stringstream msg; msg << "character string '" << src_p << "' is not valid"; SC_REPORT_ERROR(sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return; } break; } } if ( ctrl_p ) ctrl_p[word_i] = ctrl; data_p[word_i] = data; break; } // FULL WORD TO BE ASSEMBLED: ctrl = 0; data = 0; for ( bit_i = 0; bit_i < BITS_PER_DIGIT; bit_i++ ) { ctrl = ctrl << 1; data = data << 1; switch( src_p[src_i++] ) { case 'X': case 'x': ctrl = ctrl | 1; data = data | 1; break; case '1': data = data | 1; break; case 'Z': case 'z': ctrl = ctrl | 1; break; case '0': break; default: { std::stringstream msg; msg << "character string '" << src_p << "' is not valid"; SC_REPORT_ERROR(sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return; } break; } } if ( ctrl_p ) ctrl_p[word_i] = ctrl; data_p[word_i] = data; src_n = src_n - BITS_PER_DIGIT; } } //------------------------------------------------------------------------------ //"parse_hex_bits" // // This function parses the supplied string into the supplied vector as a // right justified bit value. // src_p -> character string representing the bits to be parsed. // dst_n = number of words in data_p and ctrl_p. // data_p -> words w/32 bits to receive the value's data bits. // ctrl_p -> words w/32 bits to receive the value's control bits, // or zero. // Result is true if value was non-zero. //------------------------------------------------------------------------------ void parse_hex_bits( const char* src_p, int dst_n, sc_digit* data_p, sc_digit* ctrl_p ) { sc_digit ctrl; // Control word now assembling. sc_digit data; // Data word now assembling. int delta_n; // src_n - dst_n*BITS_PER_DIGIT. int digit_i; // Number of digit now processing. int src_i; // Index in src_p now accessing (left to right). int src_n; // Length of source that is left in bits. int word_i; // Bit within word now accessing (left to right). // MAKE SURE WE HAVE A STRING TO PARSE: if( src_p == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); return; } if( *src_p == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); return; } // INDEX INTO THE SOURCE TO A DEPTH THAT WILL ACCOMODATE OUR SIZE: // // If the source is smaller than our value initialize our value to zero. src_n = strlen(src_p); delta_n = src_n - (dst_n*8); if ( delta_n > 0 ) { src_p = &src_p[delta_n]; src_n -= delta_n; } else { for ( word_i = 0; word_i < dst_n; word_i++ ) data_p[word_i] = 0; if ( ctrl_p ) for ( word_i = 0; word_i < dst_n; word_i++ ) ctrl_p[word_i] = 0; } // LOOP OVER THE SOURCE ASSEMBLING WORDS AND PLACING THEM IN OUR VALUE: // // We stride right to left through the source in BITS_PER_DIGIT chunks. // Each of those chunks is processed from left to right a bit at a time. // We process the high order word specially, since there are less bits. src_n = src_n - 8; for (word_i=0; word_i < dst_n; word_i++) { src_i = src_n; // PARTIAL LAST WORD TO ASSEMBLE: if ( src_i < 0 ) { src_n += 8; data = 0; ctrl = 0; for ( src_i = 0; src_i < src_n; src_i++ ) { ctrl = ctrl << 4; data = data << 4; switch( src_p[src_i] ) { case 'X': case 'x': ctrl = ctrl | 15; data = data | 15; break; case 'F': case 'f': data = data | 15; break; case 'E': case 'e': data = data | 14; break; case 'D': case 'd': data = data | 13; break; case 'C': case 'c': data = data | 12; break; case 'B': case 'b': data = data | 11; break; case 'A': case 'a': data = data | 10; break; case '9': data = data | 9; break; case '8': data = data | 8; break; case '7': data = data | 7; break; case '6': data = data | 6; break; case '5': data = data | 5; break; case '4': data = data | 4; break; case '3': data = data | 3; break; case '2': data = data | 2; break; case '1': data = data | 1; break; case '0': break; case 'Z': case 'z': ctrl = ctrl | 15; break; default: { std::stringstream msg; msg << "character string '" << src_p << "' is not valid"; SC_REPORT_ERROR(sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return; } break; } } if ( ctrl_p ) ctrl_p[word_i] = ctrl; data_p[word_i] = data; break; } // FULL WORD TO BE ASSEMBLED: ctrl = 0; data = 0; for ( digit_i = 0; digit_i < 8; digit_i++ ) { ctrl = ctrl << 4; data = data << 4; switch( src_p[src_i++] ) { case 'X': case 'x': ctrl = ctrl | 15; data = data | 15; break; case 'F': case 'f': data = data | 15; break; case 'E': case 'e': data = data | 14; break; case 'D': case 'd': data = data | 13; break; case 'C': case 'c': data = data | 12; break; case 'B': case 'b': data = data | 11; break; case 'A': case 'a': data = data | 10; break; case '9': data = data | 9; break; case '8': data = data | 8; break; case '7': data = data | 7; break; case '6': data = data | 6; break; case '5': data = data | 5; break; case '4': data = data | 4; break; case '3': data = data | 3; break; case '2': data = data | 2; break; case '1': data = data | 1; break; case '0': break; case 'Z': case 'z': ctrl = ctrl | 15; break; default: { std::stringstream msg; msg << "character string '" << src_p << "' is not valid"; SC_REPORT_ERROR(sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return; } break; } } if ( ctrl_p ) ctrl_p[word_i] = ctrl; data_p[word_i] = data; src_n = src_n - BITS_PER_DIGIT; } } // ---------------------------------------------------------------------------- // SECTION: Utility functions involving unsigned vectors. // ---------------------------------------------------------------------------- // Read u from a null terminated char string v. Note that operator>> // in sc_nbcommon.cpp is similar to this function. small_type vec_from_str(int unb, int und, sc_digit *u, const char *v, sc_numrep base) { #ifdef DEBUG_SYSTEMC sc_assert((unb > 0) && (und > 0) && (u != NULL)); sc_assert(v != NULL); #endif is_valid_base(base); small_type b, s; // base and sign. v = get_base_and_sign(v, b, s); if (base != SC_NOBASE) { if (b == NB_DEFAULT_BASE) b = base; else { std::stringstream msg; msg << "vec_from_str( int, int, sc_digit*, const char*, sc_numrep base ) : " << "base = " << base << " does not match the default base"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return 0; } } vec_zero(und, u); char c; for ( ; (c = *v); ++v) { if (isalnum(c)) { small_type val; // Numeric value of a char. if (isalpha(c)) // Hex digit. val = toupper(c) - 'A' + 10; else val = c - '0'; if (val >= b) { std::stringstream msg; msg << "vec_from_str( int, int, sc_digit*, const char*, sc_numrep base ) : " << "'" << *v << "' is not a valid digit in base " << b; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return 0; } // digit = digit * b + val; vec_mul_small_on(und, u, b); if (val) vec_add_small_on(und, u, val); } else { std::stringstream msg; msg << "vec_from_str( int, int, sc_digit*, const char*, sc_numrep base ) : " << "'" << *v << "' is not a valid digit in base " << b; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return 0; } } return convert_signed_SM_to_2C_to_SM(s, unb, und, u); } // All vec_ functions assume that the vector to hold the result, // called w, has sufficient length to hold the result. For efficiency // reasons, we do not test whether or not we are out of bounds. // Compute w = u + v, where w, u, and v are vectors. // - ulen >= vlen // - wlen >= sc_max(ulen, vlen) + 1 void vec_add(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(w != NULL); sc_assert(ulen >= vlen); #endif const sc_digit *uend = (u + ulen); const sc_digit *vend = (v + vlen); sc_digit carry = 0; // Also used as sum to save space. // Add along the shorter v. while (v < vend) { carry += (*u++) + (*v++); (*w++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } // Propagate the carry. while (carry && (u < uend)) { carry = (*u++) + 1; (*w++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } // Copy the rest of u to the result. while (u < uend) (*w++) = (*u++); // Propagate the carry if it is still 1. if (carry) (*w) = 1; } // Compute u += v, where u and v are vectors. // - ulen >= vlen void vec_add_on(int ulen, sc_digit *ubegin, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (ubegin != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(ulen >= vlen); #endif sc_digit *u = ubegin; const sc_digit *uend = (u + ulen); const sc_digit *vend = (v + vlen); sc_digit carry = 0; // Also used as sum to save space. // Add along the shorter v. while (v < vend) { carry += (*u) + (*v++); (*u++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } // Propagate the carry. while (carry && (u < uend)) { carry = (*u) + 1; (*u++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } #ifdef DEBUG_SYSTEMC if( carry != 0 ) { SC_REPORT_WARNING( sc_core::SC_ID_WITHOUT_MESSAGE_, "vec_add_on( int, sc_digit*, int, const " "sc_digit* ) : " "result of addition is wrapped around" ); } #endif } // Compute u += v, where u and v are vectors. // - ulen < vlen void vec_add_on2(int ulen, sc_digit *ubegin, int #ifdef DEBUG_SYSTEMC vlen #endif , const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (ubegin != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(ulen < vlen); #endif sc_digit *u = ubegin; const sc_digit *uend = (u + ulen); sc_digit carry = 0; // Also used as sum to save space. // Add along the shorter u. while (u < uend) { carry += (*u) + (*v++); (*u++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } #ifdef DEBUG_SYSTEMC if( carry != 0 ) { SC_REPORT_WARNING( sc_core::SC_ID_WITHOUT_MESSAGE_, "vec_add_on2( int, sc_digit*, int, const " "sc_digit* ) : " "result of addition is wrapped around" ); } #endif } // Compute w = u + v, where w and u are vectors, and v is a scalar. void vec_add_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert(w != NULL); #endif const sc_digit *uend = (u + ulen); // Add along the shorter v. sc_digit carry = (*u++) + v; (*w++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; // Propagate the carry. while (carry && (u < uend)) { carry = (*u++) + 1; (*w++) = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } // Copy the rest of u to the result. while (u < uend) (*w++) = (*u++); // Propagate the carry if it is still 1. if (carry) (*w) = 1; } // Compute u += v, where u is vectors, and v is a scalar. void vec_add_small_on(int ulen, sc_digit *u, sc_digit v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif int i = 0; while (v && (i < ulen)) { v += u[i]; u[i++] = v & DIGIT_MASK; v >>= BITS_PER_DIGIT; } #ifdef DEBUG_SYSTEMC if( v != 0 ) { SC_REPORT_WARNING( sc_core::SC_ID_WITHOUT_MESSAGE_, "vec_add_small_on( int, sc_digit*, unsigned " "long ) : " "result of addition is wrapped around" ); } #endif } // Compute w = u - v, where w, u, and v are vectors. // - ulen >= vlen // - wlen >= sc_max(ulen, vlen) void vec_sub(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(w != NULL); sc_assert(ulen >= vlen); #endif const sc_digit *uend = (u + ulen); const sc_digit *vend = (v + vlen); sc_digit borrow = 0; // Also used as diff to save space. // Subtract along the shorter v. while (v < vend) { borrow = ((*u++) + DIGIT_RADIX) - (*v++) - borrow; (*w++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } // Propagate the borrow. while (borrow && (u < uend)) { borrow = ((*u++) + DIGIT_RADIX) - 1; (*w++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } #ifdef DEBUG_SYSTEMC sc_assert(borrow == 0); #endif // Copy the rest of u to the result. while (u < uend) (*w++) = (*u++); } // Compute u = u - v, where u and v are vectors. // - u > v // - ulen >= vlen void vec_sub_on(int ulen, sc_digit *ubegin, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (ubegin != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(ulen >= vlen); #endif sc_digit *u = ubegin; const sc_digit *uend = (u + ulen); const sc_digit *vend = (v + vlen); sc_digit borrow = 0; // Also used as diff to save space. // Subtract along the shorter v. while (v < vend) { borrow = ((*u) + DIGIT_RADIX) - (*v++) - borrow; (*u++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } // Propagate the borrow. while (borrow && (u < uend)) { borrow = ((*u) + DIGIT_RADIX) - 1; (*u++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } #ifdef DEBUG_SYSTEMC sc_assert(borrow == 0); #endif } // Compute u = v - u, where u and v are vectors. // - v > u // - ulen <= vlen or ulen > ulen void vec_sub_on2(int ulen, sc_digit *ubegin, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (ubegin != NULL)); sc_assert((vlen > 0) && (v != NULL)); #endif sc_digit *u = ubegin; const sc_digit *uend = (u + sc_min(ulen, vlen)); sc_digit borrow = 0; // Also used as diff to save space. // Subtract along the shorter u. while (u < uend) { borrow = ((*v++) + DIGIT_RADIX) - (*u) - borrow; (*u++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } #ifdef DEBUG_SYSTEMC if( borrow != 0 ) { SC_REPORT_WARNING( sc_core::SC_ID_WITHOUT_MESSAGE_, "vec_sub_on2( int, sc_digit*, int, const " "sc_digit* ) : " "result of subtraction is wrapped around" ); } #endif } // Compute w = u - v, where w and u are vectors, and v is a scalar. void vec_sub_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert(ulen > 0); sc_assert(u != NULL); #endif const sc_digit *uend = (u + ulen); // Add along the shorter v. sc_digit borrow = ((*u++) + DIGIT_RADIX) - v; (*w++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); // Propagate the borrow. while (borrow && (u < uend)) { borrow = ((*u++) + DIGIT_RADIX) - 1; (*w++) = borrow & DIGIT_MASK; borrow = 1 - (borrow >> BITS_PER_DIGIT); } #ifdef DEBUG_SYSTEMC sc_assert(borrow == 0); #endif // Copy the rest of u to the result. while (u < uend) (*w++) = (*u++); } // Compute u -= v, where u is vectors, and v is a scalar. void vec_sub_small_on(int ulen, sc_digit *u, sc_digit v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif for (int i = 0; i < ulen; ++i) { v = (u[i] + DIGIT_RADIX) - v; u[i] = v & DIGIT_MASK; v = 1 - (v >> BITS_PER_DIGIT); } #ifdef DEBUG_SYSTEMC sc_assert(v == 0); #endif } // Compute w = u * v, where w, u, and v are vectors. void vec_mul(int ulen, const sc_digit *u, int vlen, const sc_digit *vbegin, sc_digit *wbegin) { /* Consider u = Ax + B and v = Cx + D where x is equal to HALF_DIGIT_RADIX. In other words, A is the higher half of u and B is the lower half of u. The interpretation for v is similar. Then, we have the following picture: u_h u_l u: -------- -------- A B v_h v_l v: -------- -------- C D result (d): carry_before: -------- -------- carry_h carry_l result_before: -------- -------- -------- -------- R1_h R1_l R0_h R0_l -------- -------- BD_h BD_l -------- -------- AD_h AD_l -------- -------- BC_h BC_l -------- -------- AC_h AC_l result_after: -------- -------- -------- -------- R1_h' R1_l' R0_h' R0_l' prod_l = R0_h|R0_l + B * D + 0|carry_l = R0_h|R0_l + BD_h|BD_l + 0|carry_l prod_h = A * D + B * C + high_half(prod_l) + carry_h = AD_h|AD_l + BC_h|BC_l + high_half(prod_l) + 0|carry_h carry = A * C + high_half(prod_h) = AC_h|AC_l + high_half(prod_h) R0_l' = low_half(prod_l) R0_h' = low_half(prod_h) R0 = high_half(prod_h)|low_half(prod_l) where '|' is the concatenation operation and the suffixes 0 and 1 show the iteration number, i.e., 0 is the current iteration and 1 is the next iteration. NOTE: sc_max(prod_l, prod_h, carry) <= 2 * x^2 - 1, so any of these numbers can be stored in a digit. NOTE: low_half(u) returns the lower BITS_PER_HALF_DIGIT of u, whereas high_half(u) returns the rest of the bits, which may contain more bits than BITS_PER_HALF_DIGIT. */ #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (vbegin != NULL)); sc_assert(wbegin != NULL); #endif #define prod_h carry const sc_digit *uend = (u + ulen); const sc_digit *vend = (vbegin + vlen); while (u < uend) { sc_digit u_h = (*u++); // A|B sc_digit u_l = low_half(u_h); // B u_h = high_half(u_h); // A #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(u_h == (u_h & HALF_DIGIT_MASK)); #endif sc_digit carry = 0; sc_digit *w = (wbegin++); const sc_digit *v = vbegin; while (v < vend) { sc_digit v_h = (*v++); // C|D sc_digit v_l = low_half(v_h); // D v_h = high_half(v_h); // C #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(v_h == (v_h & HALF_DIGIT_MASK)); #endif sc_digit prod_l = (*w) + u_l * v_l + low_half(carry); prod_h = u_h * v_l + u_l * v_h + high_half(prod_l) + high_half(carry); (*w++) = concat(low_half(prod_h), low_half(prod_l)); carry = u_h * v_h + high_half(prod_h); } (*w) = carry; } #undef prod_h } // Compute w = u * v, where w and u are vectors, and v is a scalar. // - 0 < v < HALF_DIGIT_RADIX. void vec_mul_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert(w != NULL); sc_assert((0 < v) && (v < HALF_DIGIT_RADIX)); #endif #define prod_h carry const sc_digit *uend = (u + ulen); sc_digit carry = 0; while (u < uend) { sc_digit u_AB = (*u++); #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(high_half(u_AB) == high_half_masked(u_AB)); #endif sc_digit prod_l = v * low_half(u_AB) + low_half(carry); prod_h = v * high_half(u_AB) + high_half(prod_l) + high_half(carry); (*w++) = concat(low_half(prod_h), low_half(prod_l)); carry = high_half(prod_h); } (*w) = carry; #undef prod_h } // Compute u = u * v, where u is a vector, and v is a scalar. // - 0 < v < HALF_DIGIT_RADIX. void vec_mul_small_on(int ulen, sc_digit *u, sc_digit v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((0 < v) && (v < HALF_DIGIT_RADIX)); #endif #define prod_h carry sc_digit carry = 0; for (int i = 0; i < ulen; ++i) { #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(high_half(u[i]) == high_half_masked(u[i])); #endif sc_digit prod_l = v * low_half(u[i]) + low_half(carry); prod_h = v * high_half(u[i]) + high_half(prod_l) + high_half(carry); u[i] = concat(low_half(prod_h), low_half(prod_l)); carry = high_half(prod_h); } #undef prod_h #ifdef DEBUG_SYSTEMC if( carry != 0 ) { SC_REPORT_WARNING( sc_core::SC_ID_WITHOUT_MESSAGE_, "vec_mul_small_on( int, sc_digit*, unsigned " "long ) : " "result of multiplication is wrapped around" ); } #endif } // Compute w = u / v, where w, u, and v are vectors. // - u and v are assumed to have at least two digits as uchars. void vec_div_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(w != NULL); sc_assert(BITS_PER_DIGIT >= 3 * BITS_PER_BYTE); #endif // We will compute q = x / y where x = u and y = v. The reason for // using x and y is that x and y are BYTE_RADIX copies of u and v, // respectively. The use of BYTE_RADIX radix greatly simplifies the // complexity of the division operation. These copies are also // needed even when we use DIGIT_RADIX representation. int xlen = BYTES_PER_DIGIT * ulen + 1; int ylen = BYTES_PER_DIGIT * vlen; #ifdef SC_MAX_NBITS uchar x[DIV_CEIL2(SC_MAX_NBITS, BITS_PER_BYTE)]; uchar y[DIV_CEIL2(SC_MAX_NBITS, BITS_PER_BYTE)]; uchar q[DIV_CEIL2(SC_MAX_NBITS, BITS_PER_BYTE)]; #else uchar *x = new uchar[xlen]; uchar *y = new uchar[ylen]; // valgrind complains about us accessing too far to so leave a buffer. uchar *q = new uchar[(xlen - ylen) + 10]; #endif // q corresponds to w. // Set (uchar) x = (sc_digit) u. xlen = vec_to_char(ulen, u, xlen, x); // Skip all the leading zeros in x. while ((--xlen >= 0) && (! x[xlen])) continue; xlen++; // Set (uchar) y = (sc_digit) v. ylen = vec_to_char(vlen, v, ylen, y); // Skip all the leading zeros in y. while ((--ylen >= 0) && (! y[ylen])) continue; ylen++; #ifdef DEBUG_SYSTEMC sc_assert(xlen > 1); sc_assert(ylen > 1); #endif // At this point, all the leading zeros are eliminated from x and y. // Zero the last digit of x. x[xlen] = 0; // The first two digits of y. sc_digit y2 = (y[ylen - 1] << BITS_PER_BYTE) + y[ylen - 2]; const sc_digit DOUBLE_BITS_PER_BYTE = 2 * BITS_PER_BYTE; // Find each q[k]. for (int k = (xlen - ylen); k >= 0; --k) { // qk is a guess for q[k] such that q[k] = qk or qk - 1. sc_digit qk; // Find qk by just using 2 digits of y and 3 digits of x. The // following code assumes that sizeof(sc_digit) >= 3 BYTEs. int k2 = k + ylen; qk = ((x[k2] << DOUBLE_BITS_PER_BYTE) + (x[k2 - 1] << BITS_PER_BYTE) + x[k2 - 2]) / y2; if (qk >= BYTE_RADIX) // qk cannot be larger than the largest qk = BYTE_RADIX - 1; // digit in BYTE_RADIX. // q[k] = qk or qk - 1. The following if-statement determines which: if (qk) { uchar *xk = (x + k); // A shortcut for x[k]. // x = x - y * qk : sc_digit carry = 0; for (int i = 0; i < ylen; ++i) { carry += y[i] * qk; sc_digit diff = (xk[i] + BYTE_RADIX) - (carry & BYTE_MASK); xk[i] = (uchar)(diff & BYTE_MASK); carry = (carry >> BITS_PER_BYTE) + (1 - (diff >> BITS_PER_BYTE)); } // If carry, qk may be one too large. if (carry) { // 2's complement the last digit. carry = (xk[ylen] + BYTE_RADIX) - carry; xk[ylen] = (uchar)(carry & BYTE_MASK); carry = 1 - (carry >> BITS_PER_BYTE); if (carry) { // qk was one too large, so decrement it. --qk; // Since qk was decreased by one, y must be added to x: // That is, x = x - y * (qk - 1) = x - y * qk + y = x_above + y. carry = 0; for (int i = 0; i < ylen; ++i) { carry += xk[i] + y[i]; xk[i] = (uchar)(carry & BYTE_MASK); carry >>= BITS_PER_BYTE; } if (carry) xk[ylen] = (uchar)((xk[ylen] + 1) & BYTE_MASK); } // second if carry } // first if carry } // if qk q[k] = (uchar)qk; } // for k // Set (sc_digit) w = (uchar) q. vec_from_char(xlen - ylen + 1, q, ulen, w); #ifndef SC_MAX_NBITS delete [] x; delete [] y; delete [] q; #endif } // Compute w = u / v, where u and w are vectors, and v is a scalar. // - 0 < v < HALF_DIGIT_RADIX. Below, we rename w to q. void vec_div_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *q) { // Given (u = u_1u_2...u_n)_b = (q = q_1q_2...q_n) * v + r, where b // is the base, and 0 <= r < v. Then, the algorithm is as follows: // // r = 0; // for (j = 1; j <= n; j++) { // q_j = (r * b + u_j) / v; // r = (r * b + u_j) % v; // } // // In our case, b = DIGIT_RADIX, and u = Ax + B and q = Cx + D where // x = HALF_DIGIT_RADIX. Note that r < v < x and b = x^2. Then, a // typical situation is as follows: // // ---- ---- // 0 r // ---- ---- // A B // ---- ---- ---- // r A B = r * b + u // // Hence, C = (r|A) / v. // D = (((r|A) % v)|B) / v // r = (((r|A) % v)|B) % v #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert(q != NULL); sc_assert((0 < v) && (v < HALF_DIGIT_RADIX)); #endif #define q_h r sc_digit r = 0; const sc_digit *ubegin = u; u += ulen; q += ulen; while (ubegin < u) { sc_digit u_AB = (*--u); // A|B #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(high_half(u_AB) == high_half_masked(u_AB)); #endif sc_digit num = concat(r, high_half(u_AB)); // num = r|A q_h = num / v; // C num = concat((num % v), low_half(u_AB)); // num = (((r|A) % v)|B) (*--q) = concat(q_h, num / v); // q = C|D r = num % v; } #undef q_h } // Compute w = u % v, where w, u, and v are vectors. // - u and v are assumed to have at least two digits as uchars. void vec_rem_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(w != NULL); sc_assert(BITS_PER_DIGIT >= 3 * BITS_PER_BYTE); #endif // This function is adapted from vec_div_large. int xlen = BYTES_PER_DIGIT * ulen + 1; int ylen = BYTES_PER_DIGIT * vlen; #ifdef SC_MAX_NBITS uchar x[DIV_CEIL2(SC_MAX_NBITS, BITS_PER_BYTE)]; uchar y[DIV_CEIL2(SC_MAX_NBITS, BITS_PER_BYTE)]; #else uchar *x = new uchar[xlen]; uchar *y = new uchar[ylen]; #endif // r corresponds to w. // Set (uchar) x = (sc_digit) u. xlen = vec_to_char(ulen, u, xlen, x); // Skip all the leading zeros in x. while ((--xlen >= 0) && (! x[xlen])) continue; xlen++; // Set (uchar) y = (sc_digit) v. ylen = vec_to_char(vlen, v, ylen, y); // Skip all the leading zeros in y. while ((--ylen >= 0) && (! y[ylen])) continue; ylen++; #ifdef DEBUG_SYSTEMC sc_assert(xlen > 1); sc_assert(ylen > 1); #endif // At this point, all the leading zeros are eliminated from x and y. // Zero the last digit of x. x[xlen] = 0; // The first two digits of y. sc_digit y2 = (y[ylen - 1] << BITS_PER_BYTE) + y[ylen - 2]; const sc_digit DOUBLE_BITS_PER_BYTE = 2 * BITS_PER_BYTE; // Find each q[k]. for (int k = xlen - ylen; k >= 0; --k) { // qk is a guess for q[k] such that q[k] = qk or qk - 1. sc_digit qk; // Find qk by just using 2 digits of y and 3 digits of x. The // following code assumes that sizeof(sc_digit) >= 3 BYTEs. int k2 = k + ylen; qk = ((x[k2] << DOUBLE_BITS_PER_BYTE) + (x[k2 - 1] << BITS_PER_BYTE) + x[k2 - 2]) / y2; if (qk >= BYTE_RADIX) // qk cannot be larger than the largest qk = BYTE_RADIX - 1; // digit in BYTE_RADIX. // q[k] = qk or qk - 1. The following if-statement determines which. if (qk) { uchar *xk = (x + k); // A shortcut for x[k]. // x = x - y * qk; sc_digit carry = 0; for (int i = 0; i < ylen; ++i) { carry += y[i] * qk; sc_digit diff = (xk[i] + BYTE_RADIX) - (carry & BYTE_MASK); xk[i] = (uchar)(diff & BYTE_MASK); carry = (carry >> BITS_PER_BYTE) + (1 - (diff >> BITS_PER_BYTE)); } if (carry) { // 2's complement the last digit. carry = (xk[ylen] + BYTE_RADIX) - carry; xk[ylen] = (uchar)(carry & BYTE_MASK); carry = 1 - (carry >> BITS_PER_BYTE); if (carry) { // qk was one too large, so decrement it. // --qk; // x = x - y * (qk - 1) = x - y * qk + y = x_above + y. carry = 0; for (int i = 0; i < ylen; ++i) { carry += xk[i] + y[i]; xk[i] = (uchar)(carry & BYTE_MASK); carry >>= BITS_PER_BYTE; } if (carry) xk[ylen] = (uchar)((xk[ylen] + 1) & BYTE_MASK); } // second if carry } // first if carry } // if qk } // for k // Set (sc_digit) w = (uchar) x for the remainder. vec_from_char(ylen, x, ulen, w); #ifndef SC_MAX_NBITS delete [] x; delete [] y; #endif } // Compute r = u % v, where u is a vector, and r and v are scalars. // - 0 < v < HALF_DIGIT_RADIX. // - The remainder r is returned. sc_digit vec_rem_small(int ulen, const sc_digit *u, sc_digit v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((0 < v) && (v < HALF_DIGIT_RADIX)); #endif // This function is adapted from vec_div_small(). sc_digit r = 0; const sc_digit *ubegin = u; u += ulen; while (ubegin < u) { sc_digit u_AB = (*--u); // A|B #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(high_half(u_AB) == high_half_masked(u_AB)); #endif // r = (((r|A) % v)|B) % v r = (concat(((concat(r, high_half(u_AB))) % v), low_half(u_AB))) % v; } return r; } // u = u / v, r = u % v. sc_digit vec_rem_on_small(int ulen, sc_digit *u, sc_digit v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert(v > 0); #endif #define q_h r sc_digit r = 0; const sc_digit *ubegin = u; u += ulen; while (ubegin < u) { sc_digit u_AB = (*--u); // A|B #ifdef DEBUG_SYSTEMC // The overflow bits must be zero. sc_assert(high_half(u_AB) == high_half_masked(u_AB)); #endif sc_digit num = concat(r, high_half(u_AB)); // num = r|A q_h = num / v; // C num = concat((num % v), low_half(u_AB)); // num = (((r|A) % v)|B) (*u) = concat(q_h, num / v); // q = C|D r = num % v; } #undef q_h return r; } // Set (uchar) v = (sc_digit) u. Return the new vlen. int vec_to_char(int ulen, const sc_digit *u, int vlen, uchar *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); #endif int nbits = ulen * BITS_PER_DIGIT; int right = 0; int left = right + BITS_PER_BYTE - 1; vlen = 0; while (nbits > 0) { int left_digit = left / BITS_PER_DIGIT; int right_digit = right / BITS_PER_DIGIT; int nsr = ((vlen << LOG2_BITS_PER_BYTE) % BITS_PER_DIGIT); int d = u[right_digit] >> nsr; if (left_digit != right_digit) { if (left_digit < ulen) d |= u[left_digit] << (BITS_PER_DIGIT - nsr); } v[vlen++] = (uchar)(d & BYTE_MASK); left += BITS_PER_BYTE; right += BITS_PER_BYTE; nbits -= BITS_PER_BYTE; } return vlen; } // Set (sc_digit) v = (uchar) u. // - sizeof(uchar) <= sizeof(sc_digit), void vec_from_char(int ulen, const uchar *u, int vlen, sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(sizeof(uchar) <= sizeof(sc_digit)); #endif sc_digit *vend = (v + vlen); const int nsr = BITS_PER_DIGIT - BITS_PER_BYTE; const sc_digit mask = one_and_ones(nsr); (*v) = (sc_digit) u[ulen - 1]; for (int i = ulen - 2; i >= 0; --i) { // Manual inlining of vec_shift_left(). sc_digit *viter = v; sc_digit carry = 0; while (viter < vend) { sc_digit vval = (*viter); (*viter++) = (((vval & mask) << BITS_PER_BYTE) | carry); carry = vval >> nsr; } if (viter < vend) (*viter) = carry; (*v) |= (sc_digit) u[i]; } } // Set u <<= nsl. // If nsl is negative, it is ignored. void vec_shift_left(int ulen, sc_digit *u, int nsl) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif if (nsl <= 0) return; // Shift left whole digits if nsl is large enough. if (nsl >= (int) BITS_PER_DIGIT) { int nd; if (nsl % BITS_PER_DIGIT == 0) { nd = nsl / BITS_PER_DIGIT; // No need to use DIV_CEIL(nsl). nsl = 0; } else { nd = DIV_CEIL(nsl) - 1; nsl -= nd * BITS_PER_DIGIT; } if (nd) { // Shift left for nd digits. for (int j = ulen - 1; j >= nd; --j) u[j] = u[j - nd]; vec_zero( sc_min( nd, ulen ), u ); } if (nsl == 0) return; } // Shift left if nsl < BITS_PER_DIGIT. sc_digit *uiter = u; sc_digit *uend = uiter + ulen; int nsr = BITS_PER_DIGIT - nsl; sc_digit mask = one_and_ones(nsr); sc_digit carry = 0; while (uiter < uend) { sc_digit uval = (*uiter); (*uiter++) = (((uval & mask) << nsl) | carry); carry = uval >> nsr; } if (uiter < uend) (*uiter) = carry; } // Set u >>= nsr. // If nsr is negative, it is ignored. void vec_shift_right(int ulen, sc_digit *u, int nsr, sc_digit fill) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif // fill is usually either 0 or DIGIT_MASK; it can be any value. if (nsr <= 0) return; // Shift right whole digits if nsr is large enough. if (nsr >= (int) BITS_PER_DIGIT) { int nd; if (nsr % BITS_PER_DIGIT == 0) { nd = nsr / BITS_PER_DIGIT; nsr = 0; } else { nd = DIV_CEIL(nsr) - 1; nsr -= nd * BITS_PER_DIGIT; } if (nd) { // Shift right for nd digits. for (int j = 0; j < (ulen - nd); ++j) u[j] = u[j + nd]; if (fill) { for (int j = ulen - sc_min( nd, ulen ); j < ulen; ++j) u[j] = fill; } else vec_zero(ulen - sc_min( nd, ulen ), ulen, u); } if (nsr == 0) return; } // Shift right if nsr < BITS_PER_DIGIT. sc_digit *ubegin = u; sc_digit *uiter = (ubegin + ulen); int nsl = BITS_PER_DIGIT - nsr; sc_digit mask = one_and_ones(nsr); sc_digit carry = (fill & mask) << nsl; while (ubegin < uiter) { sc_digit uval = (*--uiter); (*uiter) = (uval >> nsr) | carry; carry = (uval & mask) << nsl; } } // Let u[l..r], where l and r are left and right bit positions // respectively, be equal to its mirror image. void vec_reverse(int unb, int und, sc_digit *ud, int l, int r) { #ifdef DEBUG_SYSTEMC sc_assert((unb > 0) && (und > 0) && (ud != NULL)); sc_assert((0 <= r) && (r <= l) && (l < unb)); #endif if (l < r) { std::stringstream msg; msg << "vec_reverse( int, int, sc_digit*, int l, int r ) : " << "l = " << l << " < r = " << r << " is not valid", SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); return; } // Make sure that l and r are within bounds. r = sc_max(r, 0); l = sc_min(l, unb - 1); // Allocate memory for processing. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[und]; #endif // d is a copy of ud. vec_copy(und, d, ud); // Based on the value of the ith in d, find the value of the jth bit // in ud. for (int i = l, j = r; i >= r; --i, ++j) { if ((d[digit_ord(i)] & one_and_zeros(bit_ord(i))) != 0) // Test. ud[digit_ord(j)] |= one_and_zeros(bit_ord(j)); // Set. else ud[digit_ord(j)] &= ~(one_and_zeros(bit_ord(j))); // Clear. } #ifndef SC_MAX_NBITS delete [] d; #endif } #ifdef SC_MAX_NBITS void test_bound_failed(int nb ) { std::stringstream msg; msg << "test_bound( int nb ) : " "nb = " << nb << " > SC_MAX_NBITS = " << SC_MAX_NBITS << " is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); } #endif // SC_MAX_NBITS } // namespace sc_dt // End of file. systemc-2.3.4/src/sysc/datatypes/int/sc_signed_bitref.inc0000644000175000017500000000777514342422106023431 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signed_bitref.h -- Proxy class that is declared in sc_signed.h. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // CLASS : sc_signed_bitref_r // // Proxy class for sc_signed bit selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to uint64 sc_signed_bitref_r::operator uint64 () const { return m_obj_p->test( m_index ); } bool sc_signed_bitref_r::operator ! () const { return ( ! m_obj_p->test( m_index ) ); } bool sc_signed_bitref_r::operator ~ () const { return ( ! m_obj_p->test( m_index ) ); } // ---------------------------------------------------------------------------- // CLASS : sc_signed_bitref // // Proxy class for sc_signed bit selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators const sc_signed_bitref& sc_signed_bitref::operator = ( const sc_signed_bitref_r& b ) { m_obj_p->set( m_index, (bool) b ); return *this; } const sc_signed_bitref& sc_signed_bitref::operator = ( const sc_signed_bitref& b ) { m_obj_p->set( m_index, (bool) b ); return *this; } const sc_signed_bitref& sc_signed_bitref::operator = ( bool b ) { m_obj_p->set( m_index, b ); return *this; } const sc_signed_bitref& sc_signed_bitref::operator &= ( bool b ) { if( ! b ) { m_obj_p->clear( m_index ); } return *this; } const sc_signed_bitref& sc_signed_bitref::operator |= ( bool b ) { if( b ) { m_obj_p->set( m_index ); } return *this; } const sc_signed_bitref& sc_signed_bitref::operator ^= ( bool b ) { if( b ) { m_obj_p->invert( m_index ); } return *this; } // #### OPTIMIZE void sc_signed_bitref::concat_set(int64 src, int low_i) { bool value = 1 & ((low_i < 64) ? (src >> low_i) : (src >> 63)); m_obj_p->set(m_index, value); } void sc_signed_bitref::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) m_obj_p->set(m_index, src.test(low_i)); else m_obj_p->set(m_index, src<0); } void sc_signed_bitref::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.length() ) m_obj_p->set(m_index, src.test(low_i)); else m_obj_p->set(m_index, 0); } void sc_signed_bitref::concat_set(uint64 src, int low_i) { bool value = 1 & ((low_i < 64) ? (src >> low_i) : 0); m_obj_p->set(m_index, value); } // other methods void sc_signed_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } // End of file systemc-2.3.4/src/sysc/datatypes/int/sc_unsigned_bitref.inc0000644000175000017500000001005414342422106023754 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_unsigned_bitref.h -- Proxy class that is declared in sc_unsigned.h. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref_r // // Proxy class for sc_unsigned bit selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to uint64 sc_unsigned_bitref_r::operator uint64 () const { return m_obj_p->test( m_index ); } bool sc_unsigned_bitref_r::operator ! () const { return ( ! m_obj_p->test( m_index ) ); } bool sc_unsigned_bitref_r::operator ~ () const { return ( ! m_obj_p->test( m_index ) ); } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref // // Proxy class for sc_unsigned bit selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators const sc_unsigned_bitref& sc_unsigned_bitref::operator = ( const sc_unsigned_bitref_r& b ) { m_obj_p->set( m_index, (bool) b ); return *this; } const sc_unsigned_bitref& sc_unsigned_bitref::operator = ( const sc_unsigned_bitref& b ) { m_obj_p->set( m_index, (bool) b ); return *this; } const sc_unsigned_bitref& sc_unsigned_bitref::operator = ( bool b ) { m_obj_p->set( m_index, b ); return *this; } const sc_unsigned_bitref& sc_unsigned_bitref::operator &= ( bool b ) { if( ! b ) { m_obj_p->clear( m_index ); } return *this; } const sc_unsigned_bitref& sc_unsigned_bitref::operator |= ( bool b ) { if( b ) { m_obj_p->set( m_index ); } return *this; } const sc_unsigned_bitref& sc_unsigned_bitref::operator ^= ( bool b ) { if( b ) { m_obj_p->invert( m_index ); } return *this; } // #### OPTIMIZE void sc_unsigned_bitref::concat_set(int64 src, int low_i) { bool value = 1 & ((low_i < 64) ? (src >> low_i) : (src >> 63)); m_obj_p->set(m_index, value); } void sc_unsigned_bitref::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) m_obj_p->set(m_index, src.test(low_i)); else m_obj_p->set(m_index, src<0); } void sc_unsigned_bitref::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.nbits ) m_obj_p->set(m_index, src.test(low_i)); else m_obj_p->set(m_index, 0); } void sc_unsigned_bitref::concat_set(uint64 src, int low_i) { bool value = ((low_i < 64) ? (src >> low_i)&1 : 0); m_obj_p->set(m_index, value); } // other methods void sc_unsigned_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } // End of file systemc-2.3.4/src/sysc/datatypes/int/sc_unsigned_subref.inc0000644000175000017500000002216514342422106023775 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_unsigned_subref.h -- Proxy class that is declared in sc_unsigned.h. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref_r // // Proxy class for sc_unsigned part selection (r-value only). // ---------------------------------------------------------------------------- // concatenation support uint64 sc_unsigned_subref_r::concat_get_uint64() const // #### Speed up! { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint64(); } bool sc_unsigned_subref_r::concat_get_ctrl(sc_digit* dst_p, int low_i) const // #### Speed up! { sc_unsigned a( m_obj_p, m_left, m_right ); return a.concat_get_ctrl( dst_p, low_i ); } bool sc_unsigned_subref_r::concat_get_data(sc_digit* dst_p, int low_i) const // #### Speed up! { sc_unsigned a( m_obj_p, m_left, m_right ); return a.concat_get_data( dst_p, low_i ); } // implicit conversion to sc_unsigned sc_unsigned_subref_r::operator sc_unsigned () const { return sc_unsigned( m_obj_p, m_left, m_right ); } // explicit conversions int sc_unsigned_subref_r::to_int() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_int(); } unsigned int sc_unsigned_subref_r::to_uint() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint(); } long sc_unsigned_subref_r::to_long() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_long(); } unsigned long sc_unsigned_subref_r::to_ulong() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_ulong(); } int64 sc_unsigned_subref_r::to_int64() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_int64(); } uint64 sc_unsigned_subref_r::to_uint64() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint64(); } double sc_unsigned_subref_r::to_double() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_double(); } // explicit conversion to character string const std::string sc_unsigned_subref_r::to_string( sc_numrep numrep ) const { sc_unsigned a( length() ); a = *this; return a.to_string( numrep ); } const std::string sc_unsigned_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { sc_unsigned a( length() ); a = *this; return a.to_string( numrep, w_prefix ); } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref // // Proxy class for sc_unsigned part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_unsigned_subref_r& a ) { return operator = ( (sc_unsigned)( a ) ); } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_unsigned_subref& a ) { if( this == &a ) { return *this; } return operator = ( (sc_unsigned)( a ) ); } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_unsigned& v ) { int i; int l = sc_min( m_left, v.nbits - 1 + m_right ); for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); for ( ; i <= m_left; i++ ) m_obj_p->set( i, v.test( l ) ); return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_signed_subref_r& v ) { return operator = ( (sc_unsigned)( v ) ); } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_signed& v ) { int i; int l = sc_min( m_left, v.nbits - 1 + m_right ); for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); for ( ; i <= m_left; i++ ) m_obj_p->set( i, 0 ); return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( unsigned long v ) { for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v & 1 ) ); v >>= 1; } return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( long v ) { unsigned long v2 = (unsigned long) v; for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v2 & 1 ) ); v2 >>= 1; } return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( uint64 v ) { for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v & 1 ) ); v >>= 1; } return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( int64 v ) { uint64 v2 = (uint64) v; for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v2 & 1 ) ); v2 >>= 1; } return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( double v ) { is_bad_double(v); int nb = m_left - m_right + 1; int nd = DIV_CEIL(nb); #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif if (v < 0) v = -v; int i = 0; while (std::floor(v) && (i < nd)) { #ifndef _WIN32 d[i++] = (sc_digit) std::floor(remainder(v, DIGIT_RADIX)); #else d[i++] = (sc_digit) std::floor(std::fmod(v, DIGIT_RADIX)); #endif v /= DIGIT_RADIX; } vec_zero(i, nd, d); sc_digit val = 1; // Bit value. int j = 0; // Current digit in d. i = 0; // Current bit in d. while (i < nb) { m_obj_p->set(i + m_right, (bool) (d[j] & val)); ++i; if (i % BITS_PER_DIGIT == 0) { val = 1; ++j; } else val <<= 1; } #ifndef SC_MAX_NBITS delete [] d; #endif return *this; } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_int_base& a ) { return operator = ( (int64) a ); } const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_uint_base& a ) { return operator = ( (uint64) a ); } // concatenation methods void sc_unsigned_subref::concat_set( int64 src, int low_i ) { int i; int l; bool sign = src < 0; if ( low_i < 64 ) { src = src >> low_i; l = sc_min( m_left, (63-low_i) + m_right ); for( i = m_right; i <= l; ++ i ) { m_obj_p->set( i, src & 1 ); src = src >> 1; } for ( ; i <= m_left; i++ ) m_obj_p->set(sign); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(sign); } } void sc_unsigned_subref::concat_set( const sc_signed& src, int low_i ) { int i; int l; int src_i; bool sign = src.test(src.nbits-1); l = src.nbits - (low_i+1); if ( l >= 0 ) { src_i = low_i; l = sc_min( m_left, l + m_right ); for( i = m_right; i <= l; ++ i, src_i++ ) { m_obj_p->set( i, src.test( src_i ) ); } for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign); } } void sc_unsigned_subref::concat_set( const sc_unsigned& src, int low_i ) { int i; int l; int src_i; l = src.nbits - (low_i+2); if ( l >= 0 ) { src_i = low_i; l = sc_min( m_left, l + m_right ); for( i = m_right; i <= l; ++ i, src_i++ ) { m_obj_p->set( i, src.test( src_i ) ); } for ( ; i <= m_left; i++ ) m_obj_p->set(i, false); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, false); } } void sc_unsigned_subref::concat_set( uint64 src, int low_i ) { int i; int l; if ( low_i < 64 ) { src = src >> low_i; l = sc_min( m_left, (63-low_i) + m_right ); for( i = m_right; i <= l; ++ i ) { m_obj_p->set( i, src & 1 ); src = src >> 1; } for ( ; i <= m_left; i++ ) m_obj_p->set(false); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false); } } // other methods void sc_unsigned_subref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // End of file systemc-2.3.4/src/sysc/datatypes/int/sc_int_ids.h0000644000175000017500000000523514342422106021721 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_int_ids.h -- Report ids for the datatypes/int code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_int_ids.h,v $ // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_INT_IDS_H #define SC_INT_IDS_H #include "sysc/utils/sc_report.h" // ---------------------------------------------------------------------------- // Report ids (datatypes/int) // // Report ids in the range of 400-499. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; // in sc_report_handler.cpp #endif SC_DEFINE_MESSAGE( SC_ID_INIT_FAILED_, 400, "initialization failed" ) SC_DEFINE_MESSAGE( SC_ID_ASSIGNMENT_FAILED_, 401, "assignment failed" ) SC_DEFINE_MESSAGE( SC_ID_OPERATION_FAILED_, 402, "operation failed" ) SC_DEFINE_MESSAGE( SC_ID_CONVERSION_FAILED_, 403, "conversion failed" ) #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_length_param.h0000644000175000017500000001221514342422106022725 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_length_param.h - Original Author: Martin Janssen, Synopsys, Inc., 2002-03-19 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_length_param.h,v $ // Revision 1.3 2011/08/24 22:05:46 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.4 2006/05/08 17:50:01 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_LENGTH_PARAM_H #define SC_LENGTH_PARAM_H #include "sysc/datatypes/fx/sc_context.h" namespace sc_dt { // classes defined in this module class sc_length_param; // friend operator declarations SC_API bool operator == ( const sc_length_param&, const sc_length_param& ); SC_API bool operator != ( const sc_length_param&, const sc_length_param& ); // ---------------------------------------------------------------------------- // CLASS : sc_length_param // // Length parameter type. // ---------------------------------------------------------------------------- class SC_API sc_length_param { public: sc_length_param(); sc_length_param( int ); sc_length_param( const sc_length_param& ); explicit sc_length_param( sc_without_context ); sc_length_param& operator = ( const sc_length_param& ); friend SC_API bool operator == ( const sc_length_param&, const sc_length_param& ); friend SC_API bool operator != ( const sc_length_param&, const sc_length_param& ); int len() const; void len( int ); const std::string to_string() const; void print( ::std::ostream& = ::std::cout ) const; void dump( ::std::ostream& = ::std::cout ) const; private: int m_len; }; } // namespace sc_dt // ---------------------------------------------------------------------------- // TYPEDEF : sc_length_context // // Context type for the length parameter type. // ---------------------------------------------------------------------------- // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_phash; } // namespace sc_core namespace sc_dt { SC_API_TEMPLATE_DECL_ sc_global; SC_API_TEMPLATE_DECL_ sc_context; typedef sc_context sc_length_context; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline sc_length_param::sc_length_param() : m_len() { *this = sc_length_context::default_value(); } inline sc_length_param::sc_length_param( int len_ ) : m_len(len_) { SC_CHECK_WL_( len_ ); } inline sc_length_param::sc_length_param( const sc_length_param& a ) : m_len( a.m_len ) {} inline sc_length_param::sc_length_param( sc_without_context ) : m_len( SC_DEFAULT_WL_ ) {} inline sc_length_param& sc_length_param::operator = ( const sc_length_param& a ) { if( &a != this ) { m_len = a.m_len; } return *this; } inline bool operator == ( const sc_length_param& a, const sc_length_param& b ) { return ( a.m_len == b.m_len ); } inline bool operator != ( const sc_length_param& a, const sc_length_param& b ) { return ( a.m_len != b.m_len ); } inline int sc_length_param::len() const { return m_len; } inline void sc_length_param::len( int len_ ) { SC_CHECK_WL_( len_ ); m_len = len_; } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_length_param& a ) { a.print( os ); return os; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_unsigned.cpp0000644000175000017500000015674714342422106022456 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_unsigned.cpp -- Arbitrary precision signed arithmetic. This file includes the definitions of sc_unsigned_bitref, sc_unsigned_subref, and sc_unsigned classes. The first two classes are proxy classes to reference one bit and a range of bits of a sc_unsigned number, respectively. This file also includes sc_nbcommon.cpp and sc_nbfriends.cpp, which contain the definitions shared by sc_unsigned. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_unsigned.cpp,v $ // Revision 1.7 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.6 2008/12/10 20:38:45 acg // Andy Goodrich: fixed conversion of double values to the digits vector. // The bits above the radix were not being masked off. // // Revision 1.5 2008/06/19 17:47:57 acg // Andy Goodrich: fixes for bugs. See 2.2.1 RELEASENOTES. // // Revision 1.4 2008/06/19 16:57:57 acg // Andy Goodrich: added case for negative unsigned values to the support in // concate_get_data(). // // Revision 1.3 2007/11/04 21:27:00 acg // Andy Goodrich: changes to make sure the proper value is returned from // concat_get_data(). // // Revision 1.2 2007/02/22 21:35:05 acg // Andy Goodrich: cleaned up comments in concat_get_ctrl and concat_get_data. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.4 2006/08/29 23:36:54 acg // Andy Goodrich: fixed and_reduce and optimized or_reduce. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include #include #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/kernel/sc_macros.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/fx/sc_ufix.h" #include "sysc/datatypes/fx/scfx_other_defs.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_vpool; template class SC_API sc_vpool; template class SC_API sc_vpool; } // namespace sc_core namespace sc_dt { // Pool of temporary instances: // The sc_unsigned pool is used by the concatenation support. // The bit and part reference pools allow references to be returned. sc_core::sc_vpool sc_unsigned::m_pool(8); sc_core::sc_vpool sc_unsigned_bitref::m_pool(9); sc_core::sc_vpool sc_unsigned_subref::m_pool(9); void sc_unsigned::invalid_init( const char* type_name, int nb ) const { std::stringstream msg; msg << "sc_unsigned( "<< type_name << " ) : nb = " << nb << " is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_INIT_FAILED_, msg.str().c_str() ); } // ----------------------------------------------------------------------------- // SECTION: Public members - Invalid selections. // ----------------------------------------------------------------------------- void sc_unsigned::invalid_index( int i ) const { std::stringstream msg; msg << "sc_biguint bit selection: index = " << i << " violates " "0 <= index <= " << (nbits-2); SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_unsigned::invalid_range( int l, int r ) const { std::stringstream msg; msg << "sc_biguint part selection: left = " << l << ", right = " << r << "\n" " violates either (" << (nbits-2) << " >= left >= 0) or " "(" << (nbits-2) << " >= right >= 0)"; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } // ---------------------------------------------------------------------------- // SECTION: Public members - Concatenation support. // ---------------------------------------------------------------------------- // Most public members are included from sc_nbcommon.inc. However, some // concatenation support appears here to optimize between the signed and // unsigned cases. // Insert this object's value at the specified place in a vector of big style // values. bool sc_unsigned::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Index to next word to set in dst_p. int end_i; // Index of high order word to set. int left_shift; // Amount to shift value left. sc_digit mask; // Mask for partial word sets. // CALCULATE METRICS FOR DATA MOVEMENT: dst_i = low_i / BITS_PER_DIGIT; end_i = (low_i + nbits - 2) / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; // MOVE FIRST WORD (IT MAY BE PARTIAL) AND THEN ANY OTHERS: // // We may "clobber" upper bits, but they will be written at some point // anyway. mask = ~(~0U << left_shift); dst_p[dst_i] = ( dst_p[dst_i] & ~mask ); dst_i++; for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; return false; } bool sc_unsigned::concat_get_data( sc_digit* dst_p, int low_i ) const { sc_digit carry; // Carry for negating value. int dst_i; // Index to next word to set in dst_p. int end_i; // Index of high order word to set. int high_i; // Index w/in word of high order bit. int left_shift; // Amount to shift value left. sc_digit left_word; // High word component for set. sc_digit mask; // Mask for partial word sets. bool result; // True if inserting non-zero data. int right_shift; // Amount to shift value right. sc_digit right_word; // Low word component for set. int real_bits; // nbits - 1. int src_i; // Index to next word to get from digit. // CALCULATE METRICS FOR DATA MOVEMENT: real_bits = nbits - 1; // Remove that extra sign bit. dst_i = low_i / BITS_PER_DIGIT; high_i = low_i + real_bits - 1; end_i = high_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; switch ( sgn ) { // POSITIVE SOURCE VALUE: case SC_POS: result = true; // ALL DATA TO BE MOVED IS IN A SINGLE WORD: if ( dst_i == end_i ) { mask = ~(~0U << left_shift); dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | (digit[0] << left_shift) ) & DIGIT_MASK; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { dst_p[dst_i] = digit[src_i]; } high_i = high_i % BITS_PER_DIGIT; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = digit[src_i] & mask; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { high_i = high_i % BITS_PER_DIGIT; right_shift = BITS_PER_DIGIT - left_shift; mask = ~(~0U << left_shift); right_word = digit[0]; dst_p[dst_i] = (dst_p[dst_i] & mask) | ((right_word << left_shift) & DIGIT_MASK); for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) { left_word = digit[src_i]; dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | (right_word >> right_shift); right_word = left_word; } left_word = (src_i < ndigits) ? digit[src_i] : 0; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = ((left_word << left_shift) | (right_word >> right_shift)) & mask; } break; // SOURCE VALUE IS NEGATIVE: case SC_NEG: // ALL DATA TO BE MOVED IS IN A SINGLE WORD: result = true; if ( dst_i == end_i ) { mask = ~(~0U << nbits); right_word = ((digit[0] ^ DIGIT_MASK) + 1) & mask; mask = ~(~0U << left_shift); dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | (right_word << left_shift) ) & DIGIT_MASK; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { carry = 1; for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { right_word = (digit[src_i] ^ DIGIT_MASK) + carry; dst_p[dst_i] = right_word & DIGIT_MASK; carry = right_word >> BITS_PER_DIGIT; } high_i = high_i % BITS_PER_DIGIT; mask = (~(~1U << high_i)) & DIGIT_MASK; right_word = (src_i < ndigits) ? (digit[src_i] ^ DIGIT_MASK) + carry : DIGIT_MASK + carry; dst_p[dst_i] = right_word & mask; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { high_i = high_i % BITS_PER_DIGIT; right_shift = BITS_PER_DIGIT - left_shift; mask = ~(~0U << left_shift); carry = 1; right_word = (digit[0] ^ DIGIT_MASK) + carry; dst_p[dst_i] = (dst_p[dst_i] & mask) | ((right_word << left_shift) & DIGIT_MASK); carry = right_word >> BITS_PER_DIGIT; right_word &= DIGIT_MASK; for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) { left_word = (digit[src_i] ^ DIGIT_MASK) + carry; dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | (right_word >> right_shift); carry = left_word >> BITS_PER_DIGIT; right_word = left_word & DIGIT_MASK; } left_word = (src_i < ndigits) ? (digit[src_i] ^ DIGIT_MASK) + carry : carry; mask = ~(~1U << high_i) & DIGIT_MASK; dst_p[dst_i] = ((left_word << left_shift) | (right_word >> right_shift)) & mask; } break; // VALUE IS ZERO: default: result = false; // ALL DATA TO BE MOVED IS IN A SINGLE WORD: if ( dst_i == end_i ) { mask = ~(~0U << real_bits) << left_shift; dst_p[dst_i] = dst_p[dst_i] & ~mask; } // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: else if ( left_shift == 0 ) { for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) { dst_p[dst_i] = 0; } dst_p[dst_i] = 0; } // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: else { mask = ~(~0U << left_shift); dst_p[dst_i] = (dst_p[dst_i] & mask); for ( dst_i++; dst_i <= end_i; dst_i++ ) { dst_p[dst_i] = 0; } } break; } return result; } // Return this object instance's bits as a uint64 without sign extension. uint64 sc_unsigned::concat_get_uint64() const { uint64 result; switch ( sgn ) { case SC_POS: result = 0; if ( ndigits > 2 ) result = digit[2]; if ( ndigits > 1 ) result = (result << BITS_PER_DIGIT) | digit[1]; result = (result << BITS_PER_DIGIT) | digit[0]; break; default: result = 0; break; } return result; } // #### OPTIMIZE void sc_unsigned::concat_set(int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_unsigned::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src<0) ? (int_type)-1 : 0; } void sc_unsigned::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_unsigned::concat_set(uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } // ---------------------------------------------------------------------------- // SECTION: Public members - Reduction methods. // ---------------------------------------------------------------------------- bool sc_unsigned::and_reduce() const { int i; // Digit examining. if ( sgn == SC_ZERO ) return false; for ( i = 0; i < ndigits-1; i++ ) if ( (digit[i] & DIGIT_MASK) != DIGIT_MASK ) return false; if ( (digit[i] & ~(~0U << ((nbits-1) % BITS_PER_DIGIT))) == static_cast(~(~0U << ((nbits-1) % BITS_PER_DIGIT))) ) return true; return false; } bool sc_unsigned::or_reduce() const { return ( sgn == SC_ZERO ) ? false : true; } bool sc_unsigned::xor_reduce() const { int i; // Digit examining. int odd; // Flag for odd number of digits. odd = 0; for ( i = 0; i < nbits-1; i++ ) if ( test(i) ) odd = ~odd; return odd ? true : false; } // ---------------------------------------------------------------------------- // SECTION: Public members - Assignment operators. // ---------------------------------------------------------------------------- // assignment operators const sc_unsigned& sc_unsigned::operator = ( const char* a ) { if( a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); } else if( *a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); } else try { int len = length(); sc_ufix aa( a, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return this->operator = ( aa ); } catch( const sc_core::sc_report & ) { std::stringstream msg; msg << "character string '" << a << "' is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); } return *this; } const sc_unsigned& sc_unsigned::operator=(int64 v) { sgn = get_sign(v); if ( sgn == SC_ZERO ) { vec_zero(ndigits, digit); } else { from_uint(ndigits, digit, (uint64) v); convert_SM_to_2C_to_SM(); } return *this; } const sc_unsigned& sc_unsigned::operator=(uint64 v) { if (v == 0) { sgn = SC_ZERO; vec_zero(ndigits, digit); } else { sgn = SC_POS; from_uint(ndigits, digit, v); convert_SM_to_2C_to_SM(); } return *this; } const sc_unsigned& sc_unsigned::operator=(long v) { sgn = get_sign(v); if ( sgn == SC_ZERO ) { vec_zero(ndigits, digit); } else { from_uint(ndigits, digit, (unsigned long) v); convert_SM_to_2C_to_SM(); } return *this; } const sc_unsigned& sc_unsigned::operator=(unsigned long v) { if (v == 0) { sgn = SC_ZERO; vec_zero(ndigits, digit); } else { sgn = SC_POS; from_uint(ndigits, digit, v); convert_SM_to_2C_to_SM(); } return *this; } const sc_unsigned& sc_unsigned::operator=(double v) { is_bad_double(v); sgn = SC_POS; int i = 0; while (std::floor(v) && (i < ndigits)) { #ifndef _WIN32 digit[i++] = ((sc_digit)std::floor(remainder(v, DIGIT_RADIX))) & DIGIT_MASK; #else digit[i++] = ((sc_digit)std::floor(std::fmod(v, DIGIT_RADIX))) & DIGIT_MASK; #endif v /= DIGIT_RADIX; } vec_zero(i, ndigits, digit); convert_SM_to_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- const sc_unsigned& sc_unsigned::operator = ( const sc_bv_base& v ) { int minlen = sc_min( nbits, v.length() ); int i = 0; for( ; i < minlen; ++ i ) { safe_set( i, v.get_bit( i ), digit ); } for( ; i < nbits; ++ i ) { safe_set( i, 0, digit ); // zero-extend } convert_2C_to_SM(); return *this; } const sc_unsigned& sc_unsigned::operator = ( const sc_lv_base& v ) { int minlen = sc_min( nbits, v.length() ); int i = 0; for( ; i < minlen; ++ i ) { safe_set( i, sc_logic( v.get_bit( i ) ).to_bool(), digit ); } for( ; i < nbits; ++ i ) { safe_set( i, 0, digit ); // zero-extend } convert_2C_to_SM(); return *this; } // explicit conversion to character string const std::string sc_unsigned::to_string( sc_numrep numrep ) const { int len = length(); sc_ufix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep ); } const std::string sc_unsigned::to_string( sc_numrep numrep, bool w_prefix ) const { int len = length(); sc_ufix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep, w_prefix ); } // ---------------------------------------------------------------------------- // SECTION: Interfacing with sc_int_base // ---------------------------------------------------------------------------- const sc_unsigned& sc_unsigned::operator= (const sc_int_base& v) { return operator=((int64) v); } const sc_unsigned& sc_unsigned::operator+=(const sc_int_base& v) { return operator+=((int64) v); } const sc_unsigned& sc_unsigned::operator-=(const sc_int_base& v) { return operator-=((int64) v); } const sc_unsigned& sc_unsigned::operator*=(const sc_int_base& v) { return operator*=((int64) v); } const sc_unsigned& sc_unsigned::operator/=(const sc_int_base& v) { return operator/=((int64) v); } const sc_unsigned& sc_unsigned::operator%=(const sc_int_base& v) { return operator%=((int64) v); } const sc_unsigned& sc_unsigned::operator&=(const sc_int_base& v) { return operator&=((int64) v); } const sc_unsigned& sc_unsigned::operator|=(const sc_int_base& v) { return operator|=((int64) v); } const sc_unsigned& sc_unsigned::operator^=(const sc_int_base& v) { return operator^=((int64) v); } sc_unsigned operator<<(const sc_unsigned& u, const sc_int_base& v) { return operator<<(u, (int64) v); } const sc_unsigned& sc_unsigned::operator<<=(const sc_int_base& v) { return operator<<=((int64) v); } sc_unsigned operator>>(const sc_unsigned& u, const sc_int_base& v) { return operator>>(u, (int64) v); } const sc_unsigned& sc_unsigned::operator>>=(const sc_int_base& v) { return operator>>=((int64) v); } bool operator==(const sc_unsigned& u, const sc_int_base& v) { return operator==(u, (int64) v); } bool operator==(const sc_int_base& u, const sc_unsigned& v) { return operator==((int64) u, v); } bool operator!=(const sc_unsigned& u, const sc_int_base& v) { return operator!=(u, (int64) v); } bool operator!=(const sc_int_base& u, const sc_unsigned& v) { return operator!=((int64) u, v); } bool operator<(const sc_unsigned& u, const sc_int_base& v) { return operator<(u, (int64) v); } bool operator<(const sc_int_base& u, const sc_unsigned& v) { return operator<((int64) u, v); } bool operator<=(const sc_unsigned& u, const sc_int_base& v) { return operator<=(u, (int64) v); } bool operator<=(const sc_int_base& u, const sc_unsigned& v) { return operator<=((int64) u, v); } bool operator>(const sc_unsigned& u, const sc_int_base& v) { return operator>(u, (int64) v); } bool operator>(const sc_int_base& u, const sc_unsigned& v) { return operator>((int64) u, v); } bool operator>=(const sc_unsigned& u, const sc_int_base& v) { return operator>=(u, (int64) v); } bool operator>=(const sc_int_base& u, const sc_unsigned& v) { return operator>=((int64) u, v); } // ---------------------------------------------------------------------------- // SECTION: Interfacing with sc_uint_base // ---------------------------------------------------------------------------- const sc_unsigned& sc_unsigned::operator= (const sc_uint_base& v) { return operator=((uint64) v); } sc_unsigned operator+(const sc_unsigned& u, const sc_uint_base& v) { return operator+(u, (uint64) v); } sc_unsigned operator+(const sc_uint_base& u, const sc_unsigned& v) { return operator+((uint64) u, v); } const sc_unsigned& sc_unsigned::operator+=(const sc_uint_base& v) { return operator+=((uint64) v); } const sc_unsigned& sc_unsigned::operator-=(const sc_uint_base& v) { return operator-=((uint64) v); } sc_unsigned operator*(const sc_unsigned& u, const sc_uint_base& v) { return operator*(u, (uint64) v); } sc_unsigned operator*(const sc_uint_base& u, const sc_unsigned& v) { return operator*((uint64) u, v); } const sc_unsigned& sc_unsigned::operator*=(const sc_uint_base& v) { return operator*=((uint64) v); } sc_unsigned operator/(const sc_unsigned& u, const sc_uint_base& v) { return operator/(u, (uint64) v); } sc_unsigned operator/(const sc_uint_base& u, const sc_unsigned& v) { return operator/((uint64) u, v); } const sc_unsigned& sc_unsigned::operator/=(const sc_uint_base& v) { return operator/=((uint64) v); } sc_unsigned operator%(const sc_unsigned& u, const sc_uint_base& v) { return operator%(u, (uint64) v); } sc_unsigned operator%(const sc_uint_base& u, const sc_unsigned& v) { return operator%((uint64) u, v); } const sc_unsigned& sc_unsigned::operator%=(const sc_uint_base& v) { return operator%=((uint64) v); } sc_unsigned operator&(const sc_unsigned& u, const sc_uint_base& v) { return operator&(u, (uint64) v); } sc_unsigned operator&(const sc_uint_base& u, const sc_unsigned& v) { return operator&((uint64) u, v); } const sc_unsigned& sc_unsigned::operator&=(const sc_uint_base& v) { return operator&=((uint64) v); } sc_unsigned operator|(const sc_unsigned& u, const sc_uint_base& v) { return operator|(u, (uint64) v); } sc_unsigned operator|(const sc_uint_base& u, const sc_unsigned& v) { return operator|((uint64) u, v); } const sc_unsigned& sc_unsigned::operator|=(const sc_uint_base& v) { return operator|=((uint64) v); } sc_unsigned operator^(const sc_unsigned& u, const sc_uint_base& v) { return operator^(u, (uint64) v); } sc_unsigned operator^(const sc_uint_base& u, const sc_unsigned& v) { return operator^((uint64) u, v); } const sc_unsigned& sc_unsigned::operator^=(const sc_uint_base& v) { return operator^=((uint64) v); } sc_unsigned operator<<(const sc_unsigned& u, const sc_uint_base& v) { return operator<<(u, (uint64) v); } const sc_unsigned& sc_unsigned::operator<<=(const sc_uint_base& v) { return operator<<=((uint64) v); } sc_unsigned operator>>(const sc_unsigned& u, const sc_uint_base& v) { return operator>>(u, (uint64) v); } const sc_unsigned& sc_unsigned::operator>>=(const sc_uint_base& v) { return operator>>=((uint64) v); } bool operator==(const sc_unsigned& u, const sc_uint_base& v) { return operator==(u, (uint64) v); } bool operator==(const sc_uint_base& u, const sc_unsigned& v) { return operator==((uint64) u, v); } bool operator!=(const sc_unsigned& u, const sc_uint_base& v) { return operator!=(u, (uint64) v); } bool operator!=(const sc_uint_base& u, const sc_unsigned& v) { return operator!=((uint64) u, v); } bool operator<(const sc_unsigned& u, const sc_uint_base& v) { return operator<(u, (uint64) v); } bool operator<(const sc_uint_base& u, const sc_unsigned& v) { return operator<((uint64) u, v); } bool operator<=(const sc_unsigned& u, const sc_uint_base& v) { return operator<=(u, (uint64) v); } bool operator<=(const sc_uint_base& u, const sc_unsigned& v) { return operator<=((uint64) u, v); } bool operator>(const sc_unsigned& u, const sc_uint_base& v) { return operator>(u, (uint64) v); } bool operator>(const sc_uint_base& u, const sc_unsigned& v) { return operator>((uint64) u, v); } bool operator>=(const sc_unsigned& u, const sc_uint_base& v) { return operator>=(u, (uint64) v); } bool operator>=(const sc_uint_base& u, const sc_unsigned& v) { return operator>=((uint64) u, v); } // ---------------------------------------------------------------------------- // SECTION: Input and output operators // ---------------------------------------------------------------------------- // The operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Operator macros. // ---------------------------------------------------------------------------- #define CONVERT_LONG(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_ULONG]; \ from_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); #define CONVERT_LONG_2(u) \ sc_digit u ## d[DIGITS_PER_ULONG]; \ from_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); #define CONVERT_INT(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_UINT]; \ from_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); #define CONVERT_INT_2(u) \ sc_digit u ## d[DIGITS_PER_UINT]; \ from_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); #define CONVERT_INT64(u) \ small_type u ## s = get_sign(u); \ sc_digit u ## d[DIGITS_PER_UINT64]; \ from_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); #define CONVERT_INT64_2(u) \ sc_digit u ## d[DIGITS_PER_UINT64]; \ from_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); // ---------------------------------------------------------------------------- // SECTION: PLUS operators: +, +=, ++ // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. 0 + v = v // 2. u + 0 = u // 3. if sgn(u) == sgn(v) // 3.1 u + v = +(u + v) = sgn(u) * (u + v) // 3.2 (-u) + (-v) = -(u + v) = sgn(u) * (u + v) // 4. if sgn(u) != sgn(v) // 4.1 u + (-v) = u - v = sgn(u) * (u - v) // 4.2 (-u) + v = -(u - v) ==> sgn(u) * (u - v) // // Specialization of above cases for computing ++u or u++: // 1. 0 + 1 = 1 // 3. u + 1 = u + 1 = sgn(u) * (u + 1) // 4. (-u) + 1 = -(u - 1) = sgn(u) * (u - 1) sc_unsigned operator+(const sc_unsigned& u, const sc_unsigned& v) { if (u.sgn == SC_ZERO) // case 1 return sc_unsigned(v); if (v.sgn == SC_ZERO) // case 2 return sc_unsigned(u); // cases 3 and 4 return add_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator+(const sc_unsigned &u, uint64 v) { if (v == 0) // case 2 return sc_unsigned(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 1 return sc_unsigned(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // cases 3 and 4 return add_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator+(uint64 u, const sc_unsigned &v) { if (u == 0) // case 1 return sc_unsigned(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) // case 2 return sc_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // cases 3 and 4 return add_unsigned_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator+(const sc_unsigned &u, unsigned long v) { if (v == 0) // case 2 return sc_unsigned(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 1 return sc_unsigned(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // cases 3 and 4 return add_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator+(unsigned long u, const sc_unsigned &v) { if (u == 0) // case 1 return sc_unsigned(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) // case 2 return sc_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // cases 3 and 4 return add_unsigned_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MINUS operators: -, -=, -- // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. u - 0 = u // 2. 0 - v = -v // 3. if sgn(u) != sgn(v) // 3.1 u - (-v) = u + v = sgn(u) * (u + v) // 3.2 (-u) - v = -(u + v) ==> sgn(u) * (u + v) // 4. if sgn(u) == sgn(v) // 4.1 u - v = +(u - v) = sgn(u) * (u - v) // 4.2 (-u) - (-v) = -(u - v) = sgn(u) * (u - v) // // Specialization of above cases for computing --u or u--: // 1. 0 - 1 = -1 // 3. (-u) - 1 = -(u + 1) = sgn(u) * (u + 1) // 4. u - 1 = u - 1 = sgn(u) * (u - 1) // The operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MULTIPLICATION operators: *, *= // ---------------------------------------------------------------------------- // Cases to consider when computing u * v: // 1. u * 0 = 0 * v = 0 // 2. 1 * v = v and -1 * v = -v // 3. u * 1 = u and u * -1 = -u // 4. u * v = u * v sc_unsigned operator*(const sc_unsigned& u, const sc_unsigned& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) // case 1 return sc_unsigned(); // cases 2-4 return mul_unsigned_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_unsigned operator*(const sc_unsigned& u, uint64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_unsigned(); CONVERT_INT64_2(v); // cases 2-4 return mul_unsigned_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator*(uint64 u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_unsigned(); CONVERT_INT64_2(u); // cases 2-4 return mul_unsigned_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_unsigned operator*(const sc_unsigned& u, unsigned long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) // case 1 return sc_unsigned(); CONVERT_LONG_2(v); // else cases 2-4 return mul_unsigned_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator*(unsigned long u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) // case 1 return sc_unsigned(); CONVERT_LONG_2(u); // cases 2-4 return mul_unsigned_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: DIVISION operators: /, /= // ---------------------------------------------------------------------------- // Cases to consider when finding the quotient q = floor(u/v): // Note that u = q * v + r for r < q. // 1. 0 / 0 or u / 0 => error // 2. 0 / v => 0 = 0 * v + 0 // 3. u / v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u / v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u / v && u > v => u = q * v + r - v can be 1 or -1 sc_unsigned operator/(const sc_unsigned& u, const sc_unsigned& v) { small_type s = mul_signs(u.sgn, v.sgn); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } // other cases return div_unsigned_friend(s, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_unsigned operator/(const sc_unsigned& u, uint64 v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_unsigned(); // case 2 } CONVERT_INT64_2(v); // other cases return div_unsigned_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator/(uint64 u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } CONVERT_INT64_2(u); // other cases return div_unsigned_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_unsigned operator/(const sc_unsigned& u, unsigned long v) { small_type s = mul_signs(u.sgn, get_sign(v)); if (s == SC_ZERO) { div_by_zero(v); // case 1 return sc_unsigned(); // case 2 } CONVERT_LONG_2(v); // other cases return div_unsigned_friend(s, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator/(unsigned long u, const sc_unsigned& v) { small_type s = mul_signs(v.sgn, get_sign(u)); if (s == SC_ZERO) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } CONVERT_LONG_2(u); // other cases return div_unsigned_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: MOD operators: %, %=. // ---------------------------------------------------------------------------- // Cases to consider when finding the remainder r = u % v: // Note that u = q * v + r for r < q. // 1. 0 % 0 or u % 0 => error // 2. 0 % v => 0 = 0 * v + 0 // 3. u % v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u % v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u % v && u > v => u = q * v + r - v can be 1 or -1 sc_unsigned operator%(const sc_unsigned& u, const sc_unsigned& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } // other cases return mod_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.nbits, v.ndigits, v.digit); } sc_unsigned operator%(const sc_unsigned& u, uint64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 return sc_unsigned(); // case 2 } CONVERT_INT64_2(v); // other cases return mod_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator%(uint64 u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } CONVERT_INT64(u); // other cases return mod_unsigned_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.nbits, v.ndigits, v.digit); } sc_unsigned operator%(const sc_unsigned& u, unsigned long v) { if ((u.sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 return sc_unsigned(); // case 2 } CONVERT_LONG_2(v); // other cases return mod_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator%(unsigned long u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 return sc_unsigned(); // case 2 } CONVERT_LONG(u); // other cases return mod_unsigned_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise AND operators: &, &= // ---------------------------------------------------------------------------- // Cases to consider when computing u & v: // 1. u & 0 = 0 & v = 0 // 2. u & v => sgn = + // 3. (-u) & (-v) => sgn = - // 4. u & (-v) => sgn = + // 5. (-u) & v => sgn = + sc_unsigned operator&(const sc_unsigned& u, const sc_unsigned& v) { if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 return sc_unsigned(); // other cases return and_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator&(const sc_unsigned& u, uint64 v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_unsigned(); CONVERT_INT64(v); // other cases return and_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator&(uint64 u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_unsigned(); CONVERT_INT64(u); // other cases return and_unsigned_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator&(const sc_unsigned& u, unsigned long v) { if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 return sc_unsigned(); CONVERT_LONG(v); // other cases return and_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator&(unsigned long u, const sc_unsigned& v) { if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 return sc_unsigned(); CONVERT_LONG(u); // other cases return and_unsigned_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise OR operators: |, |= // ---------------------------------------------------------------------------- // Cases to consider when computing u | v: // 1. u | 0 = u // 2. 0 | v = v // 3. u | v => sgn = + // 4. (-u) | (-v) => sgn = - // 5. u | (-v) => sgn = - // 6. (-u) | v => sgn = - sc_unsigned operator|(const sc_unsigned& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_unsigned(u); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(v); // other cases return or_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator|(const sc_unsigned& u, uint64 v) { if (v == 0) // case 1 return sc_unsigned(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return or_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator|(uint64 u, const sc_unsigned& v) { if (u == 0) return sc_unsigned(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return or_unsigned_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator|(const sc_unsigned& u, unsigned long v) { if (v == 0) // case 1 return sc_unsigned(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return or_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator|(unsigned long u, const sc_unsigned& v) { if (u == 0) return sc_unsigned(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return or_unsigned_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise XOR operators: ^, ^= // ---------------------------------------------------------------------------- // Cases to consider when computing u ^ v: // Note that u ^ v = (~u & v) | (u & ~v). // 1. u ^ 0 = u // 2. 0 ^ v = v // 3. u ^ v => sgn = + // 4. (-u) ^ (-v) => sgn = - // 5. u ^ (-v) => sgn = - // 6. (-u) ^ v => sgn = + sc_unsigned operator^(const sc_unsigned& u, const sc_unsigned& v) { if (v.sgn == SC_ZERO) // case 1 return sc_unsigned(u); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(v); // other cases return xor_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator^(const sc_unsigned& u, uint64 v) { if (v == 0) // case 1 return sc_unsigned(u); CONVERT_INT64(v); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); // other cases return xor_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } sc_unsigned operator^(uint64 u, const sc_unsigned& v) { if (u == 0) return sc_unsigned(v); CONVERT_INT64(u); if (v.sgn == SC_ZERO) return sc_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); // other cases return xor_unsigned_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit); } sc_unsigned operator^(const sc_unsigned& u, unsigned long v) { if (v == 0) // case 1 return sc_unsigned(u); CONVERT_LONG(v); if (u.sgn == SC_ZERO) // case 2 return sc_unsigned(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); // other cases return xor_unsigned_friend(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } sc_unsigned operator^(unsigned long u, const sc_unsigned& v) { if (u == 0) return sc_unsigned(v); CONVERT_LONG(u); if (v.sgn == SC_ZERO) return sc_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); // other cases return xor_unsigned_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Bitwise NOT operator: ~ // ---------------------------------------------------------------------------- // Operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: LEFT SHIFT operators: <<, <<= // ---------------------------------------------------------------------------- sc_unsigned operator<<(const sc_unsigned& u, const sc_signed& v) { if ((v.sgn == SC_ZERO) || (v.sgn == SC_NEG)) return sc_unsigned(u); return operator<<(u, v.to_ulong()); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: RIGHT SHIFT operators: >>, >>= // ---------------------------------------------------------------------------- sc_unsigned operator>>(const sc_unsigned& u, const sc_signed& v) { if ((v.sgn == SC_ZERO) || (v.sgn == SC_NEG)) return sc_unsigned(u); return operator>>(u, v.to_long()); } // The rest of the operators in this section are included from // sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Unary arithmetic operators. // ---------------------------------------------------------------------------- sc_unsigned operator+(const sc_unsigned& u) { return sc_unsigned(u); } // ---------------------------------------------------------------------------- // SECTION: EQUAL operator: == // ---------------------------------------------------------------------------- bool operator==(const sc_unsigned& u, const sc_unsigned& v) { if (&u == &v) return true; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_unsigned& u, const sc_signed& v) { if (v.sgn == SC_NEG) return false; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit, 0, 1) != 0) return false; return true; } bool operator==(const sc_signed& u, const sc_unsigned& v) { if (u.sgn == SC_NEG) return false; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit, 1, 0) != 0) return false; return true; } bool operator==(const sc_unsigned& u, int64 v) { if (v < 0) return false; CONVERT_INT64(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd) != 0) return false; return true; } bool operator==(int64 u, const sc_unsigned& v) { if (u < 0) return false; CONVERT_INT64(u); if (compare_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_unsigned& u, uint64 v) { CONVERT_INT64(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd) != 0) return false; return true; } bool operator==(uint64 u, const sc_unsigned& v) { CONVERT_INT64(u); if (compare_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_unsigned& u, long v) { if (v < 0) return false; CONVERT_LONG(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd) != 0) return false; return true; } bool operator==(long u, const sc_unsigned& v) { if (u < 0) return false; CONVERT_LONG(u); if (compare_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit) != 0) return false; return true; } bool operator==(const sc_unsigned& u, unsigned long v) { CONVERT_LONG(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd) != 0) return false; return true; } bool operator==(unsigned long u, const sc_unsigned& v) { CONVERT_LONG(u); if (compare_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit) != 0) return false; return true; } // ---------------------------------------------------------------------------- // SECTION: NOT_EQUAL operator: != // ---------------------------------------------------------------------------- bool operator!=(const sc_unsigned& u, const sc_signed& v) { return (! operator==(u, v)); } bool operator!=(const sc_signed& u, const sc_unsigned& v) { return (! operator==(u, v)); } // The rest of the operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: LESS THAN operator: < // ---------------------------------------------------------------------------- bool operator<(const sc_unsigned& u, const sc_unsigned& v) { if (&u == &v) return false; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit) < 0) return true; return false; } bool operator<(const sc_unsigned& u, const sc_signed& v) { if (v.sgn == SC_NEG) return false; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit, 0, 1) < 0) return true; return false; } bool operator<(const sc_signed& u, const sc_unsigned& v) { if (u.sgn == SC_NEG) return true; if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, v.sgn, v.nbits, v.ndigits, v.digit, 1, 0) < 0) return true; return false; } bool operator<(const sc_unsigned& u, int64 v) { if (v < 0) return false; CONVERT_INT64(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd) < 0) return true; return false; } bool operator<(int64 u, const sc_unsigned& v) { if (u < 0) return true; CONVERT_INT64(u); if (compare_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit) < 0) return true; return false; } bool operator<(const sc_unsigned& u, uint64 v) { CONVERT_INT64(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd) < 0) return true; return false; } bool operator<(uint64 u, const sc_unsigned& v) { CONVERT_INT64(u); if (compare_unsigned(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, v.sgn, v.nbits, v.ndigits, v.digit) < 0) return true; return false; } bool operator<(const sc_unsigned& u, long v) { if (v < 0) return false; CONVERT_LONG(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd) < 0) return true; return false; } bool operator<(long u, const sc_unsigned& v) { if (u < 0) return true; CONVERT_LONG(u); if (compare_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit) < 0) return true; return false; } bool operator<(const sc_unsigned& u, unsigned long v) { CONVERT_LONG(v); if (compare_unsigned(u.sgn, u.nbits, u.ndigits, u.digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd) < 0) return true; return false; } bool operator<(unsigned long u, const sc_unsigned& v) { CONVERT_LONG(u); if (compare_unsigned(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, v.sgn, v.nbits, v.ndigits, v.digit) < 0) return true; return false; } // ---------------------------------------------------------------------------- // SECTION: LESS THAN or EQUAL operator: <= // ---------------------------------------------------------------------------- bool operator<=(const sc_unsigned& u, const sc_signed& v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(const sc_signed& u, const sc_unsigned& v) { return (operator<(u, v) || operator==(u, v)); } // The rest of the operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: GREATER THAN operator: > // ---------------------------------------------------------------------------- bool operator>(const sc_unsigned& u, const sc_signed& v) { return (! (operator<=(u, v))); } bool operator>(const sc_signed& u, const sc_unsigned& v) { return (! (operator<=(u, v))); } // The rest of the operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: GREATER THAN or EQUAL operator: >= // ---------------------------------------------------------------------------- bool operator>=(const sc_unsigned& u, const sc_signed& v) { return (! (operator<(u, v))); } bool operator>=(const sc_signed& u, const sc_unsigned& v) { return (! (operator<(u, v))); } // The rest of the operators in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Friends // ---------------------------------------------------------------------------- // Compare u and v as unsigned and return r // r = 0 if u == v // r < 0 if u < v // r > 0 if u > v int compare_unsigned(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd, small_type if_u_signed, small_type if_v_signed) { if (us == vs) { if (us == SC_ZERO) return 0; else { int cmp_res = vec_skip_and_cmp(und, ud, vnd, vd); if (us == SC_POS) return cmp_res; else return -cmp_res; } } else { if (us == SC_ZERO) return -vs; if (vs == SC_ZERO) return us; int cmp_res; int nd = (us == SC_NEG ? und : vnd); #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif if (us == SC_NEG) { vec_copy(nd, d, ud); vec_complement(nd, d); trim(if_u_signed, unb, nd, d); cmp_res = vec_skip_and_cmp(nd, d, vnd, vd); } else { vec_copy(nd, d, vd); vec_complement(nd, d); trim(if_v_signed, vnb, nd, d); cmp_res = vec_skip_and_cmp(und, ud, nd, d); } #ifndef SC_MAX_NBITS delete [] d; #endif return cmp_res; } } // ---------------------------------------------------------------------------- // SECTION: Public members - Other utils. // ---------------------------------------------------------------------------- bool sc_unsigned::iszero() const { if (sgn == SC_ZERO) return true; else if (sgn == SC_NEG) { // A negative unsigned number can be zero, e.g., -16 in 4 bits, so // check that. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif vec_copy(ndigits, d, digit); vec_complement(ndigits, d); trim_unsigned(nbits, ndigits, d); bool res = check_for_zero(ndigits, d); #ifndef SC_MAX_NBITS delete [] d; #endif return res; } else return false; } // The rest of the utils in this section are included from sc_nbcommon.cpp. // ---------------------------------------------------------------------------- // SECTION: Private members. // ---------------------------------------------------------------------------- // The private members in this section are included from // sc_nbcommon.cpp. #define CLASS_TYPE sc_unsigned #define CLASS_TYPE_STR "sc_unsigned" #define ADD_HELPER add_unsigned_friend #define SUB_HELPER sub_unsigned_friend #define MUL_HELPER mul_unsigned_friend #define DIV_HELPER div_unsigned_friend #define MOD_HELPER mod_unsigned_friend #define AND_HELPER and_unsigned_friend #define OR_HELPER or_unsigned_friend #define XOR_HELPER xor_unsigned_friend #include "sc_nbfriends.inc" #undef SC_SIGNED #define SC_UNSIGNED #define IF_SC_SIGNED 0 // 0 = sc_unsigned #define CLASS_TYPE_SUBREF sc_unsigned_subref_r #define OTHER_CLASS_TYPE sc_signed #define OTHER_CLASS_TYPE_SUBREF sc_signed_subref_r #define MUL_ON_HELPER mul_on_help_unsigned #define DIV_ON_HELPER div_on_help_unsigned #define MOD_ON_HELPER mod_on_help_unsigned #include "sc_nbcommon.inc" #undef MOD_ON_HELPER #undef DIV_ON_HELPER #undef MUL_ON_HELPER #undef OTHER_CLASS_TYPE_SUBREF #undef OTHER_CLASS_TYPE #undef CLASS_TYPE_SUBREF #undef IF_SC_SIGNED #undef SC_UNSIGNED #undef XOR_HELPER #undef OR_HELPER #undef AND_HELPER #undef MOD_HELPER #undef DIV_HELPER #undef MUL_HELPER #undef SUB_HELPER #undef ADD_HELPER #undef CLASS_TYPE #undef CLASS_TYPE_STR #include "sc_unsigned_bitref.inc" #include "sc_unsigned_subref.inc" #undef CONVERT_LONG #undef CONVERT_LONG_2 #undef CONVERT_INT64 #undef CONVERT_INT64_2 } // namespace sc_dt // End of file. systemc-2.3.4/src/sysc/datatypes/int/sc_signed_subref.inc0000644000175000017500000002172214342422106023430 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signed_subref.h -- Proxy class that is declared in sc_signed.h. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref_r // // Proxy class for sc_signed part selection (r-value only). // ---------------------------------------------------------------------------- // concatenation support uint64 sc_signed_subref_r::concat_get_uint64() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint64(); } bool sc_signed_subref_r::concat_get_ctrl(sc_digit* dst_p, int low_i ) const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.concat_get_ctrl( dst_p, low_i ); } bool sc_signed_subref_r::concat_get_data(sc_digit* dst_p, int low_i ) const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.concat_get_data( dst_p, low_i ); } // implicit conversion to sc_signed sc_signed_subref_r::operator sc_unsigned () const { return sc_unsigned( m_obj_p, m_left, m_right ); } // explicit conversions int sc_signed_subref_r::to_int() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_int(); } unsigned int sc_signed_subref_r::to_uint() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint(); } long sc_signed_subref_r::to_long() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_long(); } unsigned long sc_signed_subref_r::to_ulong() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_ulong(); } int64 sc_signed_subref_r::to_int64() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_int64(); } uint64 sc_signed_subref_r::to_uint64() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_uint64(); } double sc_signed_subref_r::to_double() const { sc_unsigned a( m_obj_p, m_left, m_right ); return a.to_double(); } // explicit conversion to character string const std::string sc_signed_subref_r::to_string( sc_numrep numrep ) const { sc_unsigned a( length() ); a = *this; return a.to_string( numrep ); } const std::string sc_signed_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { sc_unsigned a( length() ); a = *this; return a.to_string( numrep, w_prefix ); } // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref // // Proxy class for sc_signed part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators const sc_signed_subref& sc_signed_subref::operator = ( const sc_signed_subref_r& a ) { return operator = ( (sc_unsigned)( a ) ); } const sc_signed_subref& sc_signed_subref::operator = ( const sc_signed_subref& v ) { if( this == &v ) { return *this; } return operator = ( (sc_unsigned)( v ) ); } const sc_signed_subref& sc_signed_subref::operator = ( const sc_signed& v ) { int i; int l = sc_min( m_left, v.nbits - 1 + m_right ); for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); for ( ; i <= m_left; i++ ) m_obj_p->set( i, v.test( l ) ); return *this; } const sc_signed_subref& sc_signed_subref::operator = ( const sc_unsigned_subref_r& v ) { return operator = ( (sc_unsigned)( v ) ); } const sc_signed_subref& sc_signed_subref::operator = ( const sc_unsigned& v ) { int i; int l = sc_min( m_left, v.nbits - 1 + m_right ); for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); for ( ; i <= m_left; i++ ) m_obj_p->set( i, 0 ); return *this; } const sc_signed_subref& sc_signed_subref::operator = ( unsigned long v ) { for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v & 1 ) ); v >>= 1; } return *this; } const sc_signed_subref& sc_signed_subref::operator = ( long v ) { unsigned long v2 = (unsigned long) v; for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v2 & 1 ) ); v2 >>= 1; } return *this; } const sc_signed_subref& sc_signed_subref::operator = ( uint64 v ) { for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v & 1 ) ); v >>= 1; } return *this; } const sc_signed_subref& sc_signed_subref::operator = ( int64 v ) { uint64 v2 = (uint64) v; for( int i = m_right; i <= m_left; ++ i ) { m_obj_p->set( i, static_cast( v2 & 1 ) ); v2 >>= 1; } return *this; } const sc_signed_subref& sc_signed_subref::operator = ( double v ) { is_bad_double(v); int nb = m_left - m_right + 1; int nd = DIV_CEIL(nb); #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif if (v < 0) v = -v; int i = 0; while (std::floor(v) && (i < nd)) { #ifndef _WIN32 d[i++] = (sc_digit) std::floor(remainder(v, DIGIT_RADIX)); #else d[i++] = (sc_digit) std::floor(std::fmod(v, DIGIT_RADIX)); #endif v /= DIGIT_RADIX; } vec_zero(i, nd, d); sc_digit val = 1; // Bit value. int j = 0; // Current digit in d. i = 0; // Current bit in d. while (i < nb) { m_obj_p->set(i + m_right, (bool) (d[j] & val)); ++i; if (i % BITS_PER_DIGIT == 0) { val = 1; ++j; } else val <<= 1; } #ifndef SC_MAX_NBITS delete [] d; #endif return *this; } const sc_signed_subref& sc_signed_subref::operator = ( const sc_int_base& a ) { return operator = ( (int64) a ); } const sc_signed_subref& sc_signed_subref::operator = ( const sc_uint_base& a ) { return operator = ( (uint64) a ); } // concatenation methods void sc_signed_subref::concat_set( int64 src, int low_i ) { int i; int l; bool sign = src < 0; if ( low_i < 64 ) { src = src >> low_i; l = sc_min( m_left, (63-low_i) + m_right ); for( i = m_right; i <= l; ++ i ) { m_obj_p->set( i, src & 1 ); src = src >> 1; } for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign); } } void sc_signed_subref::concat_set( const sc_signed& src, int low_i ) { int i; int l; int src_i; bool sign = src.test(src.nbits-1); l = src.nbits - (low_i+1); if ( l >= 0 ) { l = sc_min( m_left, l + m_right ); src_i = low_i; for( i = m_right; i <= l; ++ i, src_i++ ) { m_obj_p->set( i, src.test( src_i ) ); } for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign); } } void sc_signed_subref::concat_set( const sc_unsigned& src, int low_i ) { int i; int l; int src_i; l = src.nbits - (low_i+2); if ( l >= 0 ) { l = sc_min( m_left, l + m_right ); src_i = low_i; for( i = m_right; i <= l; ++ i, src_i++ ) { m_obj_p->set( i, src.test( src_i ) ); } for ( ; i <= m_left; i++ ) m_obj_p->set(false); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false); } } void sc_signed_subref::concat_set( uint64 src, int low_i ) { int i; int l; if ( low_i < 64 ) { src = src >> low_i; l = sc_min( m_left, (63-low_i) + m_right ); for( i = m_right; i <= l; ++ i ) { m_obj_p->set( i, src & 1 ); src = src >> 1; } for ( ; i <= m_left; i++ ) m_obj_p->set(false); } else { for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false); } } // other methods void sc_signed_subref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // End of file systemc-2.3.4/src/sysc/datatypes/int/sc_nbfriends.inc0000644000175000017500000003754314342422106022573 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbfriends.inc -- Friend functions for both sc_signed and sc_unsigned classes. The vec_* functions are called through either these functions or those in sc_nbexterns.cpp. These functions perform their work on two inputs u and v, and return the result object. The functions in sc_nbexterns.cpp perform their work on one of their inputs. The functions here try to use faster algorithms in case the input numbers are small. The bitwise functions (and, or, and xor) need the 2's complement representations of their inputs. Instead of complementing their inputs first and then processing, they complement their inputs while processing without allocating extra temporary memory. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // Naming conventions: // For sc_signed or sc_unsigned number u: // us : u's sign, unb : u's number of bits, // und : u's number of digits, ud : u's digits array. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // SECTION: Friend functions for PLUS operators. // ---------------------------------------------------------------------------- // Handles cases 3 and 4 and returns the result. CLASS_TYPE ADD_HELPER(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd) { und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int nb = sc_max(unb, vnb); int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS test_bound(nb); sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif d[nd - 1] = d[nd - 2] = 0; // case 3 if (us == vs) { ++nb; if ((und == 1) && (vnd == 1)) { sc_digit carry = (*ud) + (*vd); d[0] = carry & DIGIT_MASK; d[1] = carry >> BITS_PER_DIGIT; } else if (und >= vnd) vec_add(und, ud, vnd, vd, d); else vec_add(vnd, vd, und, ud, d); } // case 4 else { int cmp_res = vec_cmp(und, ud, vnd, vd); if (cmp_res == 0) { // u == v #ifndef SC_MAX_NBITS delete[] d; #endif return CLASS_TYPE(); } if (cmp_res > 0) { // u > v if ((und == 1) && (vnd == 1)) d[0] = (*ud) - (*vd); else vec_sub(und, ud, vnd, vd, d); } else { // u < v us = -us; if ((und == 1) && (vnd == 1)) d[0] = (*vd) - (*ud); else vec_sub(vnd, vd, und, ud, d); } } return CLASS_TYPE(us, nb, nd, d); } // ---------------------------------------------------------------------------- // SECTION: Friend functions of MULTIPLICATION operators. // ---------------------------------------------------------------------------- // Handles the case 4 and returns the result. CLASS_TYPE MUL_HELPER(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int nb = unb + vnb; int nd = und + vnd; #ifdef SC_MAX_NBITS test_bound(nb); sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); sc_digit ud0 = (*ud); sc_digit vd0 = (*vd); if ((vnd == 1) && (vd0 == 1)) vec_copy(und, d, ud); else if ((und == 1) && (ud0 == 1)) vec_copy(vnd, d, vd); else if ((und == 1) && (vnd == 1) && (ud0 < HALF_DIGIT_RADIX) && (vd0 < HALF_DIGIT_RADIX)) d[0] = ud0 * vd0; else if ((und == 1) && (ud0 < HALF_DIGIT_RADIX)) vec_mul_small(vnd, vd, ud0, d); else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_mul_small(und, ud, vd0, d); else if (vnd < und) vec_mul(und, ud, vnd, vd, d); else vec_mul(vnd, vd, und, ud, d); return CLASS_TYPE(s, nb, nd, d); } // ---------------------------------------------------------------------------- // SECTION: Friend functions for DIVISION operators. // ---------------------------------------------------------------------------- // Handles the cases 3-4 and returns the result. CLASS_TYPE DIV_HELPER(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); // u < v => u / v = 0 - case 4 if (cmp_res < 0) return CLASS_TYPE(); // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); sc_digit vd0 = (*vd); // u = v => u / v = 1 - case 3 if (cmp_res == 0) d[0] = 1; // else if u > v - case 5 else if ((vnd == 1) && (vd0 == 1)) vec_copy(und, d, ud); else if ((vnd == 1) && (und == 1)) d[0] = (*ud) / vd0; else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_div_small(und, ud, vd0, d); else vec_div_large(und, ud, vnd, vd, d); return CLASS_TYPE(s, sc_max(unb, vnb), nd - 1, d); } // ---------------------------------------------------------------------------- // SECTION: Friend functions for MOD operators. // ---------------------------------------------------------------------------- // Handles the cases 3-4 and returns the result. CLASS_TYPE MOD_HELPER(small_type us, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); // u = v => u % v = 0 - case 3 if (cmp_res == 0) return CLASS_TYPE(); sc_digit vd0 = (*vd); if ((cmp_res > 0) && (vnd == 1) && (vd0 == 1)) return CLASS_TYPE(); // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); // u < v => u % v = u - case 4 if (cmp_res < 0) vec_copy(und, d, ud); // else if u > v - case 5 else if ((vnd == 1) && (und == 1)) d[0] = (*ud) % vd0; else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) d[0] = vec_rem_small(und, ud, vd0); else vec_rem_large(und, ud, vnd, vd, d); us = check_for_zero(us, nd - 1, d); if (us == SC_ZERO) { #ifndef SC_MAX_NBITS delete[] d; #endif return CLASS_TYPE(); } else return CLASS_TYPE(us, sc_min(unb, vnb), nd - 1, d); } // ---------------------------------------------------------------------------- // SECTION: Friend functions for AND operators. // ---------------------------------------------------------------------------- // Handles the cases 2-5 and returns the result. CLASS_TYPE AND_HELPER(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd) { int nb = sc_max(unb, vnb); int nd = sc_max(und, vnd); #ifdef SC_MAX_NBITS sc_digit dbegin[MAX_NDIGITS]; #else sc_digit *dbegin = new sc_digit[nd]; #endif sc_digit *d = dbegin; const sc_digit *x; const sc_digit *y; int xnd; int ynd; small_type xs; small_type ys; if (und >= vnd) { x = ud; y = vd; xnd = und; ynd = vnd; xs = us; ys = vs; } else { y = ud; x = vd; ynd = und; xnd = vnd; ys = us; xs = vs; } const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(xs, ys); if (s > 0) { if (xs > 0) { // case 2 while (y < yend) (*d++) = (*x++) & (*y++); while (x++ < xend) (*d++) = 0; } else { // case 3 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*d++) = (xcarry & ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += DIGIT_MASK; (*d++) = (xcarry & ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (xs > 0) { // case 4 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*d++) = ((*x++) & ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*d++) = ((*x++) & ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } } else { // case 5 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); (*d++) = (xcarry & (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x++ < xend) (*d++) = 0; } } s = convert_signed_2C_to_SM(nb, nd, dbegin); return CLASS_TYPE(s, nb, nd, dbegin); } // ---------------------------------------------------------------------------- // SECTION: Friend functions for OR operators. // ---------------------------------------------------------------------------- // Handles the cases 3-5 and returns the result. CLASS_TYPE OR_HELPER(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd) { int nb = sc_max(unb, vnb); int nd = sc_max(und, vnd); #ifdef SC_MAX_NBITS sc_digit dbegin[MAX_NDIGITS]; #else sc_digit *dbegin = new sc_digit[nd]; #endif sc_digit *d = dbegin; const sc_digit *x; const sc_digit *y; int xnd; int ynd; small_type xs; small_type ys; if (und >= vnd) { x = ud; y = vd; xnd = und; ynd = vnd; xs = us; ys = vs; } else { y = ud; x = vd; ynd = und; xnd = vnd; ys = us; xs = vs; } const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(xs, ys); if (s > 0) { if (xs > 0) { // case 3 while (y < yend) (*d++) = (*x++) | (*y++); while (x < xend) (*d++) = (*x++); } else { // case 4 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*d++) = (xcarry | ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += DIGIT_MASK; (*d++) = (xcarry | ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (xs > 0) { // case 5 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*d++) = ((*x++) | ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*d++) = ((*x++) | ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } } else { // case 6 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); (*d++) = (xcarry | (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x++) & DIGIT_MASK); (*d++) = xcarry & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } } } s = convert_signed_2C_to_SM(nb, nd, dbegin); return CLASS_TYPE(s, nb, nd, dbegin); } // ---------------------------------------------------------------------------- // SECTION: Friend functions for XOR operators. // ---------------------------------------------------------------------------- // Handles the cases 3-5 and returns the result. CLASS_TYPE XOR_HELPER(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd) { int nb = sc_max(unb, vnb); int nd = sc_max(und, vnd); #ifdef SC_MAX_NBITS sc_digit dbegin[MAX_NDIGITS]; #else sc_digit *dbegin = new sc_digit[nd]; #endif sc_digit *d = dbegin; const sc_digit *x; const sc_digit *y; int xnd; int ynd; small_type xs; small_type ys; if (und >= vnd) { x = ud; y = vd; xnd = und; ynd = vnd; xs = us; ys = vs; } else { y = ud; x = vd; ynd = und; xnd = vnd; ys = us; xs = vs; } const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(xs, ys); if (s > 0) { if (xs > 0) { // case 3 while (y < yend) (*d++) = ((*x++) ^ (*y++)) & DIGIT_MASK; while (x < xend) (*d++) = (*x++); } else { // case 4 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*d++) = (xcarry ^ ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x++) & DIGIT_MASK); ycarry += DIGIT_MASK; (*d++) = (xcarry ^ ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (xs > 0) { // case 5 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*d++) = ((*x++) ^ ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*d++) = ((*x++) ^ ycarry) & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } } else { // case 6 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x++) & DIGIT_MASK); (*d++) = (xcarry ^ (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x++) & DIGIT_MASK); (*d++) = xcarry & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } } } s = convert_signed_2C_to_SM(nb, nd, dbegin); return CLASS_TYPE(s, nb, nd, dbegin); } // End of file. systemc-2.3.4/src/sysc/datatypes/int/sc_uint.h0000644000175000017500000002117214342422106021245 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_uint.h -- An unsigned integer whose length is less than 64 bits. Unlike arbitrary precision, arithmetic and bitwise operations are performed using the native types (hence capped at 64 bits). The sc_uint integer is useful when the user does not need arbitrary precision and the performance is superior to sc_bigint/sc_biguint. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Resolved ambiguity with sc_(un)signed. - Merged the code for 64- and 32-bit versions via the constants in sc_nbdefs.h. - Eliminated redundant file inclusions. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_uint.h,v $ // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_UINT_H #define SC_UINT_H #include "sysc/datatypes/int/sc_uint_base.h" namespace sc_dt { // classes defined in this module template class sc_uint; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_uint // // Template class sc_uint is the interface that the user sees. It // is derived from sc_uint_base and most of its methods are just // wrappers that call the corresponding method in the parent // class. Note that the length of sc_uint datatype is specified as a // template parameter. // ---------------------------------------------------------------------------- template class sc_uint : public sc_uint_base { public: // constructors sc_uint() : sc_uint_base( W ) {} sc_uint( uint_type v ) : sc_uint_base( v, W ) {} sc_uint( const sc_uint& a ) : sc_uint_base( a ) {} sc_uint( const sc_uint_base& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( const sc_uint_subref_r& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } template< class T > sc_uint( const sc_generic_base& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( const sc_signed& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( const sc_unsigned& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } #ifdef SC_INCLUDE_FX explicit sc_uint( const sc_fxval& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } explicit sc_uint( const sc_fxval_fast& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } explicit sc_uint( const sc_fxnum& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } explicit sc_uint( const sc_fxnum_fast& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } #endif sc_uint( const sc_bv_base& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( const sc_lv_base& a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( const char* a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( unsigned long a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( long a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( unsigned int a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( int a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( int64 a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } sc_uint( double a ) : sc_uint_base( W ) { sc_uint_base::operator = ( a ); } // assignment operators sc_uint& operator = ( uint_type v ) { sc_uint_base::operator = ( v ); return *this; } sc_uint& operator = ( const sc_uint_base& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_uint_subref_r& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_uint& a ) { m_val = a.m_val; return *this; } template sc_uint& operator = ( const sc_generic_base& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_signed& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_unsigned& a ) { sc_uint_base::operator = ( a ); return *this; } #ifdef SC_INCLUDE_FX sc_uint& operator = ( const sc_fxval& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_fxval_fast& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_fxnum& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_fxnum_fast& a ) { sc_uint_base::operator = ( a ); return *this; } #endif sc_uint& operator = ( const sc_bv_base& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const sc_lv_base& a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( const char* a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( unsigned long a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( long a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( unsigned int a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( int a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( int64 a ) { sc_uint_base::operator = ( a ); return *this; } sc_uint& operator = ( double a ) { sc_uint_base::operator = ( a ); return *this; } // arithmetic assignment operators sc_uint& operator += ( uint_type v ) { sc_uint_base::operator += ( v ); return *this; } sc_uint& operator -= ( uint_type v ) { sc_uint_base::operator -= ( v ); return *this; } sc_uint& operator *= ( uint_type v ) { sc_uint_base::operator *= ( v ); return *this; } sc_uint& operator /= ( uint_type v ) { sc_uint_base::operator /= ( v ); return *this; } sc_uint& operator %= ( uint_type v ) { sc_uint_base::operator %= ( v ); return *this; } // bitwise assignment operators sc_uint& operator &= ( uint_type v ) { sc_uint_base::operator &= ( v ); return *this; } sc_uint& operator |= ( uint_type v ) { sc_uint_base::operator |= ( v ); return *this; } sc_uint& operator ^= ( uint_type v ) { sc_uint_base::operator ^= ( v ); return *this; } sc_uint& operator <<= ( uint_type v ) { sc_uint_base::operator <<= ( v ); return *this; } sc_uint& operator >>= ( uint_type v ) { sc_uint_base::operator >>= ( v ); return *this; } // prefix and postfix increment and decrement operators sc_uint& operator ++ () // prefix { sc_uint_base::operator ++ (); return *this; } const sc_uint operator ++ ( int ) // postfix { return sc_uint( sc_uint_base::operator ++ ( 0 ) ); } sc_uint& operator -- () // prefix { sc_uint_base::operator -- (); return *this; } const sc_uint operator -- ( int ) // postfix { return sc_uint( sc_uint_base::operator -- ( 0 ) ); } }; } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_nbdefs.h0000644000175000017500000001771614342422106021540 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbdefs.h -- Top level header file for arbitrary precision signed/unsigned arithmetic. This file defines all the constants needed. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Torsten Maehne, Berner Fachhochschule, 2016-09-24 Description of Modification: Move constant definitions to the header so that that their value is known at compile time. *****************************************************************************/ // $Log: sc_nbdefs.h,v $ // Revision 1.7 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.6 2011/02/18 20:09:34 acg // Philipp A. Hartmann: added alternative #define for Windows to guard. // // Revision 1.5 2011/01/20 16:52:20 acg // Andy Goodrich: changes for IEEE 1666 2011. // // Revision 1.4 2010/02/08 18:35:55 acg // Andy Goodrich: Philipp Hartmann's changes for Solaris and Linux 64. // // Revision 1.2 2009/05/22 16:06:29 acg // Andy Goodrich: process control updates. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_NBDEFS_H #define SC_NBDEFS_H #include "sysc/kernel/sc_cmnhdr.h" #include #if defined(__sun) || defined(__sun__) # include #elif !defined(WIN32) && !defined(_WIN32) # include #endif #include "sysc/kernel/sc_constants.h" // For SC_MAX_NBITS // Activate support mixed operands for concatenation via the comma operator #define SC_DT_MIXED_COMMA_OPERATORS namespace sc_dt { // ---------------------------------------------------------------------------- // ENUM : sc_numrep // // Enumeration of number representations for character string conversion. // ---------------------------------------------------------------------------- enum sc_numrep { SC_NOBASE = 0, SC_BIN = 2, SC_OCT = 8, SC_DEC = 10, SC_HEX = 16, SC_BIN_US, SC_BIN_SM, SC_OCT_US, SC_OCT_SM, SC_HEX_US, SC_HEX_SM, SC_CSD }; // Sign of a number: #define SC_NEG -1 // Negative number #define SC_ZERO 0 // Zero #define SC_POS 1 // Positive number #define SC_NOSIGN 2 // Uninitialized sc_signed number typedef unsigned char uchar; // A small_type number is at least a char. Defining an int is probably // better for alignment. typedef int small_type; // Attributes of a byte. #define BITS_PER_BYTE 8 #define BYTE_RADIX 256 #define BYTE_MASK 255 // LOG2_BITS_PER_BYTE = log2(BITS_PER_BYTE), assuming that // BITS_PER_BYTE is a power of 2. #define LOG2_BITS_PER_BYTE 3 // Attributes of the unsigned long. These definitions are used mainly in // the functions that are aware of the internal representation of // digits, e.g., get/set_packed_rep(). #define BYTES_PER_DIGIT_TYPE 4 #define BITS_PER_DIGIT_TYPE 32 // Attributes of a digit, i.e., unsigned long less the overflow bits. #define BYTES_PER_DIGIT 4 #define BITS_PER_DIGIT 30 #define DIGIT_RADIX (1ul << BITS_PER_DIGIT) #define DIGIT_MASK (DIGIT_RADIX - 1) // Make sure that BYTES_PER_DIGIT = ceil(BITS_PER_DIGIT / BITS_PER_BYTE). // Similar attributes for the half of a digit. Note that // HALF_DIGIT_RADIX is equal to the square root of DIGIT_RADIX. These // definitions are used mainly in the multiplication routines. #define BITS_PER_HALF_DIGIT (BITS_PER_DIGIT / 2) #define HALF_DIGIT_RADIX (1ul << BITS_PER_HALF_DIGIT) #define HALF_DIGIT_MASK (HALF_DIGIT_RADIX - 1) // DIV_CEIL2(x, y) = ceil(x / y). x and y are positive numbers. #define DIV_CEIL2(x, y) (((x) - 1) / (y) + 1) // DIV_CEIL(x) = ceil(x / BITS_PER_DIGIT) = the number of digits to // store x bits. x is a positive number. #define DIV_CEIL(x) DIV_CEIL2(x, BITS_PER_DIGIT) #ifdef SC_MAX_NBITS static const int MAX_NDIGITS = DIV_CEIL(SC_MAX_NBITS) + 2; // Consider a number with x bits another with y bits. The maximum // number of bits happens when we multiply them. The result will have // (x + y) bits. Assume that x + y <= SC_MAX_NBITS. Then, DIV_CEIL(x) + // DIV_CEIL(y) <= DIV_CEIL(SC_MAX_NBITS) + 2. This is the reason for +2 // above. With this change, MAX_NDIGITS must be enough to hold the // result of any operation. #endif // Support for "digit" vectors used to hold the values of sc_signed, // sc_unsigned, sc_bv_base, and sc_lv_base data types. This type is also used // in the concatenation support. An sc_digit is currently an unsigned 32-bit // quantity. The typedef used is an unsigned int, rather than an unsigned long, // since the unsigned long data type varies in size between 32-bit and 64-bit // machines. typedef unsigned int sc_digit; // 32-bit unsigned integer // Support for the long long type. This type is not in the standard // but is usually supported by compilers. #ifndef _WIN32 # if defined(__x86_64__) || defined(__aarch64__) typedef long long int64; typedef unsigned long long uint64; # else typedef int64_t int64; typedef uint64_t uint64; # endif #else typedef __int64 int64; typedef unsigned __int64 uint64; #endif #if !defined(_WIN32) || defined(__MINGW32__) static const uint64 UINT64_ZERO = 0ULL; static const uint64 UINT64_ONE = 1ULL; static const uint64 UINT64_32ONES = 0x00000000ffffffffULL; #else static const uint64 UINT64_ZERO = 0i64; static const uint64 UINT64_ONE = 1i64; static const uint64 UINT64_32ONES = 0x00000000ffffffffi64; #endif // Bits per ... // will be deleted in the future. Use numeric_limits instead #define BITS_PER_CHAR 8 #define BITS_PER_INT (sizeof(int) * BITS_PER_CHAR) #define BITS_PER_LONG (sizeof(long) * BITS_PER_CHAR) #define BITS_PER_INT64 (sizeof(::sc_dt::int64) * BITS_PER_CHAR) #define BITS_PER_UINT (sizeof(unsigned int) * BITS_PER_CHAR) #define BITS_PER_ULONG (sizeof(unsigned long) * BITS_PER_CHAR) #define BITS_PER_UINT64 (sizeof(::sc_dt::uint64) * BITS_PER_CHAR) // Digits per ... #define DIGITS_PER_CHAR 1 #define DIGITS_PER_INT ((BITS_PER_INT+29)/30) #define DIGITS_PER_LONG ((BITS_PER_LONG+29)/30) #define DIGITS_PER_INT64 ((BITS_PER_INT64+29)/30) #define DIGITS_PER_UINT ((BITS_PER_UINT+29)/30) #define DIGITS_PER_ULONG ((BITS_PER_ULONG+29)/30) #define DIGITS_PER_UINT64 ((BITS_PER_UINT64+29)/30) // Above, BITS_PER_X is mainly used for sc_signed, and BITS_PER_UX is // mainly used for sc_unsigned. static const small_type NB_DEFAULT_BASE = SC_DEC; // For sc_int code: typedef int64 int_type; typedef uint64 uint_type; # define SC_INTWIDTH 64 static const uint64 UINT_ZERO = UINT64_ZERO; static const uint64 UINT_ONE = UINT64_ONE; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_nbutils.h0000644000175000017500000006150714342422106021754 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbutils.h -- External and friend functions for both sc_signed and sc_unsigned classes. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_nbutils.h,v $ // Revision 1.6 2011/09/08 16:12:15 acg // Philipp A. Hartmann: fix issue with Sun machines wrt real math libraries. // // Revision 1.5 2011/08/26 23:00:01 acg // Torsten Maehne: remove use of ieeefp.h. // // Revision 1.4 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.3 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.2 2010/09/06 16:35:48 acg // Andy Goodrich: changed i386 to __i386__ in ifdef's. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_NBUTILS_H #define SC_NBUTILS_H #include #include #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/utils/sc_report.h" #include #include namespace sc_dt { //----------------------------------------------------------------------------- //"sc_io_base" // // This inline function returns the type of an i/o stream's base as a SystemC // base designator. // stream_object = reference to the i/o stream whose base is to be returned. // //"sc_io_show_base" // // This inline function returns true if the base should be shown when a SystemC // value is displayed via the supplied stream operator. // stream_object = reference to the i/o stream to return showbase value for. //----------------------------------------------------------------------------- #if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) inline sc_numrep sc_io_base( ::std::ostream& os, sc_numrep def_base ) { std::ios::fmtflags flags = os.flags() & std::ios::basefield; if ( flags & ::std::ios::dec ) return SC_DEC; if ( flags & ::std::ios::hex ) return SC_HEX; if ( flags & ::std::ios::oct ) return SC_OCT; return def_base; } inline bool sc_io_show_base( ::std::ostream& os ) { return (os.flags() & ::std::ios::showbase) != 0 ; } #else // Other inline sc_numrep sc_io_base( ::std::ostream& /*unused*/, sc_numrep /*unused*/ ) { return SC_DEC; } inline bool sc_io_show_base( ::std::ostream& /*unused*/ ) { return false; } #endif const std::string to_string( sc_numrep ); inline ::std::ostream& operator << ( ::std::ostream& os, sc_numrep numrep ) { os << to_string( numrep ); return os; } // ---------------------------------------------------------------------------- // One transition of the FSM to find base and sign of a number. extern SC_API small_type fsm_move(char c, small_type &b, small_type &s, small_type &state); // Parse a character string into its equivalent binary bits. extern SC_API void parse_binary_bits( const char* src_p, int dst_n, sc_digit* data_p, sc_digit* ctrl_p=0 ); // Parse a character string into its equivalent hexadecimal bits. extern SC_API void parse_hex_bits( const char* src_p, int dst_n, sc_digit* data_p, sc_digit* ctrl_p=0 ); // Find the base and sign of a number in v. extern SC_API const char * get_base_and_sign(const char *v, small_type &base, small_type &sign); // Create a number out of v in base. extern SC_API small_type vec_from_str(int unb, int und, sc_digit *u, const char *v, sc_numrep base = SC_NOBASE) ; // ---------------------------------------------------------------------------- // Naming convention for the vec_ functions below: // vec_OP(u, v, w) : computes w = u OP v. // vec_OP_on(u, v) : computes u = u OP v if u has more digits than v. // vec_OP_on2(u, v) : computes u = u OP v if u has fewer digits than v. // _large : parameters are vectors. // _small : one of the parameters is a single digit. // Xlen : the number of digits in X. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Functions for vector addition: w = u + v or u += v. // ---------------------------------------------------------------------------- extern SC_API void vec_add(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w); extern SC_API void vec_add_on(int ulen, sc_digit *u, int vlen, const sc_digit *v); extern SC_API void vec_add_on2(int ulen, sc_digit *u, int vlen, const sc_digit *v); extern SC_API void vec_add_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w); extern SC_API void vec_add_small_on(int ulen, sc_digit *u, sc_digit v); // ---------------------------------------------------------------------------- // Functions for vector subtraction: w = u - v, u -= v, or u = v - u. // ---------------------------------------------------------------------------- extern SC_API void vec_sub(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w); extern SC_API void vec_sub_on(int ulen, sc_digit *u, int vlen, const sc_digit *v); extern SC_API void vec_sub_on2(int ulen, sc_digit *u, int vlen, const sc_digit *v); extern SC_API void vec_sub_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w); extern SC_API void vec_sub_small_on(int ulen, sc_digit *u, sc_digit v); // ---------------------------------------------------------------------------- // Functions for vector multiplication: w = u * v or u *= v. // ---------------------------------------------------------------------------- extern SC_API void vec_mul(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w); extern SC_API void vec_mul_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w); extern SC_API void vec_mul_small_on(int ulen, sc_digit *u, sc_digit v); // ---------------------------------------------------------------------------- // Functions for vector division: w = u / v. // ---------------------------------------------------------------------------- extern SC_API void vec_div_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w); extern SC_API void vec_div_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w); // ---------------------------------------------------------------------------- // Functions for vector remainder: w = u % v or u %= v. // ---------------------------------------------------------------------------- extern SC_API void vec_rem_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w); extern SC_API sc_digit vec_rem_small(int ulen, const sc_digit *u, sc_digit v); extern SC_API sc_digit vec_rem_on_small(int ulen, sc_digit *u, sc_digit v); // ---------------------------------------------------------------------------- // Functions to convert between vectors of char and sc_digit. // ---------------------------------------------------------------------------- extern SC_API int vec_to_char(int ulen, const sc_digit *u, int vlen, uchar *v); extern SC_API void vec_from_char(int ulen, const uchar *u, int vlen, sc_digit *v); // ---------------------------------------------------------------------------- // Functions to shift left or right, or to create a mirror image of vectors. // ---------------------------------------------------------------------------- extern SC_API void vec_shift_left(int ulen, sc_digit *u, int nsl); extern SC_API void vec_shift_right(int vlen, sc_digit *u, int nsr, sc_digit fill = 0); extern SC_API void vec_reverse(int unb, int und, sc_digit *ud, int l, int r = 0); // ---------------------------------------------------------------------------- // Various utility functions. // ---------------------------------------------------------------------------- // Return the low half part of d. inline sc_digit low_half(sc_digit d) { return (d & HALF_DIGIT_MASK); } // Return the high half part of d. The high part of the digit may have // more bits than BITS_PER_HALF_DIGIT due to, e.g., overflow in the // multiplication. Hence, in other functions that use high_half(), // make sure that the result contains BITS_PER_HALF_DIGIT if // necessary. This is done by high_half_masked(). inline sc_digit high_half(sc_digit d) { return (d >> BITS_PER_HALF_DIGIT); } inline sc_digit high_half_masked(sc_digit d) { return (high_half(d) & HALF_DIGIT_MASK); } // Concatenate the high part h and low part l. Assumes that h and l // are less than or equal to HALF_DIGIT_MASK; inline sc_digit concat(sc_digit h, sc_digit l) { return ((h << BITS_PER_HALF_DIGIT) | l); } // Create a number with n 1's. inline sc_digit one_and_ones(int n) { return (((sc_digit) 1 << n) - 1); } // Create a number with one 1 and n 0's. inline sc_digit one_and_zeros(int n) { return ((sc_digit) 1 << n); } // ---------------------------------------------------------------------------- // Find the digit that bit i is in. inline int digit_ord(int i) { return (i / BITS_PER_DIGIT); } // Find the bit in digit_ord(i) that bit i corressponds to. inline int bit_ord(int i) { return (i % BITS_PER_DIGIT); } // ---------------------------------------------------------------------------- // Functions to compare, zero, complement vector(s). // ---------------------------------------------------------------------------- // Compare u and v and return r // r = 0 if u == v // r < 0 if u < v // r > 0 if u > v // - Assume that all the leading zero digits are already skipped. // - ulen and/or vlen can be zero. // - Every digit is less than or equal to DIGIT_MASK; inline int vec_cmp(int ulen, const sc_digit *u, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC // sc_assert((ulen <= 0) || (u != NULL)); // sc_assert((vlen <= 0) || (v != NULL)); // ulen and vlen can be equal to 0 because vec_cmp can be called // after vec_skip_leading_zeros. sc_assert((ulen >= 0) && (u != NULL)); sc_assert((vlen >= 0) && (v != NULL)); // If ulen > 0, then the leading digit of u must be non-zero. sc_assert((ulen <= 0) || (u[ulen - 1] != 0)); sc_assert((vlen <= 0) || (v[vlen - 1] != 0)); #endif if (ulen != vlen) return (ulen - vlen); // ulen == vlen >= 1 while ((--ulen >= 0) && (u[ulen] == v[ulen])) ; if (ulen < 0) return 0; #ifdef DEBUG_SYSTEMC // Test to see if the result is wrong due to the presence of // overflow bits. sc_assert((u[ulen] & DIGIT_MASK) != (v[ulen] & DIGIT_MASK)); #endif return (int) (u[ulen] - v[ulen]); } // Find the index of the first non-zero digit. // - ulen (before) = the number of digits in u. // - the returned value = the index of the first non-zero digit. // A negative value of -1 indicates that every digit in u is zero. inline int vec_find_first_nonzero(int ulen, const sc_digit *u) { #ifdef DEBUG_SYSTEMC // sc_assert((ulen <= 0) || (u != NULL)); sc_assert((ulen > 0) && (u != NULL)); #endif while ((--ulen >= 0) && (! u[ulen])) ; return ulen; } // Skip all the leading zero digits. // - ulen (before) = the number of digits in u. // - the returned value = the number of non-zero digits in u. // - the returned value is non-negative. inline int vec_skip_leading_zeros(int ulen, const sc_digit *u) { #ifdef DEBUG_SYSTEMC // sc_assert((ulen <= 0) || (u != NULL)); sc_assert((ulen > 0) && (u != NULL)); #endif return (1 + vec_find_first_nonzero(ulen, u)); } // Compare u and v and return r // r = 0 if u == v // r < 0 if u < v // r > 0 if u > v inline int vec_skip_and_cmp(int ulen, const sc_digit *u, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); #endif ulen = vec_skip_leading_zeros(ulen, u); vlen = vec_skip_leading_zeros(vlen, v); // ulen and/or vlen can be equal to zero here. return vec_cmp(ulen, u, vlen, v); } // Set u[i] = 0 where i = from ... (ulen - 1). inline void vec_zero(int from, int ulen, sc_digit *u) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif for(int i = from; i < ulen; i++) u[i] = 0; } // Set u[i] = 0 where i = 0 .. (ulen - 1). inline void vec_zero(int ulen, sc_digit *u) { vec_zero(0, ulen, u); } // Copy n digits from v to u. inline void vec_copy(int n, sc_digit *u, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((n > 0) && (u != NULL) && (v != NULL)); #endif for (int i = 0; i < n; ++i) u[i] = v[i]; } // Copy v to u, where ulen >= vlen, and zero the rest of the digits in u. inline void vec_copy_and_zero(int ulen, sc_digit *u, int vlen, const sc_digit *v) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); sc_assert((vlen > 0) && (v != NULL)); sc_assert(ulen >= vlen); #endif vec_copy(vlen, u, v); vec_zero(vlen, ulen, u); } // 2's-complement the digits in u. inline void vec_complement(int ulen, sc_digit *u) { #ifdef DEBUG_SYSTEMC sc_assert((ulen > 0) && (u != NULL)); #endif sc_digit carry = 1; for (int i = 0; i < ulen; ++i) { carry += (~u[i] & DIGIT_MASK); u[i] = carry & DIGIT_MASK; carry >>= BITS_PER_DIGIT; } } // ---------------------------------------------------------------------------- // Functions to handle built-in types or signs. // ---------------------------------------------------------------------------- // u = v // - v is an unsigned long or uint64, and positive integer. template< class Type > inline void from_uint(int ulen, sc_digit *u, Type v) { #ifdef DEBUG_SYSTEMC // sc_assert((ulen <= 0) || (u != NULL)); sc_assert((ulen > 0) && (u != NULL)); sc_assert(v >= 0); #endif int i = 0; while (v && (i < ulen)) { #ifndef _WIN32 u[i++] = static_cast( v & DIGIT_MASK ); #else u[i++] = ((sc_digit) v) & DIGIT_MASK; #endif v >>= BITS_PER_DIGIT; } vec_zero(i, ulen, u); } // Get u's sign and return its absolute value. // u can be long, unsigned long, int64, or uint64. template< class Type > inline small_type get_sign(Type &u) { if (u > 0) return SC_POS; if (u == 0) return SC_ZERO; // no positive number representable for minimum value, // leave as is to avoid Undefined Behaviour if( SC_LIKELY_( u > (std::numeric_limits::min)() ) ) u = -u; return SC_NEG; } // Return us * vs: // - Return SC_ZERO if either sign is SC_ZERO. // - Return SC_POS if us == vs // - Return SC_NEG if us != vs. inline small_type mul_signs(small_type us, small_type vs) { if ((us == SC_ZERO) || (vs == SC_ZERO)) return SC_ZERO; if (us == vs) return SC_POS; return SC_NEG; } // ---------------------------------------------------------------------------- // Functions to test for errors and print out error messages. // ---------------------------------------------------------------------------- #ifdef SC_MAX_NBITS SC_API void test_bound_failed(int nb); inline void test_bound(int nb) { if (nb > SC_MAX_NBITS) { test_bound_failed( nb ); sc_core::sc_abort(); // can't recover from here } } #endif template< class Type > inline void div_by_zero(Type s) { if (s == 0) { SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, "div_by_zero( Type ) : division by zero" ); sc_core::sc_abort(); // can't recover from here } } // ---------------------------------------------------------------------------- // Functions to check if a given vector is zero or make one. // ---------------------------------------------------------------------------- // If u[i] is zero for every i = 0,..., ulen - 1, return SC_ZERO, // else return s. inline small_type check_for_zero(small_type s, int ulen, const sc_digit *u) { #ifdef DEBUG_SYSTEMC // sc_assert(ulen >= 0); sc_assert((ulen > 0) && (u != NULL)); #endif if (vec_find_first_nonzero(ulen, u) < 0) return SC_ZERO; return s; } // If u[i] is zero for every i = 0,..., ulen - 1, return true, // else return false. inline bool check_for_zero(int ulen, const sc_digit *u) { #ifdef DEBUG_SYSTEMC // sc_assert(ulen >= 0); sc_assert((ulen > 0) && (u != NULL)); #endif if (vec_find_first_nonzero(ulen, u) < 0) return true; return false; } inline small_type make_zero(int nd, sc_digit *d) { vec_zero(nd, d); return SC_ZERO; } // ---------------------------------------------------------------------------- // Functions for both signed and unsigned numbers to convert sign-magnitude // (SM) and 2's complement (2C) representations. // added = 1 => for signed. // added = 0 => for unsigned. // IF_SC_SIGNED can be used as 'added'. // ---------------------------------------------------------------------------- // Trim the extra leading bits of a signed or unsigned number. inline void trim(small_type added, int nb, int nd, sc_digit *d) { #ifdef DEBUG_SYSTEMC sc_assert((nb > 0) && (nd > 0) && (d != NULL)); #endif d[nd - 1] &= one_and_ones(bit_ord(nb - 1) + added); } // Convert an (un)signed number from sign-magnitude representation to // 2's complement representation and trim the extra bits. inline void convert_SM_to_2C_trimmed(small_type added, small_type s, int nb, int nd, sc_digit *d) { if (s == SC_NEG) { vec_complement(nd, d); trim(added, nb, nd, d); } } // Convert an (un)signed number from sign-magnitude representation to // 2's complement representation but do not trim the extra bits. inline void convert_SM_to_2C(small_type s, int nd, sc_digit *d) { if (s == SC_NEG) vec_complement(nd, d); } // ---------------------------------------------------------------------------- // Functions to convert between sign-magnitude (SM) and 2's complement // (2C) representations of signed numbers. // ---------------------------------------------------------------------------- // Trim the extra leading bits off a signed number. inline void trim_signed(int nb, int nd, sc_digit *d) { #ifdef DEBUG_SYSTEMC sc_assert((nb > 0) && (nd > 0) && (d != NULL)); #endif d[nd - 1] &= one_and_ones(bit_ord(nb - 1) + 1); } // Convert a signed number from 2's complement representation to // sign-magnitude representation, and return its sign. nd is d's // actual size, without zeros eliminated. inline small_type convert_signed_2C_to_SM(int nb, int nd, sc_digit *d) { #ifdef DEBUG_SYSTEMC sc_assert((nb > 0) && (nd > 0) && (d != NULL)); #endif small_type s; int xnb = bit_ord(nb - 1) + 1; // Test the sign bit. if (d[nd - 1] & one_and_zeros(xnb - 1)) { s = SC_NEG; vec_complement(nd, d); } else s = SC_POS; // Trim the last digit. d[nd - 1] &= one_and_ones(xnb); // Check if the new number is zero. if (s == SC_POS) return check_for_zero(s, nd, d); return s; } // Convert a signed number from sign-magnitude representation to 2's // complement representation, get its sign, convert back to // sign-magnitude representation, and return its sign. nd is d's // actual size, without zeros eliminated. inline small_type convert_signed_SM_to_2C_to_SM(small_type s, int nb, int nd, sc_digit *d) { convert_SM_to_2C(s, nd, d); return convert_signed_2C_to_SM(nb, nd, d); } // Convert a signed number from sign-magnitude representation to 2's // complement representation and trim the extra bits. inline void convert_signed_SM_to_2C_trimmed(small_type s, int nb, int nd, sc_digit *d) { convert_SM_to_2C_trimmed(1, s, nb, nd, d); } // Convert a signed number from sign-magnitude representation to 2's // complement representation but do not trim the extra bits. inline void convert_signed_SM_to_2C(small_type s, int nd, sc_digit *d) { convert_SM_to_2C(s, nd, d); } // ---------------------------------------------------------------------------- // Functions to convert between sign-magnitude (SM) and 2's complement // (2C) representations of unsigned numbers. // ---------------------------------------------------------------------------- // Trim the extra leading bits off an unsigned number. inline void trim_unsigned(int nb, int nd, sc_digit *d) { #ifdef DEBUG_SYSTEMC sc_assert((nb > 0) && (nd > 0) && (d != NULL)); #endif d[nd - 1] &= one_and_ones(bit_ord(nb - 1)); } // Convert an unsigned number from 2's complement representation to // sign-magnitude representation, and return its sign. nd is d's // actual size, without zeros eliminated. inline small_type convert_unsigned_2C_to_SM(int nb, int nd, sc_digit *d) { trim_unsigned(nb, nd, d); return check_for_zero(SC_POS, nd, d); } // Convert an unsigned number from sign-magnitude representation to // 2's complement representation, get its sign, convert back to // sign-magnitude representation, and return its sign. nd is d's // actual size, without zeros eliminated. inline small_type convert_unsigned_SM_to_2C_to_SM(small_type s, int nb, int nd, sc_digit *d) { convert_SM_to_2C(s, nd, d); return convert_unsigned_2C_to_SM(nb, nd, d); } // Convert an unsigned number from sign-magnitude representation to // 2's complement representation and trim the extra bits. inline void convert_unsigned_SM_to_2C_trimmed(small_type s, int nb, int nd, sc_digit *d) { convert_SM_to_2C_trimmed(0, s, nb, nd, d); } // Convert an unsigned number from sign-magnitude representation to // 2's complement representation but do not trim the extra bits. inline void convert_unsigned_SM_to_2C(small_type s, int nd, sc_digit *d) { convert_SM_to_2C(s, nd, d); } // ---------------------------------------------------------------------------- // Functions to copy one (un)signed number to another. // ---------------------------------------------------------------------------- // Copy v to u. inline void copy_digits_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { if (und <= vnd) { vec_copy(und, ud, vd); if (unb <= vnb) us = convert_signed_SM_to_2C_to_SM(us, unb, und, ud); } else // und > vnd vec_copy_and_zero(und, ud, vnd, vd); } // Copy v to u. inline void copy_digits_unsigned(small_type &us, int unb, int und, sc_digit *ud, int /* vnb */, int vnd, const sc_digit *vd) { if (und <= vnd) vec_copy(und, ud, vd); else // und > vnd vec_copy_and_zero(und, ud, vnd, vd); us = convert_unsigned_SM_to_2C_to_SM(us, unb, und, ud); } // ---------------------------------------------------------------------------- // Faster set(i, v), without bound checking. // ---------------------------------------------------------------------------- // A version of set(i, v) without bound checking. inline void safe_set(int i, bool v, sc_digit *d) { #ifdef DEBUG_SYSTEMC sc_assert((i >= 0) && (d != NULL)); #endif int bit_num = bit_ord(i); int digit_num = digit_ord(i); if (v) d[digit_num] |= one_and_zeros(bit_num); else d[digit_num] &= ~(one_and_zeros(bit_num)); } // ---------------------------------------------------------------------------- // Function to check if a double number is bad (NaN or infinite). // ---------------------------------------------------------------------------- inline bool is_nan( double v ) { return std::numeric_limits::has_quiet_NaN && (v != v); } inline bool is_inf( double v ) { return v == std::numeric_limits::infinity() || v == -std::numeric_limits::infinity(); } inline void is_bad_double(double v) { // Windows throws exception. if( is_nan(v) || is_inf(v) ) SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, "is_bad_double( double v ) : " "v is not finite - NaN or Inf" ); } } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_uint_base.h0000644000175000017500000007427114342422106022247 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_uint_base.h -- An unsigned integer whose length is less than 64 bits. Unlike arbitrary precision, arithmetic and bitwise operations are performed using the native types (hence capped at 64 bits). The sc_uint integer is useful when the user does not need arbitrary precision and the performance is superior to sc_bigint/sc_biguint. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Resolved ambiguity with sc_(un)signed. - Merged the code for 64- and 32-bit versions via the constants in sc_nbdefs.h. - Eliminated redundant file inclusions. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_uint_base.h,v $ // Revision 1.3 2011/08/24 22:05:46 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.4 2006/05/08 17:50:02 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_UINT_BASE_H #define SC_UINT_BASE_H #include "sysc/kernel/sc_object.h" #include "sysc/datatypes/misc/sc_value_base.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/int/sc_length_param.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/fx/scfx_ieee.h" #include "sysc/utils/sc_temporary.h" namespace sc_dt { class sc_concatref; // classes defined in this module class sc_uint_bitref_r; class sc_uint_bitref; class sc_uint_subref_r; class sc_uint_subref; class sc_uint_base; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_int_subref_r; class sc_signed_subref_r; class sc_unsigned_subref_r; class sc_signed; class sc_unsigned; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; } // namespace sc_dt // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; } // namespace sc_core namespace sc_dt { extern SC_API const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH]; // friend operator declarations inline bool operator == ( const sc_uint_base& a, const sc_uint_base& b ); inline bool operator != ( const sc_uint_base& a, const sc_uint_base& b ); inline bool operator < ( const sc_uint_base& a, const sc_uint_base& b ); inline bool operator <= ( const sc_uint_base& a, const sc_uint_base& b ); inline bool operator > ( const sc_uint_base& a, const sc_uint_base& b ); inline bool operator >= ( const sc_uint_base& a, const sc_uint_base& b ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_bitref_r // // Proxy class for sc_uint bit selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_uint_bitref_r : public sc_value_base { friend class sc_uint_base; friend class sc_uint_signal; // constructors public: sc_uint_bitref_r( const sc_uint_bitref_r& init ) : sc_value_base(init), m_index(init.m_index), m_obj_p(init.m_obj_p) {} protected: sc_uint_bitref_r() : sc_value_base(), m_index(0), m_obj_p(0) {} // initializer for sc_core::sc_vpool: void initialize( const sc_uint_base* obj_p, int index_ ) { m_obj_p = (sc_uint_base*)obj_p; m_index = index_; } public: // destructor virtual ~sc_uint_bitref_r() {} // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return 1; } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; dst_p[word_i] &= ~bit_mask; return false; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); bool result; // True is non-zero. int word_i = low_i / BITS_PER_DIGIT; if ( operator uint64() ) { dst_p[word_i] |= bit_mask; result = true; } else { dst_p[word_i] &= ~bit_mask; result = false; } return result; } virtual uint64 concat_get_uint64() const { return operator uint64(); } // capacity int length() const { return 1; } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // implicit conversion to uint64 operator uint64 () const; bool operator ! () const; bool operator ~ () const; // explicit conversions uint64 value() const { return operator uint64 (); } bool to_bool() const { return operator uint64 (); } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_bool(); } protected: int m_index; sc_uint_base* m_obj_p; private: // disabled sc_uint_bitref_r& operator = ( const sc_uint_bitref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_uint_bitref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_bitref // // Proxy class for sc_uint bit selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_uint_bitref : public sc_uint_bitref_r { friend class sc_uint_base; friend class sc_core::sc_vpool; // constructors protected: sc_uint_bitref() : sc_uint_bitref_r() {} public: sc_uint_bitref( const sc_uint_bitref& init ) : sc_uint_bitref_r(init) {} public: // assignment operators sc_uint_bitref& operator = ( const sc_uint_bitref_r& b ); sc_uint_bitref& operator = ( const sc_uint_bitref& b ); sc_uint_bitref& operator = ( bool b ); sc_uint_bitref& operator &= ( bool b ); sc_uint_bitref& operator |= ( bool b ); sc_uint_bitref& operator ^= ( bool b ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_uint_bitref& ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref_r // // Proxy class for sc_uint part selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_uint_subref_r : public sc_value_base { friend class sc_uint_base; friend class sc_uint_subref; // constructors public: sc_uint_subref_r( const sc_uint_subref_r& init ) : sc_value_base(init), m_left(init.m_left), m_obj_p(init.m_obj_p), m_right(init.m_right) {} protected: sc_uint_subref_r() : sc_value_base(), m_left(0), m_obj_p(0), m_right(0) {} // initializer for sc_core::sc_vpool: void initialize( const sc_uint_base* obj_p, int left_i, int right_i ) { m_obj_p = (sc_uint_base*)obj_p; m_left = left_i; m_right = right_i; } public: // destructor virtual ~sc_uint_subref_r() {} // capacity int length() const { return ( m_left - m_right + 1 ); } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return length(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const { return (uint64)operator uint_type(); } // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // implicit conversion to uint_type operator uint_type() const; // explicit conversions uint_type value() const { return operator uint_type(); } int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } protected: int m_left; sc_uint_base* m_obj_p; int m_right; private: // disabled sc_uint_subref_r& operator = ( const sc_uint_subref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_uint_subref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref // // Proxy class for sc_uint part selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_uint_subref : public sc_uint_subref_r { friend class sc_uint_base; friend class sc_core::sc_vpool; // constructors protected: sc_uint_subref() : sc_uint_subref_r() {} public: sc_uint_subref( const sc_uint_subref& init ) : sc_uint_subref_r(init) {} public: // assignment operators sc_uint_subref& operator = ( uint_type v ); sc_uint_subref& operator = ( const sc_uint_base& a ); sc_uint_subref& operator = ( const sc_uint_subref_r& a ) { return operator = ( a.operator uint_type() ); } sc_uint_subref& operator = ( const sc_uint_subref& a ) { return operator = ( a.operator uint_type() ); } template sc_uint_subref& operator = ( const sc_generic_base& a ) { return operator = ( a->to_uint64() ); } sc_uint_subref& operator = ( const char* a ); sc_uint_subref& operator = ( unsigned long a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( long a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( unsigned int a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( int a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( int64 a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( double a ) { return operator = ( (uint_type) a ); } sc_uint_subref& operator = ( const sc_signed& ); sc_uint_subref& operator = ( const sc_unsigned& ); sc_uint_subref& operator = ( const sc_bv_base& ); sc_uint_subref& operator = ( const sc_lv_base& ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_uint_subref& ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_base // // Base class for sc_uint. // ---------------------------------------------------------------------------- class SC_API sc_uint_base : public sc_value_base { friend class sc_uint_bitref_r; friend class sc_uint_bitref; friend class sc_uint_subref_r; friend class sc_uint_subref; // support methods void invalid_length() const; void invalid_index( int i ) const; void invalid_range( int l, int r ) const; void check_length() const { if( m_len <= 0 || m_len > SC_INTWIDTH ) { invalid_length(); } } void check_index( int i ) const { if( i < 0 || i >= m_len ) { invalid_index( i ); } } void check_range( int l, int r ) const { if( r < 0 || l >= m_len || l < r ) { invalid_range( l, r ); } } void check_value() const; void extend_sign() { #ifdef DEBUG_SYSTEMC check_value(); #endif m_val &= ( ~UINT_ZERO >> m_ulen ); } public: // constructors explicit sc_uint_base( int w = sc_length_param().len() ) : m_val( 0 ), m_len( w ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); } sc_uint_base( uint_type v, int w ) : m_val( v ), m_len( w ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); extend_sign(); } sc_uint_base( const sc_uint_base& a ) : sc_value_base(a), m_val(a.m_val), m_len(a.m_len), m_ulen(a.m_ulen) {} explicit sc_uint_base( const sc_uint_subref_r& a ) : m_val( a ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { extend_sign(); } template explicit sc_uint_base( const sc_generic_base& a ) : m_val( a->to_uint64() ), m_len( a->length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); extend_sign(); } explicit sc_uint_base( const sc_bv_base& v ); explicit sc_uint_base( const sc_lv_base& v ); explicit sc_uint_base( const sc_int_subref_r& v ); explicit sc_uint_base( const sc_signed_subref_r& v ); explicit sc_uint_base( const sc_unsigned_subref_r& v ); explicit sc_uint_base( const sc_signed& a ); explicit sc_uint_base( const sc_unsigned& a ); // destructor virtual ~sc_uint_base() {} // assignment operators sc_uint_base& operator = ( uint_type v ) { m_val = v; extend_sign(); return *this; } sc_uint_base& operator = ( const sc_uint_base& a ) { m_val = a.m_val; extend_sign(); return *this; } sc_uint_base& operator = ( const sc_uint_subref_r& a ) { m_val = a; extend_sign(); return *this; } template sc_uint_base& operator = ( const sc_generic_base& a ) { m_val = a->to_uint64(); extend_sign(); return *this; } sc_uint_base& operator = ( const sc_signed& a ); sc_uint_base& operator = ( const sc_unsigned& a ); #ifdef SC_INCLUDE_FX sc_uint_base& operator = ( const sc_fxval& a ); sc_uint_base& operator = ( const sc_fxval_fast& a ); sc_uint_base& operator = ( const sc_fxnum& a ); sc_uint_base& operator = ( const sc_fxnum_fast& a ); #endif sc_uint_base& operator = ( const sc_bv_base& a ); sc_uint_base& operator = ( const sc_lv_base& a ); sc_uint_base& operator = ( const char* a ); sc_uint_base& operator = ( unsigned long a ) { m_val = a; extend_sign(); return *this; } sc_uint_base& operator = ( long a ) { m_val = a; extend_sign(); return *this; } sc_uint_base& operator = ( unsigned int a ) { m_val = a; extend_sign(); return *this; } sc_uint_base& operator = ( int a ) { m_val = a; extend_sign(); return *this; } sc_uint_base& operator = ( int64 a ) { m_val = a; extend_sign(); return *this; } sc_uint_base& operator = ( double a ) { m_val = (uint_type) a; extend_sign(); return *this; } // arithmetic assignment operators sc_uint_base& operator += ( uint_type v ) { m_val += v; extend_sign(); return *this; } sc_uint_base& operator -= ( uint_type v ) { m_val -= v; extend_sign(); return *this; } sc_uint_base& operator *= ( uint_type v ) { m_val *= v; extend_sign(); return *this; } sc_uint_base& operator /= ( uint_type v ) { m_val /= v; extend_sign(); return *this; } sc_uint_base& operator %= ( uint_type v ) { m_val %= v; extend_sign(); return *this; } // bitwise assignment operators sc_uint_base& operator &= ( uint_type v ) { m_val &= v; extend_sign(); return *this; } sc_uint_base& operator |= ( uint_type v ) { m_val |= v; extend_sign(); return *this; } sc_uint_base& operator ^= ( uint_type v ) { m_val ^= v; extend_sign(); return *this; } sc_uint_base& operator <<= ( uint_type v ) { m_val <<= v; extend_sign(); return *this; } sc_uint_base& operator >>= ( uint_type v ) { m_val >>= v; /* no sign extension needed */ return *this; } // prefix and postfix increment and decrement operators sc_uint_base& operator ++ () // prefix { ++ m_val; extend_sign(); return *this; } const sc_uint_base operator ++ ( int ) // postfix { sc_uint_base tmp( *this ); ++ m_val; extend_sign(); return tmp; } sc_uint_base& operator -- () // prefix { -- m_val; extend_sign(); return *this; } const sc_uint_base operator -- ( int ) // postfix { sc_uint_base tmp( *this ); -- m_val; extend_sign(); return tmp; } // relational operators friend bool operator == ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val == b.m_val; } friend bool operator != ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val != b.m_val; } friend bool operator < ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val < b.m_val; } friend bool operator <= ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val <= b.m_val; } friend bool operator > ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val > b.m_val; } friend bool operator >= ( const sc_uint_base& a, const sc_uint_base& b ) { return a.m_val >= b.m_val; } // bit selection sc_uint_bitref& operator [] ( int i ); const sc_uint_bitref_r& operator [] ( int i ) const; sc_uint_bitref& bit( int i ); const sc_uint_bitref_r& bit( int i ) const; // part selection sc_uint_subref& operator () ( int left, int right ); const sc_uint_subref_r& operator () ( int left, int right ) const; sc_uint_subref& range( int left, int right ); const sc_uint_subref_r& range( int left, int right ) const; // bit access, without bounds checking or sign extension bool test( int i ) const { return ( 0 != (m_val & (UINT_ONE << i)) ); } void set( int i ) { m_val |= (UINT_ONE << i); } void set( int i, bool v ) { v ? m_val |= (UINT_ONE << i) : m_val &= ~(UINT_ONE << i); } // capacity int length() const { return m_len; } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return length(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const { return m_val; } virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // implicit conversion to uint_type operator uint_type() const { return m_val; } // explicit conversions uint_type value() const { return operator uint_type(); } int to_int() const { return (int) m_val; } unsigned int to_uint() const { return (unsigned int) m_val; } long to_long() const { return (long) m_val; } unsigned long to_ulong() const { return (unsigned long) m_val; } int64 to_int64() const { return (int64) m_val; } uint64 to_uint64() const { return (uint64) m_val; } double to_double() const { return uint64_to_double( m_val ); } long long_low() const { return (long) (m_val & UINT64_32ONES); } long long_high() const { return (long) ((m_val >> 32) & UINT64_32ONES); } // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } void scan( ::std::istream& is = ::std::cin ); protected: uint_type m_val; // value int m_len; // length int m_ulen; // unused length }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_uint_base& ); inline ::std::istream& operator >> ( ::std::istream&, sc_uint_base& ); // ---------------------------------------------------------------------------- // CLASS : sc_uint_bitref_r // // Proxy class for sc_uint bit selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to bool inline sc_uint_bitref_r::operator uint64 () const { return m_obj_p->test( m_index ); } inline bool sc_uint_bitref_r::operator ! () const { return ! m_obj_p->test( m_index ); } inline bool sc_uint_bitref_r::operator ~ () const { return ! m_obj_p->test( m_index ); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_uint_bitref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_bitref // // Proxy class for sc_uint bit selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline sc_uint_bitref& sc_uint_bitref::operator = ( const sc_uint_bitref_r& b ) { m_obj_p->set( m_index, b.to_bool() ); return *this; } inline sc_uint_bitref& sc_uint_bitref::operator = ( const sc_uint_bitref& b ) { m_obj_p->set( m_index, b.to_bool() ); return *this; } inline sc_uint_bitref& sc_uint_bitref::operator = ( bool b ) { m_obj_p->set( m_index, b ); return *this; } inline sc_uint_bitref& sc_uint_bitref::operator &= ( bool b ) { if( ! b ) { m_obj_p->set( m_index, b ); } return *this; } inline sc_uint_bitref& sc_uint_bitref::operator |= ( bool b ) { if( b ) { m_obj_p->set( m_index, b ); } return *this; } inline sc_uint_bitref& sc_uint_bitref::operator ^= ( bool b ) { if( b ) { m_obj_p->m_val ^= (UINT_ONE << m_index); } return *this; } inline ::std::istream& operator >> ( ::std::istream& is, sc_uint_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref_r // // Proxy class for sc_uint part selection (r-value only). // ---------------------------------------------------------------------------- // implicit conversion to uint_type inline sc_uint_subref_r::operator uint_type() const { uint_type val = m_obj_p->m_val; int uleft = SC_INTWIDTH - (m_left + 1); return ( (val & (~UINT_ZERO >> uleft)) >> m_right ); } // reduce methods inline bool sc_uint_subref_r::and_reduce() const { sc_uint_base a( *this ); return a.and_reduce(); } inline bool sc_uint_subref_r::or_reduce() const { sc_uint_base a( *this ); return a.or_reduce(); } inline bool sc_uint_subref_r::xor_reduce() const { sc_uint_base a( *this ); return a.xor_reduce(); } // explicit conversions inline int sc_uint_subref_r::to_int() const { sc_uint_base a( *this ); return a.to_int(); } inline unsigned int sc_uint_subref_r::to_uint() const { sc_uint_base a( *this ); return a.to_uint(); } inline long sc_uint_subref_r::to_long() const { sc_uint_base a( *this ); return a.to_long(); } inline unsigned long sc_uint_subref_r::to_ulong() const { sc_uint_base a( *this ); return a.to_ulong(); } inline int64 sc_uint_subref_r::to_int64() const { sc_uint_base a( *this ); return a.to_int64(); } inline uint64 sc_uint_subref_r::to_uint64() const { sc_uint_base a( *this ); return a.to_uint64(); } inline double sc_uint_subref_r::to_double() const { sc_uint_base a( *this ); return a.to_double(); } // explicit conversion to character string inline const std::string sc_uint_subref_r::to_string( sc_numrep numrep ) const { sc_uint_base a( *this ); return a.to_string( numrep ); } inline const std::string sc_uint_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const { sc_uint_base a( *this ); return a.to_string( numrep, w_prefix ); } // functional notation for the reduce methods inline bool and_reduce( const sc_uint_subref_r& a ) { return a.and_reduce(); } inline bool nand_reduce( const sc_uint_subref_r& a ) { return a.nand_reduce(); } inline bool or_reduce( const sc_uint_subref_r& a ) { return a.or_reduce(); } inline bool nor_reduce( const sc_uint_subref_r& a ) { return a.nor_reduce(); } inline bool xor_reduce( const sc_uint_subref_r& a ) { return a.xor_reduce(); } inline bool xnor_reduce( const sc_uint_subref_r& a ) { return a.xnor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_uint_subref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_subref // // Proxy class for sc_uint part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline sc_uint_subref& sc_uint_subref::operator = ( const sc_uint_base& a ) { return operator = ( a.operator uint_type() ); } inline sc_uint_subref& sc_uint_subref::operator = ( const char* a ) { sc_uint_base aa( length() ); return ( *this = aa = a ); } inline ::std::istream& operator >> ( ::std::istream& is, sc_uint_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_uint_base // // Base class for sc_uint. // ---------------------------------------------------------------------------- // bit selection inline sc_uint_bitref& sc_uint_base::operator [] ( int i ) { check_index( i ); sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline const sc_uint_bitref_r& sc_uint_base::operator [] ( int i ) const { check_index( i ); sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline sc_uint_bitref& sc_uint_base::bit( int i ) { check_index( i ); sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } inline const sc_uint_bitref_r& sc_uint_base::bit( int i ) const { check_index( i ); sc_uint_bitref* result_p = sc_uint_bitref::m_pool.allocate(); result_p->initialize(this, i); return *result_p; } // part selection inline sc_uint_subref& sc_uint_base::operator () ( int left, int right ) { check_range( left, right ); sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline const sc_uint_subref_r& sc_uint_base::operator () ( int left, int right ) const { check_range( left, right ); sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline sc_uint_subref& sc_uint_base::range( int left, int right ) { check_range( left, right ); sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } inline const sc_uint_subref_r& sc_uint_base::range( int left, int right ) const { check_range( left, right ); sc_uint_subref* result_p = sc_uint_subref::m_pool.allocate(); result_p->initialize(this, left, right); return *result_p; } // functional notation for the reduce methods inline bool and_reduce( const sc_uint_base& a ) { return a.and_reduce(); } inline bool nand_reduce( const sc_uint_base& a ) { return a.nand_reduce(); } inline bool or_reduce( const sc_uint_base& a ) { return a.or_reduce(); } inline bool nor_reduce( const sc_uint_base& a ) { return a.nor_reduce(); } inline bool xor_reduce( const sc_uint_base& a ) { return a.xor_reduce(); } inline bool xnor_reduce( const sc_uint_base& a ) { return a.xnor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_uint_base& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_uint_base& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_int_base.cpp0000644000175000017500000004557014342422106022415 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_int_base.cpp -- contains interface definitions between sc_int and sc_signed, sc_unsigned, and definitions for sc_int_subref. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_int_base.cpp,v $ // Revision 1.5 2011/02/18 20:19:14 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.4 2010/02/04 22:23:29 acg // Andy Goodrich: fixed bug in concatenation reads for part selections, // the mask being used was 32 bits and should have been 64 bits. // // Revision 1.3 2008/06/19 17:47:56 acg // Andy Goodrich: fixes for bugs. See 2.2.1 RELEASENOTES. // // Revision 1.2 2007/11/04 21:27:00 acg // Andy Goodrich: changes to make sure the proper value is returned from // concat_get_data(). // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:31 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include "sysc/kernel/sc_macros.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/datatypes/fx/sc_fix.h" #include "sysc/datatypes/fx/scfx_other_defs.h" #include // explicit template instantiations namespace sc_core { template class SC_API sc_vpool; template class SC_API sc_vpool; } // namespace sc_core namespace sc_dt { // to avoid code bloat in sc_int_concref void sc_int_concref_invalid_length( int length ) { std::stringstream msg; msg << "sc_int_concref initialization: length = " << length << "violates 1 <= length <= " << SC_INTWIDTH; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } // ---------------------------------------------------------------------------- // CLASS : sc_int_bitref // // Proxy class for sc_int bit selection (r-value and l-value). // ---------------------------------------------------------------------------- sc_core::sc_vpool sc_int_bitref::m_pool(9); // concatenation methods: // #### OPTIMIZE void sc_int_bitref::concat_set(int64 src, int low_i) { sc_int_base aa( 1 ); *this = aa = (low_i < 64) ? src >> low_i : src >> 63; } void sc_int_bitref::concat_set(const sc_signed& src, int low_i) { sc_int_base aa( 1 ); if ( low_i < src.length() ) *this = aa = 1 & (src >> low_i); else *this = aa = (src < 0) ? (int_type)-1 : 0; } void sc_int_bitref::concat_set(const sc_unsigned& src, int low_i) { sc_int_base aa( 1 ); if ( low_i < src.length() ) *this = aa = 1 & (src >> low_i); else *this = aa = 0; } void sc_int_bitref::concat_set(uint64 src, int low_i) { sc_int_base aa( 1 ); *this = aa = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_int_bitref::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } // ---------------------------------------------------------------------------- // CLASS : sc_int_subref_r // // Proxy class for sc_int part selection (l-value). // ---------------------------------------------------------------------------- bool sc_int_subref_r::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int high_i; // Index of high order bit in dst_p to set. uint_type mask; // Mask for bits to extract or keep. dst_i = low_i / BITS_PER_DIGIT; high_i = low_i + (m_left-m_right); end_i = high_i / BITS_PER_DIGIT; mask = ~mask_int[m_left][m_right]; // PROCESS THE FIRST WORD: dst_p[dst_i] = (sc_digit)(dst_p[dst_i] & mask); switch ( end_i - dst_i ) { // BITS ARE ACROSS TWO WORDS: case 1: dst_i++; dst_p[dst_i] = 0; break; // BITS ARE ACROSS THREE WORDS: case 2: dst_i++; dst_p[dst_i++] = 0; dst_p[dst_i] = 0; break; // BITS ARE ACROSS FOUR WORDS: case 3: dst_i++; dst_p[dst_i++] = 0; dst_p[dst_i++] = 0; dst_p[dst_i] = 0; break; } return false; } bool sc_int_subref_r::concat_get_data( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int high_i; // Index of high order bit in dst_p to set. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. bool non_zero; // True if value inserted is non-zero. uint_type val; // Selection value extracted from m_obj_p. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; high_i = low_i + (m_left-m_right); end_i = high_i / BITS_PER_DIGIT; mask = ~mask_int[m_left][m_right]; val = (m_obj_p->m_val & mask) >> m_right; non_zero = val != 0; // PROCESS THE FIRST WORD: mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)((dst_p[dst_i] & mask) | ((val << left_shift) & DIGIT_MASK)); switch ( end_i - dst_i ) { // BITS ARE ACROSS TWO WORDS: case 1: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i] = (sc_digit)(val & DIGIT_MASK); break; // BITS ARE ACROSS THREE WORDS: case 2: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS FOUR WORDS: case 3: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; } return non_zero; } // ---------------------------------------------------------------------------- // CLASS : sc_int_subref // // Proxy class for sc_int part selection (r-value and l-value). // ---------------------------------------------------------------------------- sc_core::sc_vpool sc_int_subref::m_pool(9); // assignment operators sc_int_subref& sc_int_subref::operator = ( int_type v ) { int_type val = m_obj_p->m_val; uint_type mask = mask_int[m_left][m_right]; val &= mask; val |= (v << m_right) & ~mask; m_obj_p->m_val = val; m_obj_p->extend_sign(); return *this; } sc_int_subref& sc_int_subref::operator = ( const sc_signed& a ) { sc_int_base aa( length() ); return ( *this = aa = a ); } sc_int_subref& sc_int_subref::operator = ( const sc_unsigned& a ) { sc_int_base aa( length() ); return ( *this = aa = a ); } sc_int_subref& sc_int_subref::operator = ( const sc_bv_base& a ) { sc_int_base aa( length() ); return ( *this = aa = a ); } sc_int_subref& sc_int_subref::operator = ( const sc_lv_base& a ) { sc_int_base aa( length() ); return ( *this = aa = a ); } // concatenation methods: // #### OPTIMIZE void sc_int_subref::concat_set(int64 src, int low_i) { sc_int_base aa ( length() ); *this = aa = (low_i < 64) ? src >> low_i : src >> 63; } void sc_int_subref::concat_set(const sc_signed& src, int low_i) { sc_int_base aa( length() ); if ( low_i < src.length() ) *this = aa = src >> low_i; else *this = (src < 0) ? (int_type)-1 : 0; } void sc_int_subref::concat_set(const sc_unsigned& src, int low_i) { sc_int_base aa( length() ); if ( low_i < src.length() ) *this = aa = src >> low_i; else *this = 0; } void sc_int_subref::concat_set(uint64 src, int low_i) { sc_int_base aa ( length() ); *this = aa = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_int_subref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // ---------------------------------------------------------------------------- // CLASS : sc_int_base // // Base class for sc_int. // ---------------------------------------------------------------------------- // support methods void sc_int_base::invalid_length() const { std::stringstream msg; msg << "sc_int[_base] initialization: length = " << m_len << " violates 1 <= length <= " << SC_INTWIDTH; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_int_base::invalid_index( int i ) const { std::stringstream msg; msg << "sc_int[_base] bit selection: index = " << i << " violates 0 <= index <= " << (m_len - 1); SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_int_base::invalid_range( int l, int r ) const { std::stringstream msg; msg << "sc_int[_base] part selection: " << "left = " << l << ", right = " << r << " violates " << (m_len-1) << " >= left >= right >= 0"; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_int_base::check_value() const { int_type limit = (int_type) 1 << ( m_len - 1 ); if( m_val < -limit || m_val >= limit ) { std::stringstream msg; msg << "sc_int[_base]: value does not fit into a length of " << m_len; SC_REPORT_WARNING( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); } } // constructors sc_int_base::sc_int_base( const sc_bv_base& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v; } sc_int_base::sc_int_base( const sc_lv_base& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v; } sc_int_base::sc_int_base( const sc_uint_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_int_base::sc_int_base( const sc_signed_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_int_base::sc_int_base( const sc_unsigned_subref_r& v ) : m_val(0), m_len( v.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); *this = v.to_uint64(); } sc_int_base::sc_int_base( const sc_signed& a ) : m_val( 0 ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); #if 0 for( int i = m_len - 1; i >= 0; -- i ) { set( i, a.test( i ) ); } extend_sign(); #else *this = a.to_int64(); #endif } sc_int_base::sc_int_base( const sc_unsigned& a ) : m_val( 0 ), m_len( a.length() ), m_ulen( SC_INTWIDTH - m_len ) { check_length(); #if 0 for( int i = m_len - 1; i >= 0; -- i ) { set( i, a.test( i ) ); } extend_sign(); #else *this = a.to_int64(); #endif } // assignment operators sc_int_base& sc_int_base::operator = ( const sc_signed& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.test( i ) ); } bool sgn = a.sign(); for( ; i < m_len; ++ i ) { // sign extension set( i, sgn ); } extend_sign(); return *this; } sc_int_base& sc_int_base::operator = ( const sc_unsigned& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.test( i ) ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_int_base& sc_int_base::operator = ( const sc_bv_base& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, a.get_bit( i ) ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_int_base& sc_int_base::operator = ( const sc_lv_base& a ) { int minlen = sc_min( m_len, a.length() ); int i = 0; for( ; i < minlen; ++ i ) { set( i, sc_logic( a.get_bit( i ) ).to_bool() ); } for( ; i < m_len; ++ i ) { // zero extension set( i, 0 ); } extend_sign(); return *this; } sc_int_base& sc_int_base::operator = ( const char* a ) { if( a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is zero" ); } else if( *a == 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, "character string is empty" ); } else try { int len = m_len; sc_fix aa( a, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return this->operator = ( aa ); } catch( const sc_core::sc_report & ) { std::stringstream msg; msg << "character string '" << a << "' is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg.str().c_str() ); } return *this; } // explicit conversion to character string const std::string sc_int_base::to_string( sc_numrep numrep ) const { int len = m_len; sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep ); } const std::string sc_int_base::to_string( sc_numrep numrep, bool w_prefix ) const { int len = m_len; sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); return aa.to_string( numrep, w_prefix ); } // reduce methods bool sc_int_base::and_reduce() const { return ( m_val == int_type( -1 ) ); } bool sc_int_base::or_reduce() const { return ( m_val != int_type( 0 ) ); } bool sc_int_base::xor_reduce() const { uint_type mask = ~UINT_ZERO; uint_type val = m_val & (mask >> m_ulen); int n = SC_INTWIDTH; do { n >>= 1; mask >>= n; val = ((val & (mask << n)) >> n) ^ (val & mask); } while( n != 1 ); return ( val != uint_type( 0 ) ); } bool sc_int_base::concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; end_i = (low_i + (m_len-1)) / BITS_PER_DIGIT; mask = ~(~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)(dst_p[dst_i] & mask); dst_i++; for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; return false; } //------------------------------------------------------------------------------ //"sc_int_base::concat_get_data" // // This method transfers the value of this object instance to the supplied // array of sc_unsigned digits starting with the bit specified by low_i within // the array of digits. // // Notes: // (1) we don't worry about masking the high order data we transfer since // concat_get_data() is called from low order bit to high order bit. So // the bits above where we place ours will be filled in by someone else. // // dst_p -> array of sc_unsigned digits to be filled in. // low_i = first bit within dst_p to be set. //------------------------------------------------------------------------------ bool sc_int_base::concat_get_data( sc_digit* dst_p, int low_i ) const { int dst_i; // Word in dst_p now processing. int end_i; // Highest order word in dst_p to process. int high_i; // Index of high order bit in dst_p to set. int left_shift; // Left shift for val. uint_type mask; // Mask for bits to extract or keep. bool non_zero; // True if value inserted is non-zero. uint_type val; // Value for this object. dst_i = low_i / BITS_PER_DIGIT; left_shift = low_i % BITS_PER_DIGIT; high_i = low_i + (m_len-1); end_i = high_i / BITS_PER_DIGIT; val = m_val; non_zero = val != 0; // MASK OFF DATA TO BE TRANSFERRED BASED ON WIDTH: if ( m_len < 64 ) { mask = ~(~UINT_ZERO << m_len); val &= mask; } // PROCESS THE FIRST WORD: mask = (~UINT_ZERO << left_shift); dst_p[dst_i] = (sc_digit)((dst_p[dst_i] & ~mask) | ((val <>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS THREE WORDS: case 2: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = ((sc_digit)val) & DIGIT_MASK; val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; // BITS ARE ACROSS FOUR WORDS: case 3: dst_i++; val >>= (BITS_PER_DIGIT-left_shift); dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i++] = (sc_digit)(val & DIGIT_MASK); val >>= BITS_PER_DIGIT; dst_p[dst_i] = (sc_digit)val; break; } return non_zero; } // #### OPTIMIZE void sc_int_base::concat_set(int64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : src >> 63; } void sc_int_base::concat_set(const sc_signed& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = (src < 0) ? (int_type)-1 : 0; } void sc_int_base::concat_set(const sc_unsigned& src, int low_i) { if ( low_i < src.length() ) *this = src >> low_i; else *this = 0; } void sc_int_base::concat_set(uint64 src, int low_i) { *this = (low_i < 64) ? src >> low_i : 0; } // other methods void sc_int_base::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } } // namespace sc_dt; // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_nbcommon.inc0000644000175000017500000016120014342422106022415 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbcommon.cpp -- Functions common to both sc_signed and sc_unsigned. This file is included in sc_signed.cpp and sc_unsigned.cpp after the macros are defined accordingly. For example, sc_signed.cpp will first define CLASS_TYPE as sc_signed before including this file. This file like sc_nbfriends.cpp and sc_nbexterns.cpp is created in order to ensure only one version of each function, regardless of the class that they interface to. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // ---------------------------------------------------------------------------- // SECTION : Public members // ---------------------------------------------------------------------------- // Create a CLASS_TYPE number with nb bits. CLASS_TYPE::CLASS_TYPE( int nb ) : sc_value_base(), sgn(), nbits(), ndigits(), digit() { sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "int nb", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); #ifdef SC_MAX_NBITS test_bound(nb); #else digit = new sc_digit[ndigits]; #endif makezero(); } // Create a copy of v with sgn s. v is of the same type. CLASS_TYPE::CLASS_TYPE(const CLASS_TYPE& v) : sc_value_base(v), sgn(v.sgn), nbits(v.nbits), ndigits(v.ndigits), digit() { #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif vec_copy(ndigits, digit, v.digit); } // Create a copy of v where v is of the different type. CLASS_TYPE::CLASS_TYPE(const OTHER_CLASS_TYPE& v) : sc_value_base(v), sgn(v.sgn), nbits(num_bits(v.nbits)), ndigits(), digit() { #if (IF_SC_SIGNED == 1) ndigits = v.ndigits; #else ndigits = DIV_CEIL(nbits); #endif #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif copy_digits(v.nbits, v.ndigits, v.digit); } // Create a copy of v where v is an sign-less instance. CLASS_TYPE::CLASS_TYPE(const sc_bv_base& v) : sc_value_base(), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_bv_base", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = v; } CLASS_TYPE::CLASS_TYPE(const sc_lv_base& v) : sc_value_base(), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_lv_base", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = v; } CLASS_TYPE::CLASS_TYPE(const sc_int_subref_r& v) : sc_value_base(v), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_int_subref", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = v.to_uint64(); } CLASS_TYPE::CLASS_TYPE(const sc_uint_subref_r& v) : sc_value_base(v), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_uint_subref", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = v.to_uint64(); } CLASS_TYPE::CLASS_TYPE(const sc_signed_subref_r& v) : sc_value_base(v), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_signed_subref", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = sc_unsigned(v.m_obj_p, v.m_left, v.m_right); } CLASS_TYPE::CLASS_TYPE(const sc_unsigned_subref_r& v) : sc_value_base(v), sgn(), nbits(), ndigits(), digit() { int nb = v.length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_unsigned_subref", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); *this = sc_unsigned(v.m_obj_p, v.m_left, v.m_right); } // ---------------------------------------------------------------------------- // SECTION: Public members - Concatenation support. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // SECTION: Public members - Assignment operators. // ---------------------------------------------------------------------------- // Assignment from v of the same type. const CLASS_TYPE& CLASS_TYPE::operator=(const CLASS_TYPE& v) { if (this != &v) { sgn = v.sgn; if (sgn == SC_ZERO) vec_zero(ndigits, digit); else copy_digits(v.nbits, v.ndigits, v.digit); } return *this; } // Assignment from v of the different type. const CLASS_TYPE& CLASS_TYPE::operator=(const OTHER_CLASS_TYPE& v) { sgn = v.sgn; if (sgn == SC_ZERO) vec_zero(ndigits, digit); else copy_digits(v.nbits, v.ndigits, v.digit); return *this; } // Assignment from an sc_unsigned_subref_r const CLASS_TYPE& CLASS_TYPE::operator=(const sc_unsigned_subref_r& v) { return operator=(sc_unsigned(v)); } // Assignment from an sc_signed_subref_r const CLASS_TYPE& CLASS_TYPE::operator=(const sc_signed_subref_r& v) { return operator=(sc_unsigned(v)); } // ---------------------------------------------------------------------------- // SECTION: Input and output operators // ---------------------------------------------------------------------------- void CLASS_TYPE::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // ---------------------------------------------------------------------------- // SECTION: PLUS operators: +, +=, ++ // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. 0 + v = v // 2. u + 0 = u // 3. if sgn(u) == sgn(v) // 3.1 u + v = +(u + v) = sgn(u) * (u + v) // 3.2 (-u) + (-v) = -(u + v) = sgn(u) * (u + v) // 4. if sgn(u) != sgn(v) // 4.1 u + (-v) = u - v = sgn(u) * (u - v) // 4.2 (-u) + v = -(u - v) ==> sgn(u) * (u - v) // // Specialization of above cases for computing ++u or u++: // 1. 0 + 1 = 1 // 3. u + 1 = u + 1 = sgn(u) * (u + 1) // 4. (-u) + 1 = -(u - 1) = sgn(u) * (u - 1) const CLASS_TYPE& CLASS_TYPE::operator+=(const CLASS_TYPE& v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v.sgn == SC_ZERO) // case 2 return *this; // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator+=(const OTHER_CLASS_TYPE& v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v.sgn == SC_ZERO) // case 2 return *this; // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_SM_to_2C_to_SM(); return *this; } CLASS_TYPE& CLASS_TYPE::operator++() // prefix { *this = *this + 1; return *this; } const CLASS_TYPE CLASS_TYPE::operator++(int) // postfix { // Copy digit into d. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif small_type s = sgn; vec_copy(ndigits, d, digit); *this = *this + 1; return CLASS_TYPE(s, nbits, ndigits, d); } const CLASS_TYPE& CLASS_TYPE::operator+=(int64 v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v == 0) // case 2 return *this; CONVERT_INT64(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator+=(uint64 v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v == 0) // case 2 return *this; CONVERT_INT64(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator+=(long v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v == 0) // case 2 return *this; CONVERT_LONG(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator+=(unsigned long v) { // u = *this if (sgn == SC_ZERO) // case 1 return (*this = v); if (v == 0) // case 2 return *this; CONVERT_LONG(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_SM_to_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: MINUS operators: -, -=, -- // ---------------------------------------------------------------------------- // Cases to consider when computing u + v: // 1. u - 0 = u // 2. 0 - v = -v // 3. if sgn(u) != sgn(v) // 3.1 u - (-v) = u + v = sgn(u) * (u + v) // 3.2 (-u) - v = -(u + v) ==> sgn(u) * (u + v) // 4. if sgn(u) == sgn(v) // 4.1 u - v = +(u - v) = sgn(u) * (u - v) // 4.2 (-u) - (-v) = -(u - v) = sgn(u) * (u - v) // // Specialization of above cases for computing --u or u--: // 1. 0 - 1 = -1 // 3. (-u) - 1 = -(u + 1) = sgn(u) * (u + 1) // 4. u - 1 = u - 1 = sgn(u) * (u - 1) const CLASS_TYPE& CLASS_TYPE::operator-=(const CLASS_TYPE& v) { // u = *this if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) { // case 2 sgn = -v.sgn; copy_digits(v.nbits, v.ndigits, v.digit); } else { // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -v.sgn, v.nbits, v.ndigits, v.digit); convert_SM_to_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator-=(const OTHER_CLASS_TYPE& v) { // u = *this if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) { // case 2 sgn = -v.sgn; copy_digits(v.nbits, v.ndigits, v.digit); } else { // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -v.sgn, v.nbits, v.ndigits, v.digit); convert_SM_to_2C_to_SM(); } return *this; } CLASS_TYPE& CLASS_TYPE::operator--() // prefix { *this = *this - 1; return *this; } const CLASS_TYPE CLASS_TYPE::operator--(int) // postfix { // Copy digit into d. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif small_type s = sgn; vec_copy(ndigits, d, digit); *this = *this - 1; return CLASS_TYPE(s, nbits, ndigits, d); } const CLASS_TYPE& CLASS_TYPE::operator-=(int64 v) { // u = *this if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = -v); CONVERT_INT64(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator-=(uint64 v) { // u = *this if (v == 0) // case 1 return *this; int64 v2 = (int64) v; if (sgn == SC_ZERO) // case 2 return (*this = -v2); CONVERT_INT64(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator-=(long v) { // u = *this if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = -v); CONVERT_LONG(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_SM_to_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator-=(unsigned long v) { // u = *this if (v == 0) // case 1 return *this; long v2 = (long) v; if (sgn == SC_ZERO) // case 2 return (*this = -v2); CONVERT_LONG(v); // cases 3 and 4 add_on_help(sgn, nbits, ndigits, digit, -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_SM_to_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: MULTIPLICATION operators: *, *= // ---------------------------------------------------------------------------- // Cases to consider when computing u * v: // 1. u * 0 = 0 * v = 0 // 2. 1 * v = v and -1 * v = -v // 3. u * 1 = u and u * -1 = -u // 4. u * v = u * v const CLASS_TYPE& CLASS_TYPE::operator*=(const CLASS_TYPE& v) { // u = *this sgn = mul_signs(sgn, v.sgn); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else // cases 2-4 MUL_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator*=(const OTHER_CLASS_TYPE& v) { // u = *this sgn = mul_signs(sgn, v.sgn); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else // cases 2-4 MUL_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator*=(int64 v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else { // cases 2-4 CONVERT_INT64_2(v); MUL_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator*=(uint64 v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else { // cases 2-4 CONVERT_INT64_2(v); MUL_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator*=(long v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else { // cases 2-4 CONVERT_LONG_2(v); MUL_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator*=(unsigned long v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) // case 1 vec_zero(ndigits, digit); else { // cases 2-4 CONVERT_LONG_2(v); MUL_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } // ---------------------------------------------------------------------------- // SECTION: DIVISION operators: /, /= // ---------------------------------------------------------------------------- // Cases to consider when finding the quotient q = floor(u/v): // Note that u = q * v + r for r < q. // 1. 0 / 0 or u / 0 => error // 2. 0 / v => 0 = 0 * v + 0 // 3. u / v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u / v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u / v && u > v => u = q * v + r - v can be 1 or -1 const CLASS_TYPE& CLASS_TYPE::operator/=(const CLASS_TYPE& v) { sgn = mul_signs(sgn, v.sgn); if (sgn == SC_ZERO) { div_by_zero(v.sgn); // case 1 vec_zero(ndigits, digit); // case 2 } else // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator/=(const OTHER_CLASS_TYPE& v) { sgn = mul_signs(sgn, v.sgn); if (sgn == SC_ZERO) { div_by_zero(v.sgn); // case 1 vec_zero(ndigits, digit); // case 2 } else // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator/=(int64 v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_INT64_2(v); // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator/=(uint64 v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_INT64_2(v); // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator/=(long v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_LONG_2(v); // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator/=(unsigned long v) { // u = *this sgn = mul_signs(sgn, get_sign(v)); if (sgn == SC_ZERO) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_LONG_2(v); // other cases DIV_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } // ---------------------------------------------------------------------------- // SECTION: MOD operators: %, %=. // ---------------------------------------------------------------------------- // Cases to consider when finding the remainder r = u % v: // Note that u = q * v + r for r < q. // 1. 0 % 0 or u % 0 => error // 2. 0 % v => 0 = 0 * v + 0 // 3. u % v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 // 4. u % v && u < v => u = 0 * v + u - u can be 1 or -1 // 5. u % v && u > v => u = q * v + r - v can be 1 or -1 const CLASS_TYPE& CLASS_TYPE::operator%=(const CLASS_TYPE& v) { if ((sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 vec_zero(ndigits, digit); // case 2 } else // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator%=(const OTHER_CLASS_TYPE& v) { if ((sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { div_by_zero(v.sgn); // case 1 vec_zero(ndigits, digit); // case 2 } else // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, v.nbits, v.ndigits, v.digit); return *this; } const CLASS_TYPE& CLASS_TYPE::operator%=(int64 v) { small_type vs = get_sign(v); if ((sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_INT64_2(v); // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator%=(uint64 v) { if ((sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_INT64_2(v); // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator%=(long v) { small_type vs = get_sign(v); if ((sgn == SC_ZERO) || (vs == SC_ZERO)) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_LONG_2(v); // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator%=(unsigned long v) { if ((sgn == SC_ZERO) || (v == 0)) { div_by_zero(v); // case 1 vec_zero(ndigits, digit); // case 2 } else { CONVERT_LONG_2(v); // other cases MOD_ON_HELPER(sgn, nbits, ndigits, digit, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); } return *this; } // ---------------------------------------------------------------------------- // SECTION: Bitwise AND operators: &, &= // ---------------------------------------------------------------------------- // Cases to consider when computing u & v: // 1. u & 0 = 0 & v = 0 // 2. u & v => sgn = + // 3. (-u) & (-v) => sgn = - // 4. u & (-v) => sgn = + // 5. (-u) & v => sgn = + const CLASS_TYPE& CLASS_TYPE::operator&=(const CLASS_TYPE& v) { // u = *this if ((sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 makezero(); else { // other cases and_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator&=(const OTHER_CLASS_TYPE& v) { // u = *this if ((sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 makezero(); else { // other cases and_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator&=(int64 v) { // u = *this if ((sgn == SC_ZERO) || (v == 0)) // case 1 makezero(); else { // other cases CONVERT_INT64(v); and_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator&=(uint64 v) { // u = *this if ((sgn == SC_ZERO) || (v == 0)) // case 1 makezero(); else { // other cases CONVERT_INT64(v); and_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator&=(long v) { // u = *this if ((sgn == SC_ZERO) || (v == 0)) // case 1 makezero(); else { // other cases CONVERT_LONG(v); and_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); } return *this; } const CLASS_TYPE& CLASS_TYPE::operator&=(unsigned long v) { // u = *this if ((sgn == SC_ZERO) || (v == 0)) // case 1 makezero(); else { // other cases CONVERT_LONG(v); and_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); } return *this; } // ---------------------------------------------------------------------------- // SECTION: Bitwise OR operators: |, |= // ---------------------------------------------------------------------------- // Cases to consider when computing u | v: // 1. u | 0 = u // 2. 0 | v = v // 3. u | v => sgn = + // 4. (-u) | (-v) => sgn = - // 5. u | (-v) => sgn = - // 6. (-u) | v => sgn = - const CLASS_TYPE& CLASS_TYPE::operator|=(const CLASS_TYPE& v) { if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases or_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator|=(const OTHER_CLASS_TYPE& v) { if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases or_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator|=(int64 v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_INT64(v); or_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator|=(uint64 v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_INT64(v); or_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator|=(long v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_LONG(v); or_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator|=(unsigned long v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_LONG(v); or_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: Bitwise XOR operators: ^, ^= // ---------------------------------------------------------------------------- // Cases to consider when computing u ^ v: // Note that u ^ v = (~u & v) | (u & ~v). // 1. u ^ 0 = u // 2. 0 ^ v = v // 3. u ^ v => sgn = + // 4. (-u) ^ (-v) => sgn = - // 5. u ^ (-v) => sgn = - // 6. (-u) ^ v => sgn = + const CLASS_TYPE& CLASS_TYPE::operator^=(const CLASS_TYPE& v) { // u = *this if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases xor_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator^=(const OTHER_CLASS_TYPE& v) { // u = *this if (v.sgn == SC_ZERO) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases xor_on_help(sgn, nbits, ndigits, digit, v.sgn, v.nbits, v.ndigits, v.digit); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator^=(int64 v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_INT64(v); xor_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator^=(uint64 v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_INT64(v); xor_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator^=(long v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_LONG(v); xor_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); return *this; } const CLASS_TYPE& CLASS_TYPE::operator^=(unsigned long v) { if (v == 0) // case 1 return *this; if (sgn == SC_ZERO) // case 2 return (*this = v); // other cases CONVERT_LONG(v); xor_on_help(sgn, nbits, ndigits, digit, vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); convert_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: Bitwise NOT operator: ~ // ---------------------------------------------------------------------------- CLASS_TYPE operator~(const CLASS_TYPE& u) { small_type s = u.sgn; if (s == SC_ZERO) { sc_digit d = 1; return CLASS_TYPE(SC_NEG, u.nbits, 1, &d, false); } int nd = u.ndigits; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_copy(nd, d, u.digit); if (s == SC_POS) { s = SC_NEG; vec_add_small_on(nd, d, 1); } else { s = SC_POS; vec_sub_small_on(nd, d, 1); if (check_for_zero(nd, d)) s = SC_ZERO; } return CLASS_TYPE(s, u.nbits, nd, d); } // ---------------------------------------------------------------------------- // SECTION: LEFT SHIFT operators: <<, <<= // ---------------------------------------------------------------------------- CLASS_TYPE operator<<(const CLASS_TYPE& u, const CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return CLASS_TYPE(u); #ifdef SC_SIGNED if (v.sgn == SC_NEG) return CLASS_TYPE(u); #endif return operator<<(u, v.to_ulong()); } const CLASS_TYPE& CLASS_TYPE::operator<<=(const CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return *this; #ifdef SC_SIGNED if (v.sgn == SC_NEG) return *this; #endif return operator<<=(v.to_ulong()); } const CLASS_TYPE& CLASS_TYPE::operator<<=(const OTHER_CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return *this; #ifdef SC_UNSIGNED if (v.sgn == SC_NEG) return *this; #endif return operator<<=(v.to_ulong()); } CLASS_TYPE operator<<(const CLASS_TYPE& u, int64 v) { if (v <= 0) return CLASS_TYPE(u); return operator<<(u, (unsigned long) v); } CLASS_TYPE operator<<(const CLASS_TYPE& u, uint64 v) { if (v == 0) return CLASS_TYPE(u); return operator<<(u, (unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator<<=(int64 v) { if (v <= 0) return *this; return operator<<=((unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator<<=(uint64 v) { if (v == 0) return *this; return operator<<=((unsigned long) v); } CLASS_TYPE operator<<(const CLASS_TYPE& u, long v) { if (v <= 0) return CLASS_TYPE(u); return operator<<(u, (unsigned long) v); } CLASS_TYPE operator<<(const CLASS_TYPE& u, unsigned long v) { if (v == 0) return CLASS_TYPE(u); if (u.sgn == SC_ZERO) return CLASS_TYPE(u); int nb = u.nbits + v; int nd = DIV_CEIL(nb); #ifdef SC_MAX_NBITS test_bound(nb); sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_copy_and_zero(nd, d, u.ndigits, u.digit); convert_SM_to_2C(u.sgn, nd, d); vec_shift_left(nd, d, v); small_type s = convert_signed_2C_to_SM(nb, nd, d); return CLASS_TYPE(s, nb, nd, d); } const CLASS_TYPE& CLASS_TYPE::operator<<=(long v) { if (v <= 0) return *this; return operator<<=((unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator<<=(unsigned long v) { if (v == 0) return *this; if (sgn == SC_ZERO) return *this; convert_SM_to_2C(); vec_shift_left(ndigits, digit, v); convert_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: RIGHT SHIFT operators: >>, >>= // ---------------------------------------------------------------------------- CLASS_TYPE operator>>(const CLASS_TYPE& u, const CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return CLASS_TYPE(u); #ifdef SC_SIGNED if (v.sgn == SC_NEG) return CLASS_TYPE(u); #endif return operator>>(u, v.to_long()); } const CLASS_TYPE& CLASS_TYPE::operator>>=(const CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return *this; #ifdef SC_SIGNED if (v.sgn == SC_NEG) return *this; #endif return operator>>=(v.to_long()); } const CLASS_TYPE& CLASS_TYPE::operator>>=(const OTHER_CLASS_TYPE& v) { if (v.sgn == SC_ZERO) return *this; #ifdef SC_UNSIGNED if (v.sgn == SC_NEG) return *this; #endif return operator>>=(v.to_ulong()); } CLASS_TYPE operator>>(const CLASS_TYPE& u, int64 v) { if (v <= 0) return CLASS_TYPE(u); return operator>>(u, (unsigned long) v); } CLASS_TYPE operator>>(const CLASS_TYPE& u, uint64 v) { if (v == 0) return CLASS_TYPE(u); return operator>>(u, (unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator>>=(int64 v) { if (v <= 0) return *this; return operator>>=((unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator>>=(uint64 v) { if (v == 0) return *this; return operator>>=((unsigned long) v); } CLASS_TYPE operator>>(const CLASS_TYPE& u, long v) { if (v <= 0) return CLASS_TYPE(u); return operator>>(u, (unsigned long) v); } CLASS_TYPE operator>>(const CLASS_TYPE& u, unsigned long v) { if (v == 0) return CLASS_TYPE(u); if (u.sgn == SC_ZERO) return CLASS_TYPE(u); int nb = u.nbits; int nd = u.ndigits; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_copy(nd, d, u.digit); convert_SM_to_2C(u.sgn, nd, d); if (u.sgn == SC_NEG) vec_shift_right(nd, d, v, DIGIT_MASK); else vec_shift_right(nd, d, v, 0); small_type s = convert_signed_2C_to_SM(nb, nd, d); return CLASS_TYPE(s, nb, nd, d); } const CLASS_TYPE& CLASS_TYPE::operator>>=(long v) { if (v <= 0) return *this; return operator>>=((unsigned long) v); } const CLASS_TYPE& CLASS_TYPE::operator>>=(unsigned long v) { if (v == 0) return *this; if (sgn == SC_ZERO) return *this; convert_SM_to_2C(); if (sgn == SC_NEG) vec_shift_right(ndigits, digit, v, DIGIT_MASK); else vec_shift_right(ndigits, digit, v, 0); convert_2C_to_SM(); return *this; } // ---------------------------------------------------------------------------- // SECTION: EQUAL TO operator: == // ---------------------------------------------------------------------------- // Defined in the sc_signed.cpp and sc_unsigned.cpp. // ---------------------------------------------------------------------------- // SECTION: NOT_EQUAL operator: != // ---------------------------------------------------------------------------- bool operator!=(const CLASS_TYPE& u, const CLASS_TYPE& v) { return (! operator==(u, v)); } bool operator!=(const CLASS_TYPE& u, int64 v) { return (! operator==(u, v)); } bool operator!=(int64 u, const CLASS_TYPE& v) { return (! operator==(u, v)); } bool operator!=(const CLASS_TYPE& u, uint64 v) { return (! operator==(u, v)); } bool operator!=(uint64 u, const CLASS_TYPE& v) { return (! operator==(u, v)); } bool operator!=(const CLASS_TYPE& u, long v) { return (! operator==(u, v)); } bool operator!=(long u, const CLASS_TYPE& v) { return (! operator==(u, v)); } bool operator!=(const CLASS_TYPE& u, unsigned long v) { return (! operator==(u, v)); } bool operator!=(unsigned long u, const CLASS_TYPE& v) { return (! operator==(u, v)); } // ---------------------------------------------------------------------------- // SECTION: LESS THAN operator: < // ---------------------------------------------------------------------------- // Defined in the sc_signed.cpp and sc_unsigned.cpp. // ---------------------------------------------------------------------------- // SECTION: LESS THAN or EQUAL operator: <= // ---------------------------------------------------------------------------- bool operator<=(const CLASS_TYPE& u, const CLASS_TYPE& v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(const CLASS_TYPE& u, int64 v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(int64 u, const CLASS_TYPE& v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(const CLASS_TYPE& u, uint64 v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(uint64 u, const CLASS_TYPE& v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(const CLASS_TYPE& u, long v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(long u, const CLASS_TYPE& v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(const CLASS_TYPE& u, unsigned long v) { return (operator<(u, v) || operator==(u, v)); } bool operator<=(unsigned long u, const CLASS_TYPE& v) { return (operator<(u, v) || operator==(u, v)); } // ---------------------------------------------------------------------------- // SECTION: GREATER THAN operator: > // ---------------------------------------------------------------------------- bool operator>(const CLASS_TYPE& u, const CLASS_TYPE& v) { return (! (operator<=(u, v))); } bool operator>(const CLASS_TYPE& u, int64 v) { return (! (operator<=(u, v))); } bool operator>(int64 u, const CLASS_TYPE& v) { return (! (operator<=(u, v))); } bool operator>(const CLASS_TYPE& u, uint64 v) { return (! (operator<=(u, v))); } bool operator>(uint64 u, const CLASS_TYPE& v) { return (! (operator<=(u, v))); } bool operator>(const CLASS_TYPE& u, long v) { return (! (operator<=(u, v))); } bool operator>(long u, const CLASS_TYPE& v) { return (! (operator<=(u, v))); } bool operator>(const CLASS_TYPE& u, unsigned long v) { return (! (operator<=(u, v))); } bool operator>(unsigned long u, const CLASS_TYPE& v) { return (! (operator<=(u, v))); } // ---------------------------------------------------------------------------- // SECTION: GREATER THAN or EQUAL operator: >= // ---------------------------------------------------------------------------- bool operator>=(const CLASS_TYPE& u, const CLASS_TYPE& v) { return (! (operator<(u, v))); } bool operator>=(const CLASS_TYPE& u, int64 v) { return (! (operator<(u, v))); } bool operator>=(int64 u, const CLASS_TYPE& v) { return (! (operator<(u, v))); } bool operator>=(const CLASS_TYPE& u, uint64 v) { return (! (operator<(u, v))); } bool operator>=(uint64 u, const CLASS_TYPE& v) { return (! (operator<(u, v))); } bool operator>=(const CLASS_TYPE& u, long v) { return (! (operator<(u, v))); } bool operator>=(long u, const CLASS_TYPE& v) { return (! (operator<(u, v))); } bool operator>=(const CLASS_TYPE& u, unsigned long v) { return (! (operator<(u, v))); } bool operator>=(unsigned long u, const CLASS_TYPE& v) { return (! (operator<(u, v))); } // ---------------------------------------------------------------------------- // SECTION: Public members - Other utils. // ---------------------------------------------------------------------------- // Convert to int64, long, or int. #define TO_INTX(RET_TYPE, UP_RET_TYPE) \ \ if (sgn == SC_ZERO) \ return 0; \ \ int vnd = sc_min((int)DIGITS_PER_ ## UP_RET_TYPE, ndigits); \ \ RET_TYPE v = 0; \ while (--vnd >= 0) \ v = (v << BITS_PER_DIGIT) + digit[vnd]; \ \ if (sgn == SC_NEG) \ return -v; \ else \ return v; int64 CLASS_TYPE::to_int64() const { TO_INTX(int64, INT64); } long CLASS_TYPE::to_long() const { TO_INTX(long, LONG); } int CLASS_TYPE::to_int() const { TO_INTX(int, INT); } // Convert to unsigned int64, unsigned long or unsigned // int. to_uint64, to_ulong, and to_uint have the same body except for // the type of v defined inside. uint64 CLASS_TYPE::to_uint64() const { if (sgn == SC_ZERO) return 0; int vnd = sc_min((int)DIGITS_PER_INT64, ndigits); uint64 v = 0; if (sgn == SC_NEG) { #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif vec_copy(ndigits, d, digit); convert_SM_to_2C_trimmed(IF_SC_SIGNED, sgn, nbits, ndigits, d); while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + d[vnd]; #ifndef SC_MAX_NBITS delete [] d; #endif } else { while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + digit[vnd]; } return v; } unsigned long CLASS_TYPE::to_ulong() const { if (sgn == SC_ZERO) return 0; int vnd = sc_min((int)DIGITS_PER_LONG, ndigits); unsigned long v = 0; if (sgn == SC_NEG) { #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif vec_copy(ndigits, d, digit); convert_SM_to_2C_trimmed(IF_SC_SIGNED, sgn, nbits, ndigits, d); while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + d[vnd]; #ifndef SC_MAX_NBITS delete [] d; #endif } else { while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + digit[vnd]; } return v; } unsigned int CLASS_TYPE::to_uint() const { if (sgn == SC_ZERO) return 0; int vnd = sc_min((int)DIGITS_PER_INT, ndigits); unsigned int v = 0; if (sgn == SC_NEG) { #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif vec_copy(ndigits, d, digit); convert_SM_to_2C_trimmed(IF_SC_SIGNED, sgn, nbits, ndigits, d); while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + d[vnd]; #ifndef SC_MAX_NBITS delete [] d; #endif } else { while (--vnd >= 0) v = (v << BITS_PER_DIGIT) + digit[vnd]; } return v; } // Convert to double. double CLASS_TYPE::to_double() const { if (sgn == SC_ZERO) return (double) 0.0; int vnd = ndigits; double v = 0.0; while (--vnd >= 0) v = v * DIGIT_RADIX + digit[vnd]; if (sgn == SC_NEG) return -v; else return v; } // Return true if the bit i is 1, false otherwise. If i is outside the // bounds, return 1/0 according to the sign of the number by assuming // that the number has infinite length. bool CLASS_TYPE::test(int i) const { #ifdef SC_SIGNED if (check_if_outside(i)) { if (sgn == SC_NEG) return 1; else return 0; } #else if (check_if_outside(i)) return 0; #endif int bit_num = bit_ord(i); int digit_num = digit_ord(i); if (sgn == SC_NEG) { #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif vec_copy(ndigits, d, digit); vec_complement(ndigits, d); bool val = ((d[digit_num] & one_and_zeros(bit_num)) != 0); #ifndef SC_MAX_NBITS delete [] d; #endif return val; } else return ((digit[digit_num] & one_and_zeros(bit_num)) != 0); } // Set the ith bit with 1. void CLASS_TYPE::set(int i) { if (check_if_outside(i)) return; int bit_num = bit_ord(i); int digit_num = digit_ord(i); convert_SM_to_2C(); digit[digit_num] |= one_and_zeros(bit_num); digit[digit_num] &= DIGIT_MASK; // Needed to zero the overflow bits. convert_2C_to_SM(); } // Set the ith bit with 0, i.e., clear the ith bit. void CLASS_TYPE::clear(int i) { if (check_if_outside(i)) return; int bit_num = bit_ord(i); int digit_num = digit_ord(i); convert_SM_to_2C(); digit[digit_num] &= ~(one_and_zeros(bit_num)); digit[digit_num] &= DIGIT_MASK; // Needed to zero the overflow bits. convert_2C_to_SM(); } // Create a mirror image of the number. void CLASS_TYPE::reverse() { convert_SM_to_2C(); vec_reverse(length(), ndigits, digit, length() - 1); convert_2C_to_SM(); } // Get a packed bit representation of the number. void CLASS_TYPE::get_packed_rep(sc_digit *buf) const { int buf_ndigits = (length() - 1) / BITS_PER_DIGIT_TYPE + 1; // Initialize buf to zero. vec_zero(buf_ndigits, buf); if (sgn == SC_ZERO) return; const sc_digit *digit_or_d; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[ndigits]; #endif if (sgn == SC_POS) digit_or_d = digit; else { // If sgn is negative, we have to convert digit to its 2's // complement. Since this function is const, we can not do it on // digit. Since buf doesn't have overflow bits, we cannot also do // it on buf. Thus, we have to do the complementation on a copy of // digit, i.e., on d. vec_copy(ndigits, d, digit); vec_complement(ndigits, d); buf[buf_ndigits - 1] = ~((sc_digit) 0); digit_or_d = d; } // Copy the bits from digit to buf. The division and mod operations // below can be converted to addition/subtraction and comparison // operations at the expense of complicating the code. We can do it // if we see any performance problems. for (int i = length() - 1; i >= 0; --i) { if ((digit_or_d[digit_ord(i)] & one_and_zeros(bit_ord(i))) != 0) // Test. buf[i / BITS_PER_DIGIT_TYPE] |= one_and_zeros(i % BITS_PER_DIGIT_TYPE); // Set. else buf[i / BITS_PER_DIGIT_TYPE] &= ~(one_and_zeros(i % BITS_PER_DIGIT_TYPE)); // Clear. } #ifndef SC_MAX_NBITS delete[] d; #endif } // Set a packed bit representation of the number. void CLASS_TYPE::set_packed_rep(sc_digit *buf) { // Initialize digit to zero. vec_zero(ndigits, digit); // Copy the bits from buf to digit. for (int i = length() - 1; i >= 0; --i) { if ((buf[i / BITS_PER_DIGIT_TYPE] & one_and_zeros(i % BITS_PER_DIGIT_TYPE)) != 0) // Test. digit[digit_ord(i)] |= one_and_zeros(bit_ord(i)); // Set. else digit[digit_ord(i)] &= ~(one_and_zeros(bit_ord(i))); // Clear } convert_2C_to_SM(); } // ---------------------------------------------------------------------------- // SECTION: Private members. // ---------------------------------------------------------------------------- // Create a copy of v with sgn s. CLASS_TYPE::CLASS_TYPE(const CLASS_TYPE& v, small_type s) : sc_value_base(v), sgn(s), nbits(v.nbits), ndigits(v.ndigits), digit() { #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif vec_copy(ndigits, digit, v.digit); } // Create a copy of v where v is of the different type. CLASS_TYPE::CLASS_TYPE(const OTHER_CLASS_TYPE& v, small_type s) : sc_value_base(v), sgn(s), nbits(num_bits(v.nbits)), ndigits(), digit() { #if (IF_SC_SIGNED == 1) ndigits = v.ndigits; #else ndigits = DIV_CEIL(nbits); #endif #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif copy_digits(v.nbits, v.ndigits, v.digit); } // Create a signed number with (s, nb, nd, d) as its attributes (as // defined in class CLASS_TYPE). If alloc is set, delete d. CLASS_TYPE::CLASS_TYPE(small_type s, int nb, int nd, sc_digit *d, bool alloc) : sc_value_base(), sgn(s), nbits(num_bits(nb)), ndigits(), digit() { ndigits = DIV_CEIL(nbits); #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif if (ndigits <= nd) vec_copy(ndigits, digit, d); else vec_copy_and_zero(ndigits, digit, nd, d); #ifndef SC_MAX_NBITS if (alloc) delete [] d; #endif } // This constructor is mainly used in finding a "range" of bits from a // number of type CLASS_TYPE. The function range(l, r) can have // arbitrary precedence between l and r. If l is smaller than r, then // the output is the reverse of range(r, l). CLASS_TYPE::CLASS_TYPE(const CLASS_TYPE* u, int l, int r) : sc_value_base(), sgn(), nbits(), ndigits(), digit() { bool reversed = false; if( l < r ) { reversed = true; int tmp = l; l = r; r = tmp; } // at this point, l >= r // make sure that l and r point to the bits of u r = sc_max( r, 0 ); l = sc_min( l, u->nbits - 1 ); nbits = num_bits( l - r + 1 ); // nbits can still be <= 0 because l and r have just been updated // with the bounds of u. // if u == 0 or the range is out of bounds, return 0 if( u->sgn == SC_ZERO || nbits <= num_bits( 0 ) ) { sgn = SC_ZERO; if( nbits <= num_bits( 0 ) ) { nbits = 1; } ndigits = DIV_CEIL( nbits ); #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif vec_zero( ndigits, digit ); return; } // The rest will be executed if u is not zero. ndigits = DIV_CEIL(nbits); // The number of bits up to and including l and r, respectively. int nl = l + 1; int nr = r + 1; // The indices of the digits that have lth and rth bits, respectively. int left_digit = DIV_CEIL(nl) - 1; int right_digit = DIV_CEIL(nr) - 1; int nd; // The range is performed on the 2's complement representation, so // first get the indices for that. if (u->sgn == SC_NEG) nd = left_digit + 1; else nd = left_digit - right_digit + 1; // Allocate memory for the range. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else digit = new sc_digit[ndigits]; sc_digit *d = new sc_digit[nd]; #endif // Getting the range on the 2's complement representation. if (u->sgn == SC_NEG) { vec_copy(nd, d, u->digit); vec_complement(nd, d); // d = -d; vec_shift_right(nd, d, r, DIGIT_MASK); } else { for (int i = right_digit; i <= left_digit; ++i) d[i - right_digit] = u->digit[i]; vec_shift_right(nd, d, r - right_digit * BITS_PER_DIGIT, 0); } vec_zero(ndigits, digit); if (! reversed) vec_copy(sc_min(nd, ndigits), digit, d); else { // If l < r, i.e., reversed is set, reverse the bits of digit. d // will be used as a temporary store. The following code tries to // minimize the use of bit_ord and digit_ord, which use mod and // div operators. Since these operators are function calls to // standard library routines, they are slow. The main idea in // reversing is "read bits out of d from left to right and push // them into digit using right shifting." // Take care of the last digit. int nd_less_1 = nd - 1; // Deletions will start from the left end and move one position // after each deletion. sc_digit del_mask = one_and_zeros(bit_ord(l - r)); while (del_mask) { vec_shift_right(ndigits, digit, 1, ((d[nd_less_1] & del_mask) != 0)); del_mask >>= 1; } // Take care of the other digits if any. // Insertion to digit will always occur at the left end. sc_digit ins_mask = one_and_zeros(BITS_PER_DIGIT - 1); for (int j = nd - 2; j >= 0; --j) { // j = nd - 2 // Deletions will start from the left end and move one position // after each deletion. del_mask = ins_mask; while (del_mask) { vec_shift_right(ndigits, digit, 1, ((d[j] & del_mask) != 0)); del_mask >>= 1; } } if (u->sgn == SC_NEG) vec_shift_right(ndigits, digit, ndigits * BITS_PER_DIGIT - length(), DIGIT_MASK); else vec_shift_right(ndigits, digit, ndigits * BITS_PER_DIGIT - length(), 0); } // if reversed. convert_2C_to_SM(); #ifndef SC_MAX_NBITS delete [] d; #endif } // This constructor is mainly used in finding a "range" of bits from a // number of type OTHER_CLASS_TYPE. The function range(l, r) can have // arbitrary precedence between l and r. If l is smaller than r, then // the output is the reverse of range(r, l). CLASS_TYPE::CLASS_TYPE(const OTHER_CLASS_TYPE* u, int l, int r) : sc_value_base(), sgn(), nbits(), ndigits(), digit() { bool reversed = false; if( l < r ) { reversed = true; int tmp = l; l = r; r = tmp; } // at this point, l >= r // make sure that l and r point to the bits of u r = sc_max( r, 0 ); l = sc_min( l, u->nbits - 1 ); nbits = num_bits( l - r + 1 ); // nbits can still be <= 0 because l and r have just been updated // with the bounds of u. // if u == 0 or the range is out of bounds, return 0 if( u->sgn == SC_ZERO || nbits <= num_bits( 0 ) ) { sgn = SC_ZERO; if( nbits <= num_bits( 0 ) ) { nbits = 1; } ndigits = DIV_CEIL( nbits ); #ifndef SC_MAX_NBITS digit = new sc_digit[ndigits]; #endif vec_zero( ndigits, digit ); return; } // The rest will be executed if u is not zero. ndigits = DIV_CEIL(nbits); // The number of bits up to and including l and r, respectively. int nl = l + 1; int nr = r + 1; // The indices of the digits that have lth and rth bits, respectively. int left_digit = DIV_CEIL(nl) - 1; int right_digit = DIV_CEIL(nr) - 1; int nd; // The range is performed on the 2's complement representation, so // first get the indices for that. if (u->sgn == SC_NEG) nd = left_digit + 1; else nd = left_digit - right_digit + 1; // Allocate memory for the range. #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else digit = new sc_digit[ndigits]; sc_digit *d = new sc_digit[nd]; #endif // Getting the range on the 2's complement representation. if (u->sgn == SC_NEG) { vec_copy(nd, d, u->digit); vec_complement(nd, d); // d = -d; vec_shift_right(nd, d, r, DIGIT_MASK); } else { for (int i = right_digit; i <= left_digit; ++i) d[i - right_digit] = u->digit[i]; vec_shift_right(nd, d, r - right_digit * BITS_PER_DIGIT, 0); } vec_zero(ndigits, digit); if (! reversed) vec_copy(sc_min(nd, ndigits), digit, d); else { // If l < r, i.e., reversed is set, reverse the bits of digit. d // will be used as a temporary store. The following code tries to // minimize the use of bit_ord and digit_ord, which use mod and // div operators. Since these operators are function calls to // standard library routines, they are slow. The main idea in // reversing is "read bits out of d from left to right and push // them into digit using right shifting." // Take care of the last digit. int nd_less_1 = nd - 1; // Deletions will start from the left end and move one position // after each deletion. sc_digit del_mask = one_and_zeros(bit_ord(l - r)); while (del_mask) { vec_shift_right(ndigits, digit, 1, ((d[nd_less_1] & del_mask) != 0)); del_mask >>= 1; } // Take care of the other digits if any. // Insertion to digit will always occur at the left end. sc_digit ins_mask = one_and_zeros(BITS_PER_DIGIT - 1); for (int j = nd - 2; j >= 0; --j) { // j = nd - 2 // Deletions will start from the left end and move one position // after each deletion. del_mask = ins_mask; while (del_mask) { vec_shift_right(ndigits, digit, 1, ((d[j] & del_mask) != 0)); del_mask >>= 1; } } if (u->sgn == SC_NEG) vec_shift_right(ndigits, digit, ndigits * BITS_PER_DIGIT - length(), DIGIT_MASK); else vec_shift_right(ndigits, digit, ndigits * BITS_PER_DIGIT - length(), 0); } // if reversed. convert_2C_to_SM(); #ifndef SC_MAX_NBITS delete [] d; #endif } // Print out all the physical attributes. void CLASS_TYPE::dump(::std::ostream& os) const { // Save the current setting, and set the base to decimal. ::std::ios::fmtflags old_flags = os.setf(::std::ios::dec, ::std::ios::basefield); os << "width = " << length() << ::std::endl; os << "value = " << *this << ::std::endl; os << "bits = "; int len = length(); for (int i = len - 1; i >= 0; --i) { os << "01"[test(i)]; if (--len % 4 == 0) os << " "; } os << ::std::endl; // Restore old_flags. os.setf(old_flags, ::std::ios::basefield); } // Checks to see if bit_num is out of bounds. bool CLASS_TYPE::check_if_outside(int bit_num) const { if ((bit_num < 0) || (num_bits(bit_num) >= nbits)) { #ifdef DEBUG_SYSTEMC if( bit_num < 0 || bit_num >= nbits ) { std::stringstream msg; msg << CLASS_TYPE_STR "::check_if_outside( int bit_num ) : " "bit_num = " << bit_num << " is out of bounds"; SC_REPORT_WARNING( sc_core::SC_ID_OUT_OF_BOUNDS_, msg.str().c_str() ); } #endif return true; } return false; } // End of file. systemc-2.3.4/src/sysc/datatypes/int/sc_signed.h0000644000175000017500000031165214342422106021544 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_signed.h -- Arbitrary precision signed arithmetic. This file includes the definitions of sc_signed_bitref, sc_signed_subref, and sc_signed classes. The first two classes are proxy classes to reference one bit and a range of bits of a sc_signed number, respectively. An sc_signed number has the sign-magnitude representation internally. However, its interface guarantees a 2's-complement representation. The sign-magnitude representation is chosen because of its efficiency: The sc_signed and sc_unsigned types are optimized for arithmetic rather than bitwise operations. For arithmetic operations, the sign-magnitude representation performs better. The implementations of sc_signed and sc_unsigned classes are almost identical: Most of the member and friend functions are defined in sc_nbcommon.cpp and sc_nbfriends.cpp so that they can be shared by both of these classes. These functions are chosed by defining a few macros before including them such as IF_SC_SIGNED and CLASS_TYPE. Our implementation choices are mostly dictated by performance considerations in that we tried to provide the most efficient sc_signed and sc_unsigned types without compromising their interface. For the behavior of operators, we have two semantics: the old and new. The most important difference between these two semantics is that the old semantics is closer to C/C++ semantics in that the result type of a binary operator on unsigned and signed arguments is unsigned; the new semantics, on the other hand, requires the result type be signed. The new semantics is required by the VSIA C/C++ data types standard. We have implemented the new semantics. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_signed.h,v $ // Revision 1.3 2011/08/24 22:05:46 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.5 2006/05/08 17:50:01 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.4 2006/03/13 20:25:27 acg // Andy Goodrich: Addition of function declarations, e.g., xor_signed_friend() // to keep gcc 4.x happy. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_SIGNED_H #define SC_SIGNED_H #include "sysc/kernel/sc_object.h" #include "sysc/datatypes/misc/sc_value_base.h" #include "sysc/utils/sc_temporary.h" #include "sysc/datatypes/int/sc_length_param.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/int/sc_nbutils.h" #include "sysc/datatypes/int/sc_nbexterns.h" #include "sysc/datatypes/int/sc_unsigned.h" namespace sc_dt { // classes defined in this module class sc_signed_bitref_r; class sc_signed_bitref; class sc_signed_subref_r; class sc_signed_subref; class sc_concatref; class sc_signed; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_int_base; class sc_uint_base; class sc_int_subref_r; class sc_uint_subref_r; class sc_signed; class sc_unsigned; class sc_unsigned_subref_r; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; } // namespace sc_dt // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; } // namespace sc_core namespace sc_dt { // Helper function declarations sc_signed add_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_signed sub_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_signed mul_signed_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_signed div_signed_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_signed mod_signed_friend(small_type us, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_signed and_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_signed or_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_signed xor_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); // friend operator declarations // ARITHMETIC OPERATORS: // ADDition operators: SC_API sc_signed operator + (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator + (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator + (const sc_unsigned& u, int64 v); SC_API sc_signed operator + (const sc_unsigned& u, long v); inline sc_signed operator + (const sc_unsigned& u, int v); SC_API sc_signed operator + (int64 u, const sc_unsigned& v); SC_API sc_signed operator + (long u, const sc_unsigned& v); inline sc_signed operator + (int u, const sc_unsigned& v); SC_API sc_signed operator + (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator + (const sc_signed& u, int64 v); SC_API sc_signed operator + (const sc_signed& u, uint64 v); SC_API sc_signed operator + (const sc_signed& u, long v); SC_API sc_signed operator + (const sc_signed& u, unsigned long v); inline sc_signed operator + (const sc_signed& u, int v); inline sc_signed operator + (const sc_signed& u, unsigned int v); SC_API sc_signed operator + (int64 u, const sc_signed& v); SC_API sc_signed operator + (uint64 u, const sc_signed& v); SC_API sc_signed operator + (long u, const sc_signed& v); SC_API sc_signed operator + (unsigned long u, const sc_signed& v); inline sc_signed operator + (int u, const sc_signed& v); inline sc_signed operator + (unsigned int u, const sc_signed& v); SC_API sc_signed operator + (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator + (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator + (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator + (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator + (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator + (const sc_uint_base& u, const sc_signed& v); // SUBtraction operators: SC_API sc_signed operator - (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator - (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_unsigned& u, int64 v); SC_API sc_signed operator - (const sc_unsigned& u, uint64 v); SC_API sc_signed operator - (const sc_unsigned& u, long v); SC_API sc_signed operator - (const sc_unsigned& u, unsigned long v); inline sc_signed operator - (const sc_unsigned& u, int v); inline sc_signed operator - (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator - (int64 u, const sc_unsigned& v); SC_API sc_signed operator - (uint64 u, const sc_unsigned& v); SC_API sc_signed operator - (long u, const sc_unsigned& v); SC_API sc_signed operator - (unsigned long u, const sc_unsigned& v); inline sc_signed operator - (int u, const sc_unsigned& v); inline sc_signed operator - (unsigned int u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator - (const sc_signed& u, int64 v); SC_API sc_signed operator - (const sc_signed& u, uint64 v); SC_API sc_signed operator - (const sc_signed& u, long v); SC_API sc_signed operator - (const sc_signed& u, unsigned long v); inline sc_signed operator - (const sc_signed& u, int v); inline sc_signed operator - (const sc_signed& u, unsigned int v); SC_API sc_signed operator - (int64 u, const sc_signed& v); SC_API sc_signed operator - (uint64 u, const sc_signed& v); SC_API sc_signed operator - (long u, const sc_signed& v); SC_API sc_signed operator - (unsigned long u, const sc_signed& v); inline sc_signed operator - (int u, const sc_signed& v); inline sc_signed operator - (unsigned int u, const sc_signed& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator - (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator - (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator - (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator - (const sc_uint_base& u, const sc_signed& v); // MULtiplication operators: SC_API sc_signed operator * (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator * (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator * (const sc_unsigned& u, int64 v); SC_API sc_signed operator * (const sc_unsigned& u, long v); inline sc_signed operator * (const sc_unsigned& u, int v); SC_API sc_signed operator * (int64 u, const sc_unsigned& v); SC_API sc_signed operator * (long u, const sc_unsigned& v); inline sc_signed operator * (int u, const sc_unsigned& v); SC_API sc_signed operator * (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator * (const sc_signed& u, int64 v); SC_API sc_signed operator * (const sc_signed& u, uint64 v); SC_API sc_signed operator * (const sc_signed& u, long v); SC_API sc_signed operator * (const sc_signed& u, unsigned long v); inline sc_signed operator * (const sc_signed& u, int v); inline sc_signed operator * (const sc_signed& u, unsigned int v); SC_API sc_signed operator * (int64 u, const sc_signed& v); SC_API sc_signed operator * (uint64 u, const sc_signed& v); SC_API sc_signed operator * (long u, const sc_signed& v); SC_API sc_signed operator * (unsigned long u, const sc_signed& v); inline sc_signed operator * (int u, const sc_signed& v); inline sc_signed operator * (unsigned int u, const sc_signed& v); SC_API sc_signed operator * (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator * (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator * (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator * (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator * (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator * (const sc_uint_base& u, const sc_signed& v); // DIVision operators: SC_API sc_signed operator / (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator / (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator / (const sc_unsigned& u, int64 v); SC_API sc_signed operator / (const sc_unsigned& u, long v); inline sc_signed operator / (const sc_unsigned& u, int v); SC_API sc_signed operator / (int64 u, const sc_unsigned& v); SC_API sc_signed operator / (long u, const sc_unsigned& v); inline sc_signed operator / (int u, const sc_unsigned& v); SC_API sc_signed operator / (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator / (const sc_signed& u, int64 v); SC_API sc_signed operator / (const sc_signed& u, uint64 v); SC_API sc_signed operator / (const sc_signed& u, long v); SC_API sc_signed operator / (const sc_signed& u, unsigned long v); inline sc_signed operator / (const sc_signed& u, int v); inline sc_signed operator / (const sc_signed& u, unsigned int v); SC_API sc_signed operator / (int64 u, const sc_signed& v); SC_API sc_signed operator / (uint64 u, const sc_signed& v); SC_API sc_signed operator / (long u, const sc_signed& v); SC_API sc_signed operator / (unsigned long u, const sc_signed& v); inline sc_signed operator / (int u, const sc_signed& v); inline sc_signed operator / (unsigned int u, const sc_signed& v); SC_API sc_signed operator / (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator / (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator / (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator / (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator / (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator / (const sc_uint_base& u, const sc_signed& v); // MODulo operators: SC_API sc_signed operator % (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator % (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator % (const sc_unsigned& u, int64 v); SC_API sc_signed operator % (const sc_unsigned& u, long v); inline sc_signed operator % (const sc_unsigned& u, int v); SC_API sc_signed operator % (int64 u, const sc_unsigned& v); SC_API sc_signed operator % (long u, const sc_unsigned& v); inline sc_signed operator % (int u, const sc_unsigned& v); SC_API sc_signed operator % (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator % (const sc_signed& u, int64 v); SC_API sc_signed operator % (const sc_signed& u, uint64 v); SC_API sc_signed operator % (const sc_signed& u, long v); SC_API sc_signed operator % (const sc_signed& u, unsigned long v); inline sc_signed operator % (const sc_signed& u, int v); inline sc_signed operator % (const sc_signed& u, unsigned int v); SC_API sc_signed operator % (int64 u, const sc_signed& v); SC_API sc_signed operator % (uint64 u, const sc_signed& v); SC_API sc_signed operator % (long u, const sc_signed& v); SC_API sc_signed operator % (unsigned long u, const sc_signed& v); inline sc_signed operator % (int u, const sc_signed& v); inline sc_signed operator % (unsigned int u, const sc_signed& v); SC_API sc_signed operator % (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator % (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator % (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator % (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator % (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator % (const sc_uint_base& u, const sc_signed& v); // BITWISE OPERATORS: // Bitwise AND operators: SC_API sc_signed operator & (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator & (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator & (const sc_unsigned& u, int64 v); SC_API sc_signed operator & (const sc_unsigned& u, long v); inline sc_signed operator & (const sc_unsigned& u, int v); SC_API sc_signed operator & (int64 u, const sc_unsigned& v); SC_API sc_signed operator & (long u, const sc_unsigned& v); inline sc_signed operator & (int u, const sc_unsigned& v); SC_API sc_signed operator & (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator & (const sc_signed& u, int64 v); SC_API sc_signed operator & (const sc_signed& u, uint64 v); SC_API sc_signed operator & (const sc_signed& u, long v); SC_API sc_signed operator & (const sc_signed& u, unsigned long v); inline sc_signed operator & (const sc_signed& u, int v); inline sc_signed operator & (const sc_signed& u, unsigned int v); SC_API sc_signed operator & (int64 u, const sc_signed& v); SC_API sc_signed operator & (uint64 u, const sc_signed& v); SC_API sc_signed operator & (long u, const sc_signed& v); SC_API sc_signed operator & (unsigned long u, const sc_signed& v); inline sc_signed operator & (int u, const sc_signed& v); inline sc_signed operator & (unsigned int u, const sc_signed& v); SC_API sc_signed operator & (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator & (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator & (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator & (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator & (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator & (const sc_uint_base& u, const sc_signed& v); // Bitwise OR operators: SC_API sc_signed operator | (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator | (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator | (const sc_unsigned& u, int64 v); SC_API sc_signed operator | (const sc_unsigned& u, long v); inline sc_signed operator | (const sc_unsigned& u, int v); SC_API sc_signed operator | (int64 u, const sc_unsigned& v); SC_API sc_signed operator | (long u, const sc_unsigned& v); inline sc_signed operator | (int u, const sc_unsigned& v); SC_API sc_signed operator | (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator | (const sc_signed& u, int64 v); SC_API sc_signed operator | (const sc_signed& u, uint64 v); SC_API sc_signed operator | (const sc_signed& u, long v); SC_API sc_signed operator | (const sc_signed& u, unsigned long v); inline sc_signed operator | (const sc_signed& u, int v); inline sc_signed operator | (const sc_signed& u, unsigned int v); SC_API sc_signed operator | (int64 u, const sc_signed& v); SC_API sc_signed operator | (uint64 u, const sc_signed& v); SC_API sc_signed operator | (long u, const sc_signed& v); SC_API sc_signed operator | (unsigned long u, const sc_signed& v); inline sc_signed operator | (int u, const sc_signed& v); inline sc_signed operator | (unsigned int u, const sc_signed& v); SC_API sc_signed operator | (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator | (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator | (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator | (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator | (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator | (const sc_uint_base& u, const sc_signed& v); // Bitwise XOR operators: SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator ^ (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator ^ (const sc_unsigned& u, int64 v); SC_API sc_signed operator ^ (const sc_unsigned& u, long v); inline sc_signed operator ^ (const sc_unsigned& u, int v); SC_API sc_signed operator ^ (int64 u, const sc_unsigned& v); SC_API sc_signed operator ^ (long u, const sc_unsigned& v); inline sc_signed operator ^ (int u, const sc_unsigned& v); SC_API sc_signed operator ^ (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator ^ (const sc_signed& u, int64 v); SC_API sc_signed operator ^ (const sc_signed& u, uint64 v); SC_API sc_signed operator ^ (const sc_signed& u, long v); SC_API sc_signed operator ^ (const sc_signed& u, unsigned long v); inline sc_signed operator ^ (const sc_signed& u, int v); inline sc_signed operator ^ (const sc_signed& u, unsigned int v); SC_API sc_signed operator ^ (int64 u, const sc_signed& v); SC_API sc_signed operator ^ (uint64 u, const sc_signed& v); SC_API sc_signed operator ^ (long u, const sc_signed& v); SC_API sc_signed operator ^ (unsigned long u, const sc_signed& v); inline sc_signed operator ^ (int u, const sc_signed& v); inline sc_signed operator ^ (unsigned int u, const sc_signed& v); SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator ^ (const sc_int_base& u, const sc_unsigned& v); SC_API sc_signed operator ^ (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator ^ (const sc_signed& u, const sc_uint_base& v); SC_API sc_signed operator ^ (const sc_int_base& u, const sc_signed& v); SC_API sc_signed operator ^ (const sc_uint_base& u, const sc_signed& v); // SHIFT OPERATORS: // LEFT SHIFT operators: SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator << (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator << (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator << (const sc_signed& u, int64 v); SC_API sc_signed operator << (const sc_signed& u, uint64 v); SC_API sc_signed operator << (const sc_signed& u, long v); SC_API sc_signed operator << (const sc_signed& u, unsigned long v); inline sc_signed operator << (const sc_signed& u, int v); inline sc_signed operator << (const sc_signed& u, unsigned int v); SC_API sc_signed operator << (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator << (const sc_signed& u, const sc_uint_base& v); // RIGHT SHIFT operators: SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator >> (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator >> (const sc_signed& u, const sc_signed& v); SC_API sc_signed operator >> (const sc_signed& u, int64 v); SC_API sc_signed operator >> (const sc_signed& u, uint64 v); SC_API sc_signed operator >> (const sc_signed& u, long v); SC_API sc_signed operator >> (const sc_signed& u, unsigned long v); inline sc_signed operator >> (const sc_signed& u, int v); inline sc_signed operator >> (const sc_signed& u, unsigned int v); SC_API sc_signed operator >> (const sc_signed& u, const sc_int_base& v); SC_API sc_signed operator >> (const sc_signed& u, const sc_uint_base& v); // Unary arithmetic operators SC_API sc_signed operator + (const sc_signed& u); SC_API sc_signed operator - (const sc_signed& u); SC_API sc_signed operator - (const sc_unsigned& u); // LOGICAL OPERATORS: // Logical EQUAL operators: SC_API bool operator == (const sc_unsigned& u, const sc_signed& v); SC_API bool operator == (const sc_signed& u, const sc_unsigned& v); SC_API bool operator == (const sc_signed& u, const sc_signed& v); SC_API bool operator == (const sc_signed& u, int64 v); SC_API bool operator == (const sc_signed& u, uint64 v); SC_API bool operator == (const sc_signed& u, long v); SC_API bool operator == (const sc_signed& u, unsigned long v); inline bool operator == (const sc_signed& u, int v); inline bool operator == (const sc_signed& u, unsigned int v); SC_API bool operator == (int64 u, const sc_signed& v); SC_API bool operator == (uint64 u, const sc_signed& v); SC_API bool operator == (long u, const sc_signed& v); SC_API bool operator == (unsigned long u, const sc_signed& v); inline bool operator == (int u, const sc_signed& v); inline bool operator == (unsigned int u, const sc_signed& v); SC_API bool operator == (const sc_signed& u, const sc_int_base& v); SC_API bool operator == (const sc_signed& u, const sc_uint_base& v); SC_API bool operator == (const sc_int_base& u, const sc_signed& v); SC_API bool operator == (const sc_uint_base& u, const sc_signed& v); // Logical NOT_EQUAL operators: SC_API bool operator != (const sc_unsigned& u, const sc_signed& v); SC_API bool operator != (const sc_signed& u, const sc_unsigned& v); SC_API bool operator != (const sc_signed& u, const sc_signed& v); SC_API bool operator != (const sc_signed& u, int64 v); SC_API bool operator != (const sc_signed& u, uint64 v); SC_API bool operator != (const sc_signed& u, long v); SC_API bool operator != (const sc_signed& u, unsigned long v); inline bool operator != (const sc_signed& u, int v); inline bool operator != (const sc_signed& u, unsigned int v); SC_API bool operator != (int64 u, const sc_signed& v); SC_API bool operator != (uint64 u, const sc_signed& v); SC_API bool operator != (long u, const sc_signed& v); SC_API bool operator != (unsigned long u, const sc_signed& v); inline bool operator != (int u, const sc_signed& v); inline bool operator != (unsigned int u, const sc_signed& v); SC_API bool operator != (const sc_signed& u, const sc_int_base& v); SC_API bool operator != (const sc_signed& u, const sc_uint_base& v); SC_API bool operator != (const sc_int_base& u, const sc_signed& v); SC_API bool operator != (const sc_uint_base& u, const sc_signed& v); // Logical LESS_THAN operators: SC_API bool operator < (const sc_unsigned& u, const sc_signed& v); SC_API bool operator < (const sc_signed& u, const sc_unsigned& v); SC_API bool operator < (const sc_signed& u, const sc_signed& v); SC_API bool operator < (const sc_signed& u, int64 v); SC_API bool operator < (const sc_signed& u, uint64 v); SC_API bool operator < (const sc_signed& u, long v); SC_API bool operator < (const sc_signed& u, unsigned long v); inline bool operator < (const sc_signed& u, int v); inline bool operator < (const sc_signed& u, unsigned int v); SC_API bool operator < (int64 u, const sc_signed& v); SC_API bool operator < (uint64 u, const sc_signed& v); SC_API bool operator < (long u, const sc_signed& v); SC_API bool operator < (unsigned long u, const sc_signed& v); inline bool operator < (int u, const sc_signed& v); inline bool operator < (unsigned int u, const sc_signed& v); SC_API bool operator < (const sc_signed& u, const sc_int_base& v); SC_API bool operator < (const sc_signed& u, const sc_uint_base& v); SC_API bool operator < (const sc_int_base& u, const sc_signed& v); SC_API bool operator < (const sc_uint_base& u, const sc_signed& v); // Logical LESS_THAN_AND_EQUAL operators: SC_API bool operator <= (const sc_unsigned& u, const sc_signed& v); SC_API bool operator <= (const sc_signed& u, const sc_unsigned& v); SC_API bool operator <= (const sc_signed& u, const sc_signed& v); SC_API bool operator <= (const sc_signed& u, int64 v); SC_API bool operator <= (const sc_signed& u, uint64 v); SC_API bool operator <= (const sc_signed& u, long v); SC_API bool operator <= (const sc_signed& u, unsigned long v); inline bool operator <= (const sc_signed& u, int v); inline bool operator <= (const sc_signed& u, unsigned int v); SC_API bool operator <= (int64 u, const sc_signed& v); SC_API bool operator <= (uint64 u, const sc_signed& v); SC_API bool operator <= (long u, const sc_signed& v); SC_API bool operator <= (unsigned long u, const sc_signed& v); inline bool operator <= (int u, const sc_signed& v); inline bool operator <= (unsigned int u, const sc_signed& v); SC_API bool operator <= (const sc_signed& u, const sc_int_base& v); SC_API bool operator <= (const sc_signed& u, const sc_uint_base& v); SC_API bool operator <= (const sc_int_base& u, const sc_signed& v); SC_API bool operator <= (const sc_uint_base& u, const sc_signed& v); // Logical GREATER_THAN operators: SC_API bool operator > (const sc_unsigned& u, const sc_signed& v); SC_API bool operator > (const sc_signed& u, const sc_unsigned& v); SC_API bool operator > (const sc_signed& u, const sc_signed& v); SC_API bool operator > (const sc_signed& u, int64 v); SC_API bool operator > (const sc_signed& u, uint64 v); SC_API bool operator > (const sc_signed& u, long v); SC_API bool operator > (const sc_signed& u, unsigned long v); inline bool operator > (const sc_signed& u, int v); inline bool operator > (const sc_signed& u, unsigned int v); SC_API bool operator > (int64 u, const sc_signed& v); SC_API bool operator > (uint64 u, const sc_signed& v); SC_API bool operator > (long u, const sc_signed& v); SC_API bool operator > (unsigned long u, const sc_signed& v); inline bool operator > (int u, const sc_signed& v); inline bool operator > (unsigned int u, const sc_signed& v); SC_API bool operator > (const sc_signed& u, const sc_int_base& v); SC_API bool operator > (const sc_signed& u, const sc_uint_base& v); SC_API bool operator > (const sc_int_base& u, const sc_signed& v); SC_API bool operator > (const sc_uint_base& u, const sc_signed& v); // Logical GREATER_THAN_AND_EQUAL operators: SC_API bool operator >= (const sc_unsigned& u, const sc_signed& v); SC_API bool operator >= (const sc_signed& u, const sc_unsigned& v); SC_API bool operator >= (const sc_signed& u, const sc_signed& v); SC_API bool operator >= (const sc_signed& u, int64 v); SC_API bool operator >= (const sc_signed& u, uint64 v); SC_API bool operator >= (const sc_signed& u, long v); SC_API bool operator >= (const sc_signed& u, unsigned long v); inline bool operator >= (const sc_signed& u, int v); inline bool operator >= (const sc_signed& u, unsigned int v); SC_API bool operator >= (int64 u, const sc_signed& v); SC_API bool operator >= (uint64 u, const sc_signed& v); SC_API bool operator >= (long u, const sc_signed& v); SC_API bool operator >= (unsigned long u, const sc_signed& v); inline bool operator >= (int u, const sc_signed& v); inline bool operator >= (unsigned int u, const sc_signed& v); SC_API bool operator >= (const sc_signed& u, const sc_int_base& v); SC_API bool operator >= (const sc_signed& u, const sc_uint_base& v); SC_API bool operator >= (const sc_int_base& u, const sc_signed& v); SC_API bool operator >= (const sc_uint_base& u, const sc_signed& v); // Bitwise NOT operator (unary). SC_API sc_signed operator ~ (const sc_signed& u); // ---------------------------------------------------------------------------- // CLASS : sc_signed_bitref_r // // Proxy class for sc_signed bit selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_signed_bitref_r : public sc_value_base { friend class sc_signed; protected: // constructor sc_signed_bitref_r() : sc_value_base(), m_index(0), m_obj_p(0) {} void initialize( const sc_signed* obj_p, int index_ ) { m_index = index_; m_obj_p = ( const_cast( obj_p ) ); } public: // destructor virtual ~sc_signed_bitref_r() {} // copy constructor sc_signed_bitref_r( const sc_signed_bitref_r& a ) : sc_value_base(a), m_index( a.m_index ), m_obj_p( a.m_obj_p ) {} // capacity int length() const { return 1; } // implicit conversion to bool operator uint64 () const; bool operator ! () const; bool operator ~ () const; // explicit conversions bool value() const { return operator uint64(); } bool to_bool() const { return operator uint64(); } // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return 1; } virtual uint64 concat_get_uint64() const { return (uint64)operator uint64(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; dst_p[word_i] &= ~bit_mask; return false; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); bool result; // True if non-zero. int word_i = low_i / BITS_PER_DIGIT; if ( operator uint64() ) { dst_p[word_i] |= bit_mask; result = true; } else { dst_p[word_i] &= ~bit_mask; result = false; } return result; } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_bool(); } protected: int m_index; // Bit to be selected. sc_signed* m_obj_p; // Target of this bit selection. private: // disabled const sc_signed_bitref_r& operator = ( const sc_signed_bitref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_signed_bitref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_signed_bitref // // Proxy class for sc_signed bit selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_signed_bitref : public sc_signed_bitref_r { friend class sc_signed; friend class sc_core::sc_vpool; // constructor protected: sc_signed_bitref() : sc_signed_bitref_r() {} public: // copy constructor sc_signed_bitref( const sc_signed_bitref& a ) : sc_signed_bitref_r( a ) {} // assignment operators const sc_signed_bitref& operator = ( const sc_signed_bitref_r& ); const sc_signed_bitref& operator = ( const sc_signed_bitref& ); const sc_signed_bitref& operator = ( bool ); const sc_signed_bitref& operator &= ( bool ); const sc_signed_bitref& operator |= ( bool ); const sc_signed_bitref& operator ^= ( bool ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_signed_bitref& ); // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref_r // // Proxy class for sc_signed part selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_signed_subref_r : public sc_value_base { friend class sc_signed; friend class sc_signed_signal; friend class sc_unsigned; protected: // constructor sc_signed_subref_r() : sc_value_base(), m_left(0), m_obj_p(0), m_right(0) {} void initialize( const sc_signed* obj_p, int left_, int right_ ) { m_obj_p = ( const_cast( obj_p )); m_left = left_; m_right = right_; } public: // destructor virtual ~sc_signed_subref_r() {} // copy constructor sc_signed_subref_r( const sc_signed_subref_r& a ) : sc_value_base(a), m_left( a.m_left ), m_obj_p( a.m_obj_p ), m_right( a.m_right ) {} // capacity int length() const { return m_left >= m_right ? (m_left-m_right+1) : (m_right-m_left+1 ); } // implicit conversion to sc_unsigned operator sc_unsigned () const; // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return m_left - m_right + 1; } virtual uint64 concat_get_uint64() const; virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; // reduce methods bool and_reduce() const; bool nand_reduce() const; bool or_reduce() const; bool nor_reduce() const; bool xor_reduce() const ; bool xnor_reduce() const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } protected: int m_left; // Left-most bit in this part selection. sc_signed* m_obj_p; // Target of this part selection. int m_right; // Right-most bit in this part selection. private: const sc_signed_subref_r& operator = ( const sc_signed_subref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_signed_subref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref // // Proxy class for sc_signed part selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_signed_subref : public sc_signed_subref_r { friend class sc_signed; friend class sc_core::sc_vpool; // constructor sc_signed_subref() : sc_signed_subref_r() {} public: // copy constructor sc_signed_subref( const sc_signed_subref& a ) : sc_signed_subref_r( a ) {} // assignment operators const sc_signed_subref& operator = ( const sc_signed_subref_r& a ); const sc_signed_subref& operator = ( const sc_signed_subref& a ); const sc_signed_subref& operator = ( const sc_signed& a ); const sc_signed_subref& operator = ( const sc_unsigned_subref_r& a ); const sc_signed_subref& operator = ( const sc_unsigned& a ); template< class T > const sc_signed_subref& operator = ( const sc_generic_base& a ) { sc_unsigned temp( length() ); a->to_sc_unsigned(temp); return operator = (temp); } const sc_signed_subref& operator = ( const char* a ); const sc_signed_subref& operator = ( unsigned long a ); const sc_signed_subref& operator = ( long a ); const sc_signed_subref& operator = ( unsigned int a ) { return operator = ( (unsigned long) a ); } const sc_signed_subref& operator = ( int a ) { return operator = ( (long) a ); } const sc_signed_subref& operator = ( uint64 a ); const sc_signed_subref& operator = ( int64 a ); const sc_signed_subref& operator = ( double a ); const sc_signed_subref& operator = ( const sc_int_base& a ); const sc_signed_subref& operator = ( const sc_uint_base& a ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_signed_subref& ); // ---------------------------------------------------------------------------- // CLASS : sc_signed // // Arbitrary precision signed number. // ---------------------------------------------------------------------------- class SC_API sc_signed : public sc_value_base { friend class sc_concatref; friend class sc_signed_bitref_r; friend class sc_signed_bitref; friend class sc_signed_subref_r; friend class sc_signed_subref; friend class sc_unsigned; friend class sc_unsigned_subref; // Needed for types using sc_signed. typedef bool elemtype; void invalid_init( const char* type_name, int nb ) const; public: // constructors explicit sc_signed( int nb = sc_length_param().len() ); sc_signed( const sc_signed& v ); sc_signed( const sc_unsigned& v ); template explicit sc_signed( const sc_generic_base& v ); explicit sc_signed( const sc_bv_base& v ); explicit sc_signed( const sc_lv_base& v ); explicit sc_signed( const sc_int_subref_r& v ); explicit sc_signed( const sc_uint_subref_r& v ); explicit sc_signed( const sc_signed_subref_r& v ); explicit sc_signed( const sc_unsigned_subref_r& v ); // assignment operators const sc_signed& operator = (const sc_signed& v); const sc_signed& operator = (const sc_signed_subref_r& a ); template< class T > const sc_signed& operator = ( const sc_generic_base& a ) { a->to_sc_signed(*this); return *this; } const sc_signed& operator = (const sc_unsigned& v); const sc_signed& operator = (const sc_unsigned_subref_r& a ); const sc_signed& operator = (const char* v); const sc_signed& operator = (int64 v); const sc_signed& operator = (uint64 v); const sc_signed& operator = (long v); const sc_signed& operator = (unsigned long v); const sc_signed& operator = (int v) { return operator=((long) v); } const sc_signed& operator = (unsigned int v) { return operator=((unsigned long) v); } const sc_signed& operator = (double v); const sc_signed& operator = (const sc_int_base& v); const sc_signed& operator = (const sc_uint_base& v); const sc_signed& operator = ( const sc_bv_base& ); const sc_signed& operator = ( const sc_lv_base& ); #ifdef SC_INCLUDE_FX const sc_signed& operator = ( const sc_fxval& ); const sc_signed& operator = ( const sc_fxval_fast& ); const sc_signed& operator = ( const sc_fxnum& ); const sc_signed& operator = ( const sc_fxnum_fast& ); #endif // destructor virtual ~sc_signed() { #ifndef SC_MAX_NBITS delete [] digit; #endif } // Concatenation support: sc_digit* get_raw() const { return digit; } virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return nbits; } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const; virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // Increment operators. sc_signed& operator ++ (); const sc_signed operator ++ (int); // Decrement operators. sc_signed& operator -- (); const sc_signed operator -- (int); // bit selection inline void check_index( int i ) const { if ( i < 0 || i >= nbits ) invalid_index(i); } void invalid_index( int i ) const; sc_signed_bitref& operator [] ( int i ) { check_index(i); sc_signed_bitref* result_p = sc_signed_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } const sc_signed_bitref_r& operator [] ( int i ) const { check_index(i); sc_signed_bitref* result_p = sc_signed_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } sc_signed_bitref& bit( int i ) { check_index(i); sc_signed_bitref* result_p = sc_signed_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } const sc_signed_bitref_r& bit( int i ) const { check_index(i); sc_signed_bitref* result_p = sc_signed_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } // part selection // Subref operators. Help access the range of bits from the ith to // jth. These indices have arbitrary precedence with respect to each // other, i.e., we can have i <= j or i > j. Note the equivalence // between range(i, j) and operator(i, j). Also note that // operator(i, i) returns a signed number that corresponds to the // bit operator[i], so these two forms are not the same. inline void check_range( int l, int r ) const { if ( l < r ) { if ( l < 0 || r >= nbits ) invalid_range(l,r); } else { if ( r < 0 || l >= nbits ) invalid_range(l,r); } } void invalid_range( int l, int r ) const; sc_signed_subref& range( int i, int j ) { check_range( i, j ); sc_signed_subref* result_p = sc_signed_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } const sc_signed_subref_r& range( int i, int j ) const { check_range( i, j ); sc_signed_subref* result_p = sc_signed_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } sc_signed_subref& operator () ( int i, int j ) { check_range( i, j ); sc_signed_subref* result_p = sc_signed_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } const sc_signed_subref_r& operator () ( int i, int j ) const { check_range( i, j ); sc_signed_subref* result_p = sc_signed_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; #ifdef SC_DT_DEPRECATED int to_signed() const { return to_int(); } unsigned int to_unsigned() const { return to_uint(); } #endif // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // Print functions. dump prints the internals of the class. void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } void scan( ::std::istream& is = ::std::cin ); void dump( ::std::ostream& os = ::std::cout ) const; // Functions to find various properties. int length() const { return nbits; } // Bit width. bool iszero() const; // Is the number zero? bool sign() const; // Sign. // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // Functions to access individual bits. bool test(int i) const; // Is the ith bit 0 or 1? void set(int i); // Set the ith bit to 1. void clear(int i); // Set the ith bit to 0. void set(int i, bool v) // Set the ith bit to v. { if (v) set(i); else clear(i); } void invert(int i) // Negate the ith bit. { if (test(i)) clear(i); else set(i); } // Make the number equal to its mirror image. void reverse(); // Get/set a packed bit representation of the number. void get_packed_rep(sc_digit *buf) const; void set_packed_rep(sc_digit *buf); /* The comparison of the old and new semantics are as follows: Let s = sc_signed, u = sc_unsigned, un = { uint64, unsigned long, unsigned int }, sn = { int64, long, int, char* }, and OP = { +, -, *, /, % }. Old semantics: New semantics: u OP u -> u u OP u -> u s OP u -> u s OP u -> s u OP s -> u u OP s -> s s OP s -> s s OP s -> s u OP un = un OP u -> u u OP un = un OP u -> u u OP sn = sn OP u -> u u OP sn = sn OP u -> s s OP un = un OP s -> s s OP un = un OP s -> s s OP sn = sn OP s -> s s OP sn = sn OP s -> s In the new semantics, the result is u if both operands are u; the result is s otherwise. The only exception is subtraction. The result of a subtraction is always s. The old semantics is like C/C++ semantics on integer types; the new semantics is due to the VSIA C/C++ data types standard. */ // ARITHMETIC OPERATORS: // ADDition operators: friend SC_API sc_signed operator + (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator + (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator + (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator + (const sc_unsigned& u, long v); friend sc_signed operator + (const sc_unsigned& u, int v) { return operator+(u, (long) v); } friend SC_API sc_signed operator + (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator + (long u, const sc_unsigned& v); friend sc_signed operator + (int u, const sc_unsigned& v) { return operator+((long) u, v); } friend SC_API sc_signed operator + (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator + (const sc_signed& u, int64 v); friend SC_API sc_signed operator + (const sc_signed& u, uint64 v); friend SC_API sc_signed operator + (const sc_signed& u, long v); friend SC_API sc_signed operator + (const sc_signed& u, unsigned long v); friend sc_signed operator + (const sc_signed& u, int v) { return operator+(u, (long) v); } friend sc_signed operator + (const sc_signed& u, unsigned int v) { return operator+(u, (unsigned long) v); } friend SC_API sc_signed operator + (int64 u, const sc_signed& v); friend SC_API sc_signed operator + (uint64 u, const sc_signed& v); friend SC_API sc_signed operator + (long u, const sc_signed& v); friend SC_API sc_signed operator + (unsigned long u, const sc_signed& v); friend sc_signed operator + (int u, const sc_signed& v) { return operator+((long) u, v); } friend sc_signed operator + (unsigned int u, const sc_signed& v) { return operator+((unsigned long) u, v); } const sc_signed& operator += (const sc_signed& v); const sc_signed& operator += (const sc_unsigned& v); const sc_signed& operator += (int64 v); const sc_signed& operator += (uint64 v); const sc_signed& operator += (long v); const sc_signed& operator += (unsigned long v); const sc_signed& operator += (int v) { return operator+=((long) v); } const sc_signed& operator += (unsigned int v) { return operator+=((unsigned long) v); } friend SC_API sc_signed operator + (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator + (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator + (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator + (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator + (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator + (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator += (const sc_int_base& v); const sc_signed& operator += (const sc_uint_base& v); // SUBtraction operators: friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator - (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator - (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator - (const sc_unsigned& u, long v); friend SC_API sc_signed operator - (const sc_unsigned& u, unsigned long v); friend sc_signed operator - (const sc_unsigned& u, int v) { return operator-(u, (long) v); } friend sc_signed operator - (const sc_unsigned& u, unsigned int v) { return operator-(u, (unsigned long) v); } friend SC_API sc_signed operator - (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator - (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator - (long u, const sc_unsigned& v); friend SC_API sc_signed operator - (unsigned long u, const sc_unsigned& v); friend sc_signed operator - (int u, const sc_unsigned& v) { return operator-((long) u, v); } friend sc_signed operator - (unsigned int u, const sc_unsigned& v) { return operator-((unsigned long) u, v); } friend SC_API sc_signed operator - (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator - (const sc_signed& u, int64 v); friend SC_API sc_signed operator - (const sc_signed& u, uint64 v); friend SC_API sc_signed operator - (const sc_signed& u, long v); friend SC_API sc_signed operator - (const sc_signed& u, unsigned long v); friend sc_signed operator - (const sc_signed& u, int v) { return operator-(u, (long) v); } friend sc_signed operator - (const sc_signed& u, unsigned int v) { return operator-(u, (unsigned long) v); } friend SC_API sc_signed operator - (int64 u, const sc_signed& v); friend SC_API sc_signed operator - (uint64 u, const sc_signed& v); friend SC_API sc_signed operator - (long u, const sc_signed& v); friend SC_API sc_signed operator - (unsigned long u, const sc_signed& v); friend sc_signed operator - (int u, const sc_signed& v) { return operator-((long) u, v); } friend sc_signed operator - (unsigned int u, const sc_signed& v) { return operator-((unsigned long) u, v); } const sc_signed& operator -= (const sc_signed& v); const sc_signed& operator -= (const sc_unsigned& v); const sc_signed& operator -= (int64 v); const sc_signed& operator -= (uint64 v); const sc_signed& operator -= (long v); const sc_signed& operator -= (unsigned long v); const sc_signed& operator -= (int v) { return operator -= ((long) v); } const sc_signed& operator -= (unsigned int v) { return operator -= ((unsigned long) v); } friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator - (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator - (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator - (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator - (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator -= (const sc_int_base& v); const sc_signed& operator -= (const sc_uint_base& v); // MULtiplication operators: friend SC_API sc_signed operator * (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator * (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator * (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator * (const sc_unsigned& u, long v); friend sc_signed operator * (const sc_unsigned& u, int v) { return operator*(u, (long) v); } friend SC_API sc_signed operator * (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator * (long u, const sc_unsigned& v); friend sc_signed operator * (int u, const sc_unsigned& v) { return operator*((long) u, v); } friend SC_API sc_signed operator * (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator * (const sc_signed& u, int64 v); friend SC_API sc_signed operator * (const sc_signed& u, uint64 v); friend SC_API sc_signed operator * (const sc_signed& u, long v); friend SC_API sc_signed operator * (const sc_signed& u, unsigned long v); friend sc_signed operator * (const sc_signed& u, int v) { return operator*(u, (long) v); } friend sc_signed operator * (const sc_signed& u, unsigned int v) { return operator*(u, (unsigned long) v); } friend SC_API sc_signed operator * (int64 u, const sc_signed& v); friend SC_API sc_signed operator * (uint64 u, const sc_signed& v); friend SC_API sc_signed operator * (long u, const sc_signed& v); friend SC_API sc_signed operator * (unsigned long u, const sc_signed& v); friend sc_signed operator * (int u, const sc_signed& v) { return operator*((long) u, v); } friend sc_signed operator * (unsigned int u, const sc_signed& v) { return operator*((unsigned long) u, v); } const sc_signed& operator *= (const sc_signed& v); const sc_signed& operator *= (const sc_unsigned& v); const sc_signed& operator *= (int64 v); const sc_signed& operator *= (uint64 v); const sc_signed& operator *= (long v); const sc_signed& operator *= (unsigned long v); const sc_signed& operator *= (int v) { return operator*=((long) v); } const sc_signed& operator *= (unsigned int v) { return operator*=((unsigned long) v); } friend SC_API sc_signed operator * (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator * (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator * (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator * (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator * (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator * (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator *= (const sc_int_base& v); const sc_signed& operator *= (const sc_uint_base& v); // DIVision operators: friend SC_API sc_signed operator / (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator / (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator / (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator / (const sc_unsigned& u, long v); friend sc_signed operator / (const sc_unsigned& u, int v) { return operator/(u, (long) v); } friend SC_API sc_signed operator / (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator / (long u, const sc_unsigned& v); friend sc_signed operator / (int u, const sc_unsigned& v) { return operator/((long) u, v); } friend SC_API sc_signed operator / (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator / (const sc_signed& u, int64 v); friend SC_API sc_signed operator / (const sc_signed& u, uint64 v); friend SC_API sc_signed operator / (const sc_signed& u, long v); friend SC_API sc_signed operator / (const sc_signed& u, unsigned long v); friend sc_signed operator / (const sc_signed& u, int v) { return operator/(u, (long) v); } friend sc_signed operator / (const sc_signed& u, unsigned int v) { return operator/(u, (unsigned long) v); } friend SC_API sc_signed operator / (int64 u, const sc_signed& v); friend SC_API sc_signed operator / (uint64 u, const sc_signed& v); friend SC_API sc_signed operator / (long u, const sc_signed& v); friend SC_API sc_signed operator / (unsigned long u, const sc_signed& v); friend sc_signed operator / (int u, const sc_signed& v) { return operator/((long) u, v); } friend sc_signed operator / (unsigned int u, const sc_signed& v) { return operator/((unsigned long) u, v); } const sc_signed& operator /= (const sc_signed& v); const sc_signed& operator /= (const sc_unsigned& v); const sc_signed& operator /= (int64 v); const sc_signed& operator /= (uint64 v); const sc_signed& operator /= (long v); const sc_signed& operator /= (unsigned long v); const sc_signed& operator /= (int v) { return operator/=((long) v); } const sc_signed& operator /= (unsigned int v) { return operator/=((unsigned long) v); } friend SC_API sc_signed operator / (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator / (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator / (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator / (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator / (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator / (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator /= (const sc_int_base& v); const sc_signed& operator /= (const sc_uint_base& v); // MODulo operators: friend SC_API sc_signed operator % (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator % (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator % (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator % (const sc_unsigned& u, long v); friend sc_signed operator % (const sc_unsigned& u, int v) { return operator%(u, (long) v); } friend SC_API sc_signed operator % (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator % (long u, const sc_unsigned& v); friend sc_signed operator % (int u, const sc_unsigned& v) { return operator%((long) u, v); } friend SC_API sc_signed operator % (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator % (const sc_signed& u, int64 v); friend SC_API sc_signed operator % (const sc_signed& u, uint64 v); friend SC_API sc_signed operator % (const sc_signed& u, long v); friend SC_API sc_signed operator % (const sc_signed& u, unsigned long v); friend sc_signed operator % (const sc_signed& u, int v) { return operator%(u, (long) v); } friend sc_signed operator % (const sc_signed& u, unsigned int v) { return operator%(u, (unsigned long) v); } friend SC_API sc_signed operator % (int64 u, const sc_signed& v); friend SC_API sc_signed operator % (uint64 u, const sc_signed& v); friend SC_API sc_signed operator % (long u, const sc_signed& v); friend SC_API sc_signed operator % (unsigned long u, const sc_signed& v); friend sc_signed operator % (int u, const sc_signed& v) { return operator%((long) u, v); } friend sc_signed operator % (unsigned int u, const sc_signed& v) { return operator%((unsigned long) u, v); } const sc_signed& operator %= (const sc_signed& v); const sc_signed& operator %= (const sc_unsigned& v); const sc_signed& operator %= (int64 v); const sc_signed& operator %= (uint64 v); const sc_signed& operator %= (long v); const sc_signed& operator %= (unsigned long v); const sc_signed& operator %= (int v) { return operator%=((long) v); } const sc_signed& operator %= (unsigned int v) { return operator%=((unsigned long) v); } friend SC_API sc_signed operator % (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator % (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator % (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator % (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator % (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator % (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator %= (const sc_int_base& v); const sc_signed& operator %= (const sc_uint_base& v); // BITWISE OPERATORS: // Bitwise AND operators: friend SC_API sc_signed operator & (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator & (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator & (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator & (const sc_unsigned& u, long v); friend sc_signed operator & (const sc_unsigned& u, int v) { return operator&(u, (long) v); } friend SC_API sc_signed operator & (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator & (long u, const sc_unsigned& v); friend sc_signed operator & (int u, const sc_unsigned& v) { return operator&((long) u, v); } friend SC_API sc_signed operator & (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator & (const sc_signed& u, int64 v); friend SC_API sc_signed operator & (const sc_signed& u, uint64 v); friend SC_API sc_signed operator & (const sc_signed& u, long v); friend SC_API sc_signed operator & (const sc_signed& u, unsigned long v); friend sc_signed operator & (const sc_signed& u, int v) { return operator&(u, (long) v); } friend sc_signed operator & (const sc_signed& u, unsigned int v) { return operator&(u, (unsigned long) v); } friend SC_API sc_signed operator & (int64 u, const sc_signed& v); friend SC_API sc_signed operator & (uint64 u, const sc_signed& v); friend SC_API sc_signed operator & (long u, const sc_signed& v); friend SC_API sc_signed operator & (unsigned long u, const sc_signed& v); friend sc_signed operator & (int u, const sc_signed& v) { return operator&((long) u, v); } friend sc_signed operator & (unsigned int u, const sc_signed& v) { return operator&((unsigned long) u, v); } const sc_signed& operator &= (const sc_signed& v); const sc_signed& operator &= (const sc_unsigned& v); const sc_signed& operator &= (int64 v); const sc_signed& operator &= (uint64 v); const sc_signed& operator &= (long v); const sc_signed& operator &= (unsigned long v); const sc_signed& operator &= (int v) { return operator&=((long) v); } const sc_signed& operator &= (unsigned int v) { return operator&=((unsigned long) v); } friend SC_API sc_signed operator & (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator & (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator & (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator & (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator & (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator & (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator &= (const sc_int_base& v); const sc_signed& operator &= (const sc_uint_base& v); // Bitwise OR operators: friend SC_API sc_signed operator | (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator | (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator | (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator | (const sc_unsigned& u, long v); friend sc_signed operator | (const sc_unsigned& u, int v) { return operator|(u, (long) v); } friend SC_API sc_signed operator | (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator | (long u, const sc_unsigned& v); friend sc_signed operator | (int u, const sc_unsigned& v) { return operator|((long) u, v); } friend SC_API sc_signed operator | (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator | (const sc_signed& u, int64 v); friend SC_API sc_signed operator | (const sc_signed& u, uint64 v); friend SC_API sc_signed operator | (const sc_signed& u, long v); friend SC_API sc_signed operator | (const sc_signed& u, unsigned long v); friend sc_signed operator | (const sc_signed& u, int v) { return operator|(u, (long) v); } friend sc_signed operator | (const sc_signed& u, unsigned int v) { return operator|(u, (unsigned long) v); } friend SC_API sc_signed operator | (int64 u, const sc_signed& v); friend SC_API sc_signed operator | (uint64 u, const sc_signed& v); friend SC_API sc_signed operator | (long u, const sc_signed& v); friend SC_API sc_signed operator | (unsigned long u, const sc_signed& v); friend sc_signed operator | (int u, const sc_signed& v) { return operator|((long) u, v); } friend sc_signed operator | (unsigned int u, const sc_signed& v) { return operator|((unsigned long) u, v); } const sc_signed& operator |= (const sc_signed& v); const sc_signed& operator |= (const sc_unsigned& v); const sc_signed& operator |= (int64 v); const sc_signed& operator |= (uint64 v); const sc_signed& operator |= (long v); const sc_signed& operator |= (unsigned long v); const sc_signed& operator |= (int v) { return operator|=((long) v); } const sc_signed& operator |= (unsigned int v) { return operator|=((unsigned long) v); } friend SC_API sc_signed operator | (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator | (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator | (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator | (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator | (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator | (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator |= (const sc_int_base& v); const sc_signed& operator |= (const sc_uint_base& v); // Bitwise XOR operators: friend SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator ^ (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, long v); friend sc_signed operator ^ (const sc_unsigned& u, int v) { return operator^(u, (long) v); } friend SC_API sc_signed operator ^ (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (long u, const sc_unsigned& v); friend sc_signed operator ^ (int u, const sc_unsigned& v) { return operator^((long) u, v); } friend SC_API sc_signed operator ^ (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator ^ (const sc_signed& u, int64 v); friend SC_API sc_signed operator ^ (const sc_signed& u, uint64 v); friend SC_API sc_signed operator ^ (const sc_signed& u, long v); friend SC_API sc_signed operator ^ (const sc_signed& u, unsigned long v); friend sc_signed operator ^ (const sc_signed& u, int v) { return operator^(u, (long) v); } friend sc_signed operator ^ (const sc_signed& u, unsigned int v) { return operator^(u, (unsigned long) v); } friend SC_API sc_signed operator ^ (int64 u, const sc_signed& v); friend SC_API sc_signed operator ^ (uint64 u, const sc_signed& v); friend SC_API sc_signed operator ^ (long u, const sc_signed& v); friend SC_API sc_signed operator ^ (unsigned long u, const sc_signed& v); friend sc_signed operator ^ (int u, const sc_signed& v) { return operator^((long) u, v); } friend sc_signed operator ^ (unsigned int u, const sc_signed& v) { return operator^((unsigned long) u, v); } const sc_signed& operator ^= (const sc_signed& v); const sc_signed& operator ^= (const sc_unsigned& v); const sc_signed& operator ^= (int64 v); const sc_signed& operator ^= (uint64 v); const sc_signed& operator ^= (long v); const sc_signed& operator ^= (unsigned long v); const sc_signed& operator ^= (int v) { return operator^=((long) v); } const sc_signed& operator ^= (unsigned int v) { return operator^=((unsigned long) v); } friend SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator ^ (const sc_int_base& u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator ^ (const sc_signed& u, const sc_uint_base& v); friend SC_API sc_signed operator ^ (const sc_int_base& u, const sc_signed& v); friend SC_API sc_signed operator ^ (const sc_uint_base& u, const sc_signed& v); const sc_signed& operator ^= (const sc_int_base& v); const sc_signed& operator ^= (const sc_uint_base& v); // SHIFT OPERATORS: // LEFT SHIFT operators: friend SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator << (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator << (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator << (const sc_signed& u, int64 v); friend SC_API sc_signed operator << (const sc_signed& u, uint64 v); friend SC_API sc_signed operator << (const sc_signed& u, long v); friend SC_API sc_signed operator << (const sc_signed& u, unsigned long v); friend sc_signed operator << (const sc_signed& u, int v) { return operator<<(u, (long) v); } friend sc_signed operator << (const sc_signed& u, unsigned int v) { return operator<<(u, (unsigned long) v); } const sc_signed& operator <<= (const sc_signed& v); const sc_signed& operator <<= (const sc_unsigned& v); const sc_signed& operator <<= (int64 v); const sc_signed& operator <<= (uint64 v); const sc_signed& operator <<= (long v); const sc_signed& operator <<= (unsigned long v); const sc_signed& operator <<= (int v) { return operator<<=((long) v); } const sc_signed& operator <<= (unsigned int v) { return operator<<=((unsigned long) v); } friend SC_API sc_signed operator << (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator << (const sc_signed& u, const sc_uint_base& v); const sc_signed& operator <<= (const sc_int_base& v); const sc_signed& operator <<= (const sc_uint_base& v); // RIGHT SHIFT operators: friend SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator >> (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator >> (const sc_signed& u, const sc_signed& v); friend SC_API sc_signed operator >> (const sc_signed& u, int64 v); friend SC_API sc_signed operator >> (const sc_signed& u, uint64 v); friend SC_API sc_signed operator >> (const sc_signed& u, long v); friend SC_API sc_signed operator >> (const sc_signed& u, unsigned long v); friend sc_signed operator >> (const sc_signed& u, int v) { return operator>>(u, (long) v); } friend sc_signed operator >> (const sc_signed& u, unsigned int v) { return operator>>(u, (unsigned long) v); } const sc_signed& operator >>= (const sc_signed& v); const sc_signed& operator >>= (const sc_unsigned& v); const sc_signed& operator >>= (int64 v); const sc_signed& operator >>= (uint64 v); const sc_signed& operator >>= (long v); const sc_signed& operator >>= (unsigned long v); const sc_signed& operator >>= (int v) { return operator>>=((long) v); } const sc_signed& operator >>= (unsigned int v) { return operator>>=((unsigned long) v); } friend SC_API sc_signed operator >> (const sc_signed& u, const sc_int_base& v); friend SC_API sc_signed operator >> (const sc_signed& u, const sc_uint_base& v); const sc_signed& operator >>= (const sc_int_base& v); const sc_signed& operator >>= (const sc_uint_base& v); // Unary arithmetic operators friend SC_API sc_signed operator + (const sc_signed& u); friend SC_API sc_signed operator - (const sc_signed& u); friend SC_API sc_signed operator - (const sc_unsigned& u); // LOGICAL OPERATORS: // Logical EQUAL operators: friend SC_API bool operator == (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator == (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator == (const sc_signed& u, const sc_signed& v); friend SC_API bool operator == (const sc_signed& u, int64 v); friend SC_API bool operator == (const sc_signed& u, uint64 v); friend SC_API bool operator == (const sc_signed& u, long v); friend SC_API bool operator == (const sc_signed& u, unsigned long v); friend bool operator == (const sc_signed& u, int v) { return operator==(u, (long) v); } friend bool operator == (const sc_signed& u, unsigned int v) { return operator==(u, (unsigned long) v); } friend SC_API bool operator == (int64 u, const sc_signed& v); friend SC_API bool operator == (uint64 u, const sc_signed& v); friend SC_API bool operator == (long u, const sc_signed& v); friend SC_API bool operator == (unsigned long u, const sc_signed& v); friend bool operator == (int u, const sc_signed& v) { return operator==((long) u, v); } friend bool operator == (unsigned int u, const sc_signed& v) { return operator==((unsigned long) u, v); } friend SC_API bool operator == (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator == (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator == (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator == (const sc_uint_base& u, const sc_signed& v); // Logical NOT_EQUAL operators: friend SC_API bool operator != (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator != (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator != (const sc_signed& u, const sc_signed& v); friend SC_API bool operator != (const sc_signed& u, int64 v); friend SC_API bool operator != (const sc_signed& u, uint64 v); friend SC_API bool operator != (const sc_signed& u, long v); friend SC_API bool operator != (const sc_signed& u, unsigned long v); friend bool operator != (const sc_signed& u, int v) { return operator!=(u, (long) v); } friend bool operator != (const sc_signed& u, unsigned int v) { return operator!=(u, (unsigned long) v); } friend SC_API bool operator != (int64 u, const sc_signed& v); friend SC_API bool operator != (uint64 u, const sc_signed& v); friend SC_API bool operator != (long u, const sc_signed& v); friend SC_API bool operator != (unsigned long u, const sc_signed& v); friend bool operator != (int u, const sc_signed& v) { return operator!=((long) u, v); } friend bool operator != (unsigned int u, const sc_signed& v) { return operator!=((unsigned long) u, v); } friend SC_API bool operator != (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator != (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator != (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator != (const sc_uint_base& u, const sc_signed& v); // Logical LESS_THAN operators: friend SC_API bool operator < (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator < (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator < (const sc_signed& u, const sc_signed& v); friend SC_API bool operator < (const sc_signed& u, int64 v); friend SC_API bool operator < (const sc_signed& u, uint64 v); friend SC_API bool operator < (const sc_signed& u, long v); friend SC_API bool operator < (const sc_signed& u, unsigned long v); friend bool operator < (const sc_signed& u, int v) { return operator<(u, (long) v); } friend bool operator < (const sc_signed& u, unsigned int v) { return operator<(u, (unsigned long) v); } friend SC_API bool operator < (int64 u, const sc_signed& v); friend SC_API bool operator < (uint64 u, const sc_signed& v); friend SC_API bool operator < (long u, const sc_signed& v); friend SC_API bool operator < (unsigned long u, const sc_signed& v); friend bool operator < (int u, const sc_signed& v) { return operator<((long) u, v); } friend bool operator < (unsigned int u, const sc_signed& v) { return operator<((unsigned long) u, v); } friend SC_API bool operator < (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator < (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator < (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator < (const sc_uint_base& u, const sc_signed& v); // Logical LESS_THAN_AND_EQUAL operators: friend SC_API bool operator <= (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator <= (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator <= (const sc_signed& u, const sc_signed& v); friend SC_API bool operator <= (const sc_signed& u, int64 v); friend SC_API bool operator <= (const sc_signed& u, uint64 v); friend SC_API bool operator <= (const sc_signed& u, long v); friend SC_API bool operator <= (const sc_signed& u, unsigned long v); friend bool operator <= (const sc_signed& u, int v) { return operator<=(u, (long) v); } friend bool operator <= (const sc_signed& u, unsigned int v) { return operator<=(u, (unsigned long) v); } friend SC_API bool operator <= (int64 u, const sc_signed& v); friend SC_API bool operator <= (uint64 u, const sc_signed& v); friend SC_API bool operator <= (long u, const sc_signed& v); friend SC_API bool operator <= (unsigned long u, const sc_signed& v); friend bool operator <= (int u, const sc_signed& v) { return operator<=((long) u, v); } friend bool operator <= (unsigned int u, const sc_signed& v) { return operator<=((unsigned long) u, v); } friend SC_API bool operator <= (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator <= (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator <= (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator <= (const sc_uint_base& u, const sc_signed& v); // Logical GREATER_THAN operators: friend SC_API bool operator > (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator > (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator > (const sc_signed& u, const sc_signed& v); friend SC_API bool operator > (const sc_signed& u, int64 v); friend SC_API bool operator > (const sc_signed& u, uint64 v); friend SC_API bool operator > (const sc_signed& u, long v); friend SC_API bool operator > (const sc_signed& u, unsigned long v); friend bool operator > (const sc_signed& u, int v) { return operator>(u, (long) v); } friend bool operator > (const sc_signed& u, unsigned int v) { return operator>(u, (unsigned long) v); } friend SC_API bool operator > (int64 u, const sc_signed& v); friend SC_API bool operator > (uint64 u, const sc_signed& v); friend SC_API bool operator > (long u, const sc_signed& v); friend SC_API bool operator > (unsigned long u, const sc_signed& v); friend bool operator > (int u, const sc_signed& v) { return operator>((long) u, v); } friend bool operator > (unsigned int u, const sc_signed& v) { return operator>((unsigned long) u, v); } friend SC_API bool operator > (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator > (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator > (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator > (const sc_uint_base& u, const sc_signed& v); // Logical GREATER_THAN_AND_EQUAL operators: friend SC_API bool operator >= (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator >= (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator >= (const sc_signed& u, const sc_signed& v); friend SC_API bool operator >= (const sc_signed& u, int64 v); friend SC_API bool operator >= (const sc_signed& u, uint64 v); friend SC_API bool operator >= (const sc_signed& u, long v); friend SC_API bool operator >= (const sc_signed& u, unsigned long v); friend bool operator >= (const sc_signed& u, int v) { return operator>=(u, (long) v); } friend bool operator >= (const sc_signed& u, unsigned int v) { return operator>=(u, (unsigned long) v); } friend SC_API bool operator >= (int64 u, const sc_signed& v); friend SC_API bool operator >= (uint64 u, const sc_signed& v); friend SC_API bool operator >= (long u, const sc_signed& v); friend SC_API bool operator >= (unsigned long u, const sc_signed& v); friend bool operator >= (int u, const sc_signed& v) { return operator>=((long) u, v); } friend bool operator >= (unsigned int u, const sc_signed& v) { return operator>=((unsigned long) u, v); } friend SC_API bool operator >= (const sc_signed& u, const sc_int_base& v); friend SC_API bool operator >= (const sc_signed& u, const sc_uint_base& v); friend SC_API bool operator >= (const sc_int_base& u, const sc_signed& v); friend SC_API bool operator >= (const sc_uint_base& u, const sc_signed& v); // Bitwise NOT operator (unary). friend SC_API sc_signed operator ~ (const sc_signed& u); // Helper functions. friend sc_signed add_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_signed sub_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_signed mul_signed_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_signed div_signed_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_signed mod_signed_friend(small_type us, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_signed and_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_signed or_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_signed xor_signed_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); private: small_type sgn; // Shortened as s. int nbits; // Shortened as nb. int ndigits; // Shortened as nd. #ifdef SC_MAX_NBITS sc_digit digit[DIV_CEIL(SC_MAX_NBITS)]; // Shortened as d. #else sc_digit *digit; // Shortened as d. #endif // Private constructors: // Create a copy of v with sign s. sc_signed(const sc_signed& v, small_type s); sc_signed(const sc_unsigned& v, small_type s); // Create a signed number with the given attributes. sc_signed(small_type s, int nb, int nd, sc_digit *d, bool alloc = true); // Create an unsigned number using the bits u[l..r]. sc_signed(const sc_signed* u, int l, int r); sc_signed(const sc_unsigned* u, int l, int r); // Private member functions. The called functions are inline functions. small_type default_sign() const { return SC_NOSIGN; } int num_bits(int nb) const { return nb; } bool check_if_outside(int bit_num) const; void copy_digits(int nb, int nd, const sc_digit *d) { copy_digits_signed(sgn, nbits, ndigits, digit, nb, nd, d); } void makezero() { sgn = make_zero(ndigits, digit); } // Conversion functions between 2's complement (2C) and // sign-magnitude (SM): void convert_2C_to_SM() { sgn = convert_signed_2C_to_SM(nbits, ndigits, digit); } void convert_SM_to_2C_to_SM() { sgn = convert_signed_SM_to_2C_to_SM(sgn, nbits, ndigits, digit); } void convert_SM_to_2C() { convert_signed_SM_to_2C(sgn, ndigits, digit); } }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_signed& ); inline ::std::istream& operator >> ( ::std::istream&, sc_signed& ); inline ::std::ostream& operator << ( ::std::ostream& os, const sc_signed_bitref_r& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_signed_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref_r // // Proxy class for sc_signed part selection (r-value only). // ---------------------------------------------------------------------------- // reduce methods inline bool sc_signed_subref_r::and_reduce() const { const sc_signed* target_p = m_obj_p; for ( int i = m_right; i <= m_left; i++ ) if ( !target_p->test(i) ) return false; return true; } inline bool sc_signed_subref_r::nand_reduce() const { return !and_reduce(); } inline bool sc_signed_subref_r::or_reduce() const { const sc_signed* target_p = m_obj_p; for ( int i = m_right; i <= m_left; i++ ) if ( target_p->test(i) ) return true; return false; } inline bool sc_signed_subref_r::nor_reduce() const { return !or_reduce(); } inline bool sc_signed_subref_r::xor_reduce() const { int odd; const sc_signed* target_p = m_obj_p; odd = 0; for ( int i = m_right; i <= m_left; i++ ) if ( target_p->test(i) ) odd = ~odd; return odd ? true : false; } inline bool sc_signed_subref_r::xnor_reduce() const { return !xor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_signed_subref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_signed_subref // // Proxy class for sc_signed part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline const sc_signed_subref& sc_signed_subref::operator = ( const char* a ) { sc_signed aa( length() ); return ( *this = aa = a ); } inline ::std::istream& operator >> ( ::std::istream& is, sc_signed_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_signed // // Arbitrary precision signed number. // ---------------------------------------------------------------------------- template sc_signed::sc_signed( const sc_generic_base& v ) { int nb = v->length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_generic_base", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); v->to_sc_signed(*this); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_signed& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_signed& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/int/sc_nbexterns.cpp0000644000175000017500000004767214342422106022646 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_nbexterns.cpp -- External functions for both sc_signed and sc_unsigned classes. These functions work on two parameters u and v, and copy the result to the first parameter u. This is also the reason that they are suffixed with _on_help. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_nbexterns.cpp,v $ // Revision 1.2 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #include "sysc/datatypes/int/sc_nbexterns.h" #include "sysc/kernel/sc_macros.h" namespace sc_dt { // ---------------------------------------------------------------------------- // SECTION: External functions for PLUS operators. // ---------------------------------------------------------------------------- // Handles the cases 3 and 4 and returns the result in u. void add_on_help(small_type &us, int /* unb */, int und, sc_digit *ud, small_type vs, int /* vnb */, int vnd, const sc_digit *vd) { vnd = vec_skip_leading_zeros(vnd, vd); if (us == vs) { // case 3 if (und >= vnd) vec_add_on(und, ud, vnd, vd); else vec_add_on2(und, ud, vnd, vd); } else { // case 4 // vec_cmp expects that und is the number of non-zero digits in ud. int new_und = vec_skip_leading_zeros(und, ud); int cmp_res = vec_cmp(new_und, ud, vnd, vd); if (cmp_res == 0) { // u == v us = SC_ZERO; vec_zero(und, ud); return; } if (cmp_res > 0) // u > v vec_sub_on(und, ud, vnd, vd); else { // u < v us = -us; vec_sub_on2(und, ud, vnd, vd); } } } // ---------------------------------------------------------------------------- /* mul_on_help_signed and mul_on_help_unsigned have the same body except that CONVERT_SM_to_2C_to_SM and COPY_DIGITS are defined for signed and unsigned, respectively. This comment also applies to the signed/unsigned versions of div_on_help and mod_on_help. It is possible to take COPY_DIGITS out of these functions and create a single version of each of these helper functions; however, this will impose an onverhead on performance. In the versions below, any change in the signed version of a helper function must be carried to a corresponding change in the unsigned verion of the same function or vice versa. */ // ---------------------------------------------------------------------------- // SECTION: External functions of MULTIPLICATION operators. // ---------------------------------------------------------------------------- void mul_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { #define CONVERT_SM_to_2C_to_SM convert_signed_SM_to_2C_to_SM #define COPY_DIGITS copy_digits_signed { // Body of mul_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); sc_digit ud0 = (*ud); sc_digit vd0 = (*vd); if ((vnd == 1) && (vd0 == 1)) { us = CONVERT_SM_to_2C_to_SM(us, unb, old_und, ud); return; } if ((und == 1) && (ud0 == 1)) { COPY_DIGITS(us, unb, old_und, ud, vnb, vnd, vd); return; } if ((und == 1) && (vnd == 1) && (ud0 < HALF_DIGIT_RADIX) && (vd0 < HALF_DIGIT_RADIX)) { sc_digit d = ud0 * vd0; COPY_DIGITS(us, unb, old_und, ud, unb + vnb, 1, &d); return; } int nd = und + vnd; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); if ((und == 1) && (ud0 < HALF_DIGIT_RADIX)) vec_mul_small(vnd, vd, ud0, d); else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_mul_small(und, ud, vd0, d); else if (vnd < und) vec_mul(und, ud, vnd, vd, d); else vec_mul(vnd, vd, und, ud, d); COPY_DIGITS(us, unb, old_und, ud, unb + vnb, nd, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS #undef CONVERT_SM_to_2C_to_SM } void mul_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { #define CONVERT_SM_to_2C_to_SM convert_unsigned_SM_to_2C_to_SM #define COPY_DIGITS copy_digits_unsigned { // Body of mul_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); sc_digit ud0 = (*ud); sc_digit vd0 = (*vd); if ((vnd == 1) && (vd0 == 1)) { us = CONVERT_SM_to_2C_to_SM(us, unb, old_und, ud); return; } if ((und == 1) && (ud0 == 1)) { COPY_DIGITS(us, unb, old_und, ud, vnb, vnd, vd); return; } if ((und == 1) && (vnd == 1) && (ud0 < HALF_DIGIT_RADIX) && (vd0 < HALF_DIGIT_RADIX)) { sc_digit d = ud0 * vd0; COPY_DIGITS(us, unb, old_und, ud, unb + vnb, 1, &d); return; } int nd = und + vnd; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); if ((und == 1) && (ud0 < HALF_DIGIT_RADIX)) vec_mul_small(vnd, vd, ud0, d); else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_mul_small(und, ud, vd0, d); else if (vnd < und) vec_mul(und, ud, vnd, vd, d); else vec_mul(vnd, vd, und, ud, d); COPY_DIGITS(us, unb, old_und, ud, unb + vnb, nd, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS #undef CONVERT_SM_to_2C_to_SM } // ---------------------------------------------------------------------------- // SECTION: External functions for DIVISION operators. // ---------------------------------------------------------------------------- void div_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { #define CONVERT_SM_to_2C_to_SM convert_signed_SM_to_2C_to_SM #define COPY_DIGITS copy_digits_signed { // Body of div_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); if (cmp_res < 0) { // u < v => u / v = 0 - case 4 us = SC_ZERO; vec_zero(old_und, ud); return; } sc_digit vd0 = (*vd); if ((cmp_res > 0) && (vnd == 1) && (vd0 == 1)) { us = CONVERT_SM_to_2C_to_SM(us, unb, old_und, ud); return; } // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); // u = v => u / v = 1 - case 3 if (cmp_res == 0) d[0] = 1; else if ((vnd == 1) && (und == 1)) d[0] = (*ud) / vd0; else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_div_small(und, ud, vd0, d); else vec_div_large(und, ud, vnd, vd, d); COPY_DIGITS(us, unb, old_und, ud, sc_max(unb, vnb), nd - 1, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS #undef CONVERT_SM_to_2C_to_SM } void div_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd) { #define CONVERT_SM_to_2C_to_SM convert_unsigned_SM_to_2C_to_SM #define COPY_DIGITS copy_digits_unsigned { // Body of div_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); if (cmp_res < 0) { // u < v => u / v = 0 - case 4 us = SC_ZERO; vec_zero(old_und, ud); return; } sc_digit vd0 = (*vd); if ((cmp_res > 0) && (vnd == 1) && (vd0 == 1)) { us = CONVERT_SM_to_2C_to_SM(us, unb, old_und, ud); return; } // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); // u = v => u / v = 1 - case 3 if (cmp_res == 0) d[0] = 1; else if ((vnd == 1) && (und == 1)) d[0] = (*ud) / vd0; else if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) vec_div_small(und, ud, vd0, d); else vec_div_large(und, ud, vnd, vd, d); COPY_DIGITS(us, unb, old_und, ud, sc_max(unb, vnb), nd - 1, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS #undef CONVERT_SM_to_2C_to_SM } // ---------------------------------------------------------------------------- // SECTION: External functions for MOD operators. // ---------------------------------------------------------------------------- void mod_on_help_signed(small_type &us, int unb, int und, sc_digit *ud, int /* vnb */, int vnd, const sc_digit *vd) { #define COPY_DIGITS copy_digits_signed { // Body of mod_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); // u < v => u % v = u - case 4 if (cmp_res < 0) return; // u = v => u % v = 0 - case 3 if (cmp_res == 0) { us = SC_ZERO; vec_zero(old_und, ud); return; } // else if u > v - case 5 sc_digit vd0 = (*vd); if ((vnd == 1) && (vd0 == 1)) { us = SC_ZERO; vec_zero(old_und, ud); return; } // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); if ((vnd == 1) && (und == 1)) d[0] = (*ud) % vd0; if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) d[0] = vec_rem_small(und, ud, vd0); else vec_rem_large(und, ud, vnd, vd, d); us = check_for_zero(us, nd - 1, d); if (us == SC_ZERO) vec_zero(old_und, ud); else COPY_DIGITS(us, unb, old_und, ud, sc_min(unb, vnd), nd - 1, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS } void mod_on_help_unsigned(small_type &us, int unb, int und, sc_digit *ud, int /* vnb */, int vnd, const sc_digit *vd) { #define COPY_DIGITS copy_digits_unsigned { // Body of mod_on_help int old_und = und; und = vec_skip_leading_zeros(und, ud); vnd = vec_skip_leading_zeros(vnd, vd); int cmp_res = vec_cmp(und, ud, vnd, vd); // u < v => u % v = u - case 4 if (cmp_res < 0) return; // u = v => u % v = 0 - case 3 if (cmp_res == 0) { us = SC_ZERO; vec_zero(old_und, ud); return; } // else if u > v - case 5 sc_digit vd0 = (*vd); if ((vnd == 1) && (vd0 == 1)) { us = SC_ZERO; vec_zero(old_und, ud); return; } // One extra digit for d is allocated to simplify vec_div_*(). int nd = sc_max(und, vnd) + 1; #ifdef SC_MAX_NBITS sc_digit d[MAX_NDIGITS + 1]; #else sc_digit *d = new sc_digit[nd]; #endif vec_zero(nd, d); if ((vnd == 1) && (und == 1)) d[0] = (*ud) % vd0; if ((vnd == 1) && (vd0 < HALF_DIGIT_RADIX)) d[0] = vec_rem_small(und, ud, vd0); else vec_rem_large(und, ud, vnd, vd, d); us = check_for_zero(us, nd - 1, d); if (us == SC_ZERO) vec_zero(old_und, ud); else COPY_DIGITS(us, unb, old_und, ud, sc_min(unb, vnd), nd - 1, d); #ifndef SC_MAX_NBITS delete [] d; #endif } #undef COPY_DIGITS } // ---------------------------------------------------------------------------- // SECTION: External functions for AND operators. // ---------------------------------------------------------------------------- // Handles the cases 2-5 and returns the result in u. void and_on_help(small_type us, int /* unb */, int und, sc_digit *ud, small_type vs, int /* vnb */, int vnd, const sc_digit *vd) { sc_digit *x = ud; const sc_digit *y = vd; int xnd = und; int ynd = vnd; // Truncate y. if (xnd < ynd) ynd = xnd; const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(us, vs); if (s > 0) { if (us > 0) { // case 2 while (y < yend) (*x++) &= (*y++); while (x < xend) (*x++) = 0; } else { // case 3 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*x++) = (xcarry & ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += DIGIT_MASK; (*x++) = (xcarry & ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (us > 0) { // case 4 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*x++) &= ycarry & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*x++) &= ycarry & DIGIT_MASK; ycarry >>= BITS_PER_DIGIT; } } else { // case 5 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); (*x++) = (xcarry & (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x < xend) (*x++) = 0; } } } // ---------------------------------------------------------------------------- // SECTION: External functions for OR operators. // ---------------------------------------------------------------------------- // Handles the cases 3-5 and returns the result in u. void or_on_help(small_type us, int /* unb */, int und, sc_digit *ud, small_type vs, int /* vnb */, int vnd, const sc_digit *vd) { sc_digit *x = ud; const sc_digit *y = vd; int xnd = und; int ynd = vnd; if (xnd < ynd) ynd = xnd; const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(us, vs); if (s > 0) { if (us > 0) { // case 3 while (y < yend) (*x++) |= (*y++); // No change for the rest of x. } else { // case 4 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*x++) = (xcarry | ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += DIGIT_MASK; (*x++) = (xcarry | ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (us > 0) { // case 5 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*x) = ((*x) | ycarry) & DIGIT_MASK; x++; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*x) = ((*x) | ycarry) & DIGIT_MASK; x++; ycarry >>= BITS_PER_DIGIT; } } else { // case 6 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); (*x++) = (xcarry | (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x) & DIGIT_MASK); (*x++) = xcarry & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } } } } // ---------------------------------------------------------------------------- // SECTION: External functions for XOR operators. // ---------------------------------------------------------------------------- // Handles the cases 3-5 and returns the result in u. void xor_on_help(small_type us, int /* unb */, int und, sc_digit *ud, small_type vs, int /* vnb */, int vnd, const sc_digit *vd) { sc_digit *x = ud; const sc_digit *y = vd; int xnd = und; int ynd = vnd; if (xnd < ynd) ynd = xnd; const sc_digit *xend = (x + xnd); const sc_digit *yend = (y + ynd); // x is longer than y. small_type s = mul_signs(us, vs); if (s > 0) { if (us > 0) { // case 3 while (y < yend) { (*x) = ((*x) ^ (*y)) & DIGIT_MASK; x++; y++; } // No change for the rest of x. } else { // case 4 sc_digit xcarry = 1; sc_digit ycarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += (~(*y++) & DIGIT_MASK); (*x++) = (xcarry ^ ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x) & DIGIT_MASK); ycarry += DIGIT_MASK; (*x++) = (xcarry ^ ycarry) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; ycarry >>= BITS_PER_DIGIT; } } } else { if (us > 0) { // case 5 sc_digit ycarry = 1; while (y < yend) { ycarry += (~(*y++) & DIGIT_MASK); (*x) = ((*x) ^ ycarry) & DIGIT_MASK; x++; ycarry >>= BITS_PER_DIGIT; } while (x < xend) { ycarry += DIGIT_MASK; (*x) = ((*x) ^ ycarry) & DIGIT_MASK; x++; ycarry >>= BITS_PER_DIGIT; } } else { // case 6 sc_digit xcarry = 1; while (y < yend) { xcarry += (~(*x) & DIGIT_MASK); (*x++) = (xcarry ^ (*y++)) & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } while (x < xend) { xcarry += (~(*x) & DIGIT_MASK); (*x++) = xcarry & DIGIT_MASK; xcarry >>= BITS_PER_DIGIT; } } } } } // namespace sc_dt // End of file systemc-2.3.4/src/sysc/datatypes/int/sc_int_mask.cpp0000644000175000017500000017615714342422106022444 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_int_mask.cpp -- Fills the mask_int lookup table to enable efficient part-selection on sc_ints and sc_uints. Original Author: Amit Rao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Resolved ambiguity with sc_(un)signed. - Merged the code for 64- and 32-bit versions via the constants in sc_nbdefs.h. - Eliminated redundant file inclusions. Name, Affiliation, Date: Philipp A Hartmann, Intel Description of Modification: - drop specializations for Windows, 32-bit only Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #ifndef UINT64_C #if defined(_WIN32) && !defined(__MINGW32__) # define UINT64_C(v) v ## ui64 #else # define UINT64_C(v) v ## ULL #endif #endif // UINT64_C namespace sc_dt { SC_API const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH] = { { UINT64_C(0xfffffffffffffffe) }, { UINT64_C(0xfffffffffffffffc), UINT64_C(0xfffffffffffffffd) }, { UINT64_C(0xfffffffffffffff8), UINT64_C(0xfffffffffffffff9), UINT64_C(0xfffffffffffffffb) }, { UINT64_C(0xfffffffffffffff0), UINT64_C(0xfffffffffffffff1), UINT64_C(0xfffffffffffffff3), UINT64_C(0xfffffffffffffff7) }, { UINT64_C(0xffffffffffffffe0), UINT64_C(0xffffffffffffffe1), UINT64_C(0xffffffffffffffe3), UINT64_C(0xffffffffffffffe7), UINT64_C(0xffffffffffffffef) }, { UINT64_C(0xffffffffffffffc0), UINT64_C(0xffffffffffffffc1), UINT64_C(0xffffffffffffffc3), UINT64_C(0xffffffffffffffc7), UINT64_C(0xffffffffffffffcf), UINT64_C(0xffffffffffffffdf) }, { UINT64_C(0xffffffffffffff80), UINT64_C(0xffffffffffffff81), UINT64_C(0xffffffffffffff83), UINT64_C(0xffffffffffffff87), UINT64_C(0xffffffffffffff8f), UINT64_C(0xffffffffffffff9f), UINT64_C(0xffffffffffffffbf) }, { UINT64_C(0xffffffffffffff00), UINT64_C(0xffffffffffffff01), UINT64_C(0xffffffffffffff03), UINT64_C(0xffffffffffffff07), UINT64_C(0xffffffffffffff0f), UINT64_C(0xffffffffffffff1f), UINT64_C(0xffffffffffffff3f), UINT64_C(0xffffffffffffff7f) }, { UINT64_C(0xfffffffffffffe00), UINT64_C(0xfffffffffffffe01), UINT64_C(0xfffffffffffffe03), UINT64_C(0xfffffffffffffe07), UINT64_C(0xfffffffffffffe0f), UINT64_C(0xfffffffffffffe1f), UINT64_C(0xfffffffffffffe3f), UINT64_C(0xfffffffffffffe7f), UINT64_C(0xfffffffffffffeff) }, { UINT64_C(0xfffffffffffffc00), UINT64_C(0xfffffffffffffc01), UINT64_C(0xfffffffffffffc03), UINT64_C(0xfffffffffffffc07), UINT64_C(0xfffffffffffffc0f), UINT64_C(0xfffffffffffffc1f), UINT64_C(0xfffffffffffffc3f), UINT64_C(0xfffffffffffffc7f), UINT64_C(0xfffffffffffffcff), UINT64_C(0xfffffffffffffdff) }, { UINT64_C(0xfffffffffffff800), UINT64_C(0xfffffffffffff801), UINT64_C(0xfffffffffffff803), UINT64_C(0xfffffffffffff807), UINT64_C(0xfffffffffffff80f), UINT64_C(0xfffffffffffff81f), UINT64_C(0xfffffffffffff83f), UINT64_C(0xfffffffffffff87f), UINT64_C(0xfffffffffffff8ff), UINT64_C(0xfffffffffffff9ff), UINT64_C(0xfffffffffffffbff) }, { UINT64_C(0xfffffffffffff000), UINT64_C(0xfffffffffffff001), UINT64_C(0xfffffffffffff003), UINT64_C(0xfffffffffffff007), UINT64_C(0xfffffffffffff00f), UINT64_C(0xfffffffffffff01f), UINT64_C(0xfffffffffffff03f), UINT64_C(0xfffffffffffff07f), UINT64_C(0xfffffffffffff0ff), UINT64_C(0xfffffffffffff1ff), UINT64_C(0xfffffffffffff3ff), UINT64_C(0xfffffffffffff7ff) }, { UINT64_C(0xffffffffffffe000), UINT64_C(0xffffffffffffe001), UINT64_C(0xffffffffffffe003), UINT64_C(0xffffffffffffe007), UINT64_C(0xffffffffffffe00f), UINT64_C(0xffffffffffffe01f), UINT64_C(0xffffffffffffe03f), UINT64_C(0xffffffffffffe07f), UINT64_C(0xffffffffffffe0ff), UINT64_C(0xffffffffffffe1ff), UINT64_C(0xffffffffffffe3ff), UINT64_C(0xffffffffffffe7ff), UINT64_C(0xffffffffffffefff) }, { UINT64_C(0xffffffffffffc000), UINT64_C(0xffffffffffffc001), UINT64_C(0xffffffffffffc003), UINT64_C(0xffffffffffffc007), UINT64_C(0xffffffffffffc00f), UINT64_C(0xffffffffffffc01f), UINT64_C(0xffffffffffffc03f), UINT64_C(0xffffffffffffc07f), UINT64_C(0xffffffffffffc0ff), UINT64_C(0xffffffffffffc1ff), UINT64_C(0xffffffffffffc3ff), UINT64_C(0xffffffffffffc7ff), UINT64_C(0xffffffffffffcfff), UINT64_C(0xffffffffffffdfff) }, { UINT64_C(0xffffffffffff8000), UINT64_C(0xffffffffffff8001), UINT64_C(0xffffffffffff8003), UINT64_C(0xffffffffffff8007), UINT64_C(0xffffffffffff800f), UINT64_C(0xffffffffffff801f), UINT64_C(0xffffffffffff803f), UINT64_C(0xffffffffffff807f), UINT64_C(0xffffffffffff80ff), UINT64_C(0xffffffffffff81ff), UINT64_C(0xffffffffffff83ff), UINT64_C(0xffffffffffff87ff), UINT64_C(0xffffffffffff8fff), UINT64_C(0xffffffffffff9fff), UINT64_C(0xffffffffffffbfff) }, { UINT64_C(0xffffffffffff0000), UINT64_C(0xffffffffffff0001), UINT64_C(0xffffffffffff0003), UINT64_C(0xffffffffffff0007), UINT64_C(0xffffffffffff000f), UINT64_C(0xffffffffffff001f), UINT64_C(0xffffffffffff003f), UINT64_C(0xffffffffffff007f), UINT64_C(0xffffffffffff00ff), UINT64_C(0xffffffffffff01ff), UINT64_C(0xffffffffffff03ff), UINT64_C(0xffffffffffff07ff), UINT64_C(0xffffffffffff0fff), UINT64_C(0xffffffffffff1fff), UINT64_C(0xffffffffffff3fff), UINT64_C(0xffffffffffff7fff) }, { UINT64_C(0xfffffffffffe0000), UINT64_C(0xfffffffffffe0001), UINT64_C(0xfffffffffffe0003), UINT64_C(0xfffffffffffe0007), UINT64_C(0xfffffffffffe000f), UINT64_C(0xfffffffffffe001f), UINT64_C(0xfffffffffffe003f), UINT64_C(0xfffffffffffe007f), UINT64_C(0xfffffffffffe00ff), UINT64_C(0xfffffffffffe01ff), UINT64_C(0xfffffffffffe03ff), UINT64_C(0xfffffffffffe07ff), UINT64_C(0xfffffffffffe0fff), UINT64_C(0xfffffffffffe1fff), UINT64_C(0xfffffffffffe3fff), UINT64_C(0xfffffffffffe7fff), UINT64_C(0xfffffffffffeffff) }, { UINT64_C(0xfffffffffffc0000), UINT64_C(0xfffffffffffc0001), UINT64_C(0xfffffffffffc0003), UINT64_C(0xfffffffffffc0007), UINT64_C(0xfffffffffffc000f), UINT64_C(0xfffffffffffc001f), UINT64_C(0xfffffffffffc003f), UINT64_C(0xfffffffffffc007f), UINT64_C(0xfffffffffffc00ff), UINT64_C(0xfffffffffffc01ff), UINT64_C(0xfffffffffffc03ff), UINT64_C(0xfffffffffffc07ff), UINT64_C(0xfffffffffffc0fff), UINT64_C(0xfffffffffffc1fff), UINT64_C(0xfffffffffffc3fff), UINT64_C(0xfffffffffffc7fff), UINT64_C(0xfffffffffffcffff), UINT64_C(0xfffffffffffdffff) }, { UINT64_C(0xfffffffffff80000), UINT64_C(0xfffffffffff80001), UINT64_C(0xfffffffffff80003), UINT64_C(0xfffffffffff80007), UINT64_C(0xfffffffffff8000f), UINT64_C(0xfffffffffff8001f), UINT64_C(0xfffffffffff8003f), UINT64_C(0xfffffffffff8007f), UINT64_C(0xfffffffffff800ff), UINT64_C(0xfffffffffff801ff), UINT64_C(0xfffffffffff803ff), UINT64_C(0xfffffffffff807ff), UINT64_C(0xfffffffffff80fff), UINT64_C(0xfffffffffff81fff), UINT64_C(0xfffffffffff83fff), UINT64_C(0xfffffffffff87fff), UINT64_C(0xfffffffffff8ffff), UINT64_C(0xfffffffffff9ffff), UINT64_C(0xfffffffffffbffff) }, { UINT64_C(0xfffffffffff00000), UINT64_C(0xfffffffffff00001), UINT64_C(0xfffffffffff00003), UINT64_C(0xfffffffffff00007), UINT64_C(0xfffffffffff0000f), UINT64_C(0xfffffffffff0001f), UINT64_C(0xfffffffffff0003f), UINT64_C(0xfffffffffff0007f), UINT64_C(0xfffffffffff000ff), UINT64_C(0xfffffffffff001ff), UINT64_C(0xfffffffffff003ff), UINT64_C(0xfffffffffff007ff), UINT64_C(0xfffffffffff00fff), UINT64_C(0xfffffffffff01fff), UINT64_C(0xfffffffffff03fff), UINT64_C(0xfffffffffff07fff), UINT64_C(0xfffffffffff0ffff), UINT64_C(0xfffffffffff1ffff), UINT64_C(0xfffffffffff3ffff), UINT64_C(0xfffffffffff7ffff) }, { UINT64_C(0xffffffffffe00000), UINT64_C(0xffffffffffe00001), UINT64_C(0xffffffffffe00003), UINT64_C(0xffffffffffe00007), UINT64_C(0xffffffffffe0000f), UINT64_C(0xffffffffffe0001f), UINT64_C(0xffffffffffe0003f), UINT64_C(0xffffffffffe0007f), UINT64_C(0xffffffffffe000ff), UINT64_C(0xffffffffffe001ff), UINT64_C(0xffffffffffe003ff), UINT64_C(0xffffffffffe007ff), UINT64_C(0xffffffffffe00fff), UINT64_C(0xffffffffffe01fff), UINT64_C(0xffffffffffe03fff), UINT64_C(0xffffffffffe07fff), UINT64_C(0xffffffffffe0ffff), UINT64_C(0xffffffffffe1ffff), UINT64_C(0xffffffffffe3ffff), UINT64_C(0xffffffffffe7ffff), UINT64_C(0xffffffffffefffff) }, { UINT64_C(0xffffffffffc00000), UINT64_C(0xffffffffffc00001), UINT64_C(0xffffffffffc00003), UINT64_C(0xffffffffffc00007), UINT64_C(0xffffffffffc0000f), UINT64_C(0xffffffffffc0001f), UINT64_C(0xffffffffffc0003f), UINT64_C(0xffffffffffc0007f), UINT64_C(0xffffffffffc000ff), UINT64_C(0xffffffffffc001ff), UINT64_C(0xffffffffffc003ff), UINT64_C(0xffffffffffc007ff), UINT64_C(0xffffffffffc00fff), UINT64_C(0xffffffffffc01fff), UINT64_C(0xffffffffffc03fff), UINT64_C(0xffffffffffc07fff), UINT64_C(0xffffffffffc0ffff), UINT64_C(0xffffffffffc1ffff), UINT64_C(0xffffffffffc3ffff), UINT64_C(0xffffffffffc7ffff), UINT64_C(0xffffffffffcfffff), UINT64_C(0xffffffffffdfffff) }, { UINT64_C(0xffffffffff800000), UINT64_C(0xffffffffff800001), UINT64_C(0xffffffffff800003), UINT64_C(0xffffffffff800007), UINT64_C(0xffffffffff80000f), UINT64_C(0xffffffffff80001f), UINT64_C(0xffffffffff80003f), UINT64_C(0xffffffffff80007f), UINT64_C(0xffffffffff8000ff), UINT64_C(0xffffffffff8001ff), UINT64_C(0xffffffffff8003ff), UINT64_C(0xffffffffff8007ff), UINT64_C(0xffffffffff800fff), UINT64_C(0xffffffffff801fff), UINT64_C(0xffffffffff803fff), UINT64_C(0xffffffffff807fff), UINT64_C(0xffffffffff80ffff), UINT64_C(0xffffffffff81ffff), UINT64_C(0xffffffffff83ffff), UINT64_C(0xffffffffff87ffff), UINT64_C(0xffffffffff8fffff), UINT64_C(0xffffffffff9fffff), UINT64_C(0xffffffffffbfffff) }, { UINT64_C(0xffffffffff000000), UINT64_C(0xffffffffff000001), UINT64_C(0xffffffffff000003), UINT64_C(0xffffffffff000007), UINT64_C(0xffffffffff00000f), UINT64_C(0xffffffffff00001f), UINT64_C(0xffffffffff00003f), UINT64_C(0xffffffffff00007f), UINT64_C(0xffffffffff0000ff), UINT64_C(0xffffffffff0001ff), UINT64_C(0xffffffffff0003ff), UINT64_C(0xffffffffff0007ff), UINT64_C(0xffffffffff000fff), UINT64_C(0xffffffffff001fff), UINT64_C(0xffffffffff003fff), UINT64_C(0xffffffffff007fff), UINT64_C(0xffffffffff00ffff), UINT64_C(0xffffffffff01ffff), UINT64_C(0xffffffffff03ffff), UINT64_C(0xffffffffff07ffff), UINT64_C(0xffffffffff0fffff), UINT64_C(0xffffffffff1fffff), UINT64_C(0xffffffffff3fffff), UINT64_C(0xffffffffff7fffff) }, { UINT64_C(0xfffffffffe000000), UINT64_C(0xfffffffffe000001), UINT64_C(0xfffffffffe000003), UINT64_C(0xfffffffffe000007), UINT64_C(0xfffffffffe00000f), UINT64_C(0xfffffffffe00001f), UINT64_C(0xfffffffffe00003f), UINT64_C(0xfffffffffe00007f), UINT64_C(0xfffffffffe0000ff), UINT64_C(0xfffffffffe0001ff), UINT64_C(0xfffffffffe0003ff), UINT64_C(0xfffffffffe0007ff), UINT64_C(0xfffffffffe000fff), UINT64_C(0xfffffffffe001fff), UINT64_C(0xfffffffffe003fff), UINT64_C(0xfffffffffe007fff), UINT64_C(0xfffffffffe00ffff), UINT64_C(0xfffffffffe01ffff), UINT64_C(0xfffffffffe03ffff), UINT64_C(0xfffffffffe07ffff), UINT64_C(0xfffffffffe0fffff), UINT64_C(0xfffffffffe1fffff), UINT64_C(0xfffffffffe3fffff), UINT64_C(0xfffffffffe7fffff), UINT64_C(0xfffffffffeffffff) }, { UINT64_C(0xfffffffffc000000), UINT64_C(0xfffffffffc000001), UINT64_C(0xfffffffffc000003), UINT64_C(0xfffffffffc000007), UINT64_C(0xfffffffffc00000f), UINT64_C(0xfffffffffc00001f), UINT64_C(0xfffffffffc00003f), UINT64_C(0xfffffffffc00007f), UINT64_C(0xfffffffffc0000ff), UINT64_C(0xfffffffffc0001ff), UINT64_C(0xfffffffffc0003ff), UINT64_C(0xfffffffffc0007ff), UINT64_C(0xfffffffffc000fff), UINT64_C(0xfffffffffc001fff), UINT64_C(0xfffffffffc003fff), UINT64_C(0xfffffffffc007fff), UINT64_C(0xfffffffffc00ffff), UINT64_C(0xfffffffffc01ffff), UINT64_C(0xfffffffffc03ffff), UINT64_C(0xfffffffffc07ffff), UINT64_C(0xfffffffffc0fffff), UINT64_C(0xfffffffffc1fffff), UINT64_C(0xfffffffffc3fffff), UINT64_C(0xfffffffffc7fffff), UINT64_C(0xfffffffffcffffff), UINT64_C(0xfffffffffdffffff) }, { UINT64_C(0xfffffffff8000000), UINT64_C(0xfffffffff8000001), UINT64_C(0xfffffffff8000003), UINT64_C(0xfffffffff8000007), UINT64_C(0xfffffffff800000f), UINT64_C(0xfffffffff800001f), UINT64_C(0xfffffffff800003f), UINT64_C(0xfffffffff800007f), UINT64_C(0xfffffffff80000ff), UINT64_C(0xfffffffff80001ff), UINT64_C(0xfffffffff80003ff), UINT64_C(0xfffffffff80007ff), UINT64_C(0xfffffffff8000fff), UINT64_C(0xfffffffff8001fff), UINT64_C(0xfffffffff8003fff), UINT64_C(0xfffffffff8007fff), UINT64_C(0xfffffffff800ffff), UINT64_C(0xfffffffff801ffff), UINT64_C(0xfffffffff803ffff), UINT64_C(0xfffffffff807ffff), UINT64_C(0xfffffffff80fffff), UINT64_C(0xfffffffff81fffff), UINT64_C(0xfffffffff83fffff), UINT64_C(0xfffffffff87fffff), UINT64_C(0xfffffffff8ffffff), UINT64_C(0xfffffffff9ffffff), UINT64_C(0xfffffffffbffffff) }, { UINT64_C(0xfffffffff0000000), UINT64_C(0xfffffffff0000001), UINT64_C(0xfffffffff0000003), UINT64_C(0xfffffffff0000007), UINT64_C(0xfffffffff000000f), UINT64_C(0xfffffffff000001f), UINT64_C(0xfffffffff000003f), UINT64_C(0xfffffffff000007f), UINT64_C(0xfffffffff00000ff), UINT64_C(0xfffffffff00001ff), UINT64_C(0xfffffffff00003ff), UINT64_C(0xfffffffff00007ff), UINT64_C(0xfffffffff0000fff), UINT64_C(0xfffffffff0001fff), UINT64_C(0xfffffffff0003fff), UINT64_C(0xfffffffff0007fff), UINT64_C(0xfffffffff000ffff), UINT64_C(0xfffffffff001ffff), UINT64_C(0xfffffffff003ffff), UINT64_C(0xfffffffff007ffff), UINT64_C(0xfffffffff00fffff), UINT64_C(0xfffffffff01fffff), UINT64_C(0xfffffffff03fffff), UINT64_C(0xfffffffff07fffff), UINT64_C(0xfffffffff0ffffff), UINT64_C(0xfffffffff1ffffff), UINT64_C(0xfffffffff3ffffff), UINT64_C(0xfffffffff7ffffff) }, { UINT64_C(0xffffffffe0000000), UINT64_C(0xffffffffe0000001), UINT64_C(0xffffffffe0000003), UINT64_C(0xffffffffe0000007), UINT64_C(0xffffffffe000000f), UINT64_C(0xffffffffe000001f), UINT64_C(0xffffffffe000003f), UINT64_C(0xffffffffe000007f), UINT64_C(0xffffffffe00000ff), UINT64_C(0xffffffffe00001ff), UINT64_C(0xffffffffe00003ff), UINT64_C(0xffffffffe00007ff), UINT64_C(0xffffffffe0000fff), UINT64_C(0xffffffffe0001fff), UINT64_C(0xffffffffe0003fff), UINT64_C(0xffffffffe0007fff), UINT64_C(0xffffffffe000ffff), UINT64_C(0xffffffffe001ffff), UINT64_C(0xffffffffe003ffff), UINT64_C(0xffffffffe007ffff), UINT64_C(0xffffffffe00fffff), UINT64_C(0xffffffffe01fffff), UINT64_C(0xffffffffe03fffff), UINT64_C(0xffffffffe07fffff), UINT64_C(0xffffffffe0ffffff), UINT64_C(0xffffffffe1ffffff), UINT64_C(0xffffffffe3ffffff), UINT64_C(0xffffffffe7ffffff), UINT64_C(0xffffffffefffffff) }, { UINT64_C(0xffffffffc0000000), UINT64_C(0xffffffffc0000001), UINT64_C(0xffffffffc0000003), UINT64_C(0xffffffffc0000007), UINT64_C(0xffffffffc000000f), UINT64_C(0xffffffffc000001f), UINT64_C(0xffffffffc000003f), UINT64_C(0xffffffffc000007f), UINT64_C(0xffffffffc00000ff), UINT64_C(0xffffffffc00001ff), UINT64_C(0xffffffffc00003ff), UINT64_C(0xffffffffc00007ff), UINT64_C(0xffffffffc0000fff), UINT64_C(0xffffffffc0001fff), UINT64_C(0xffffffffc0003fff), UINT64_C(0xffffffffc0007fff), UINT64_C(0xffffffffc000ffff), UINT64_C(0xffffffffc001ffff), UINT64_C(0xffffffffc003ffff), UINT64_C(0xffffffffc007ffff), UINT64_C(0xffffffffc00fffff), UINT64_C(0xffffffffc01fffff), UINT64_C(0xffffffffc03fffff), UINT64_C(0xffffffffc07fffff), UINT64_C(0xffffffffc0ffffff), UINT64_C(0xffffffffc1ffffff), UINT64_C(0xffffffffc3ffffff), UINT64_C(0xffffffffc7ffffff), UINT64_C(0xffffffffcfffffff), UINT64_C(0xffffffffdfffffff) }, { UINT64_C(0xffffffff80000000), UINT64_C(0xffffffff80000001), UINT64_C(0xffffffff80000003), UINT64_C(0xffffffff80000007), UINT64_C(0xffffffff8000000f), UINT64_C(0xffffffff8000001f), UINT64_C(0xffffffff8000003f), UINT64_C(0xffffffff8000007f), UINT64_C(0xffffffff800000ff), UINT64_C(0xffffffff800001ff), UINT64_C(0xffffffff800003ff), UINT64_C(0xffffffff800007ff), UINT64_C(0xffffffff80000fff), UINT64_C(0xffffffff80001fff), UINT64_C(0xffffffff80003fff), UINT64_C(0xffffffff80007fff), UINT64_C(0xffffffff8000ffff), UINT64_C(0xffffffff8001ffff), UINT64_C(0xffffffff8003ffff), UINT64_C(0xffffffff8007ffff), UINT64_C(0xffffffff800fffff), UINT64_C(0xffffffff801fffff), UINT64_C(0xffffffff803fffff), UINT64_C(0xffffffff807fffff), UINT64_C(0xffffffff80ffffff), UINT64_C(0xffffffff81ffffff), UINT64_C(0xffffffff83ffffff), UINT64_C(0xffffffff87ffffff), UINT64_C(0xffffffff8fffffff), UINT64_C(0xffffffff9fffffff), UINT64_C(0xffffffffbfffffff) }, { UINT64_C(0xffffffff00000000), UINT64_C(0xffffffff00000001), UINT64_C(0xffffffff00000003), UINT64_C(0xffffffff00000007), UINT64_C(0xffffffff0000000f), UINT64_C(0xffffffff0000001f), UINT64_C(0xffffffff0000003f), UINT64_C(0xffffffff0000007f), UINT64_C(0xffffffff000000ff), UINT64_C(0xffffffff000001ff), UINT64_C(0xffffffff000003ff), UINT64_C(0xffffffff000007ff), UINT64_C(0xffffffff00000fff), UINT64_C(0xffffffff00001fff), UINT64_C(0xffffffff00003fff), UINT64_C(0xffffffff00007fff), UINT64_C(0xffffffff0000ffff), UINT64_C(0xffffffff0001ffff), UINT64_C(0xffffffff0003ffff), UINT64_C(0xffffffff0007ffff), UINT64_C(0xffffffff000fffff), UINT64_C(0xffffffff001fffff), UINT64_C(0xffffffff003fffff), UINT64_C(0xffffffff007fffff), UINT64_C(0xffffffff00ffffff), UINT64_C(0xffffffff01ffffff), UINT64_C(0xffffffff03ffffff), UINT64_C(0xffffffff07ffffff), UINT64_C(0xffffffff0fffffff), UINT64_C(0xffffffff1fffffff), UINT64_C(0xffffffff3fffffff), UINT64_C(0xffffffff7fffffff) }, { UINT64_C(0xfffffffe00000000), UINT64_C(0xfffffffe00000001), UINT64_C(0xfffffffe00000003), UINT64_C(0xfffffffe00000007), UINT64_C(0xfffffffe0000000f), UINT64_C(0xfffffffe0000001f), UINT64_C(0xfffffffe0000003f), UINT64_C(0xfffffffe0000007f), UINT64_C(0xfffffffe000000ff), UINT64_C(0xfffffffe000001ff), UINT64_C(0xfffffffe000003ff), UINT64_C(0xfffffffe000007ff), UINT64_C(0xfffffffe00000fff), UINT64_C(0xfffffffe00001fff), UINT64_C(0xfffffffe00003fff), UINT64_C(0xfffffffe00007fff), UINT64_C(0xfffffffe0000ffff), UINT64_C(0xfffffffe0001ffff), UINT64_C(0xfffffffe0003ffff), UINT64_C(0xfffffffe0007ffff), UINT64_C(0xfffffffe000fffff), UINT64_C(0xfffffffe001fffff), UINT64_C(0xfffffffe003fffff), UINT64_C(0xfffffffe007fffff), UINT64_C(0xfffffffe00ffffff), UINT64_C(0xfffffffe01ffffff), UINT64_C(0xfffffffe03ffffff), UINT64_C(0xfffffffe07ffffff), UINT64_C(0xfffffffe0fffffff), UINT64_C(0xfffffffe1fffffff), UINT64_C(0xfffffffe3fffffff), UINT64_C(0xfffffffe7fffffff), UINT64_C(0xfffffffeffffffff) }, { UINT64_C(0xfffffffc00000000), UINT64_C(0xfffffffc00000001), UINT64_C(0xfffffffc00000003), UINT64_C(0xfffffffc00000007), UINT64_C(0xfffffffc0000000f), UINT64_C(0xfffffffc0000001f), UINT64_C(0xfffffffc0000003f), UINT64_C(0xfffffffc0000007f), UINT64_C(0xfffffffc000000ff), UINT64_C(0xfffffffc000001ff), UINT64_C(0xfffffffc000003ff), UINT64_C(0xfffffffc000007ff), UINT64_C(0xfffffffc00000fff), UINT64_C(0xfffffffc00001fff), UINT64_C(0xfffffffc00003fff), UINT64_C(0xfffffffc00007fff), UINT64_C(0xfffffffc0000ffff), UINT64_C(0xfffffffc0001ffff), UINT64_C(0xfffffffc0003ffff), UINT64_C(0xfffffffc0007ffff), UINT64_C(0xfffffffc000fffff), UINT64_C(0xfffffffc001fffff), UINT64_C(0xfffffffc003fffff), UINT64_C(0xfffffffc007fffff), UINT64_C(0xfffffffc00ffffff), UINT64_C(0xfffffffc01ffffff), UINT64_C(0xfffffffc03ffffff), UINT64_C(0xfffffffc07ffffff), UINT64_C(0xfffffffc0fffffff), UINT64_C(0xfffffffc1fffffff), UINT64_C(0xfffffffc3fffffff), UINT64_C(0xfffffffc7fffffff), UINT64_C(0xfffffffcffffffff), UINT64_C(0xfffffffdffffffff) }, { UINT64_C(0xfffffff800000000), UINT64_C(0xfffffff800000001), UINT64_C(0xfffffff800000003), UINT64_C(0xfffffff800000007), UINT64_C(0xfffffff80000000f), UINT64_C(0xfffffff80000001f), UINT64_C(0xfffffff80000003f), UINT64_C(0xfffffff80000007f), UINT64_C(0xfffffff8000000ff), UINT64_C(0xfffffff8000001ff), UINT64_C(0xfffffff8000003ff), UINT64_C(0xfffffff8000007ff), UINT64_C(0xfffffff800000fff), UINT64_C(0xfffffff800001fff), UINT64_C(0xfffffff800003fff), UINT64_C(0xfffffff800007fff), UINT64_C(0xfffffff80000ffff), UINT64_C(0xfffffff80001ffff), UINT64_C(0xfffffff80003ffff), UINT64_C(0xfffffff80007ffff), UINT64_C(0xfffffff8000fffff), UINT64_C(0xfffffff8001fffff), UINT64_C(0xfffffff8003fffff), UINT64_C(0xfffffff8007fffff), UINT64_C(0xfffffff800ffffff), UINT64_C(0xfffffff801ffffff), UINT64_C(0xfffffff803ffffff), UINT64_C(0xfffffff807ffffff), UINT64_C(0xfffffff80fffffff), UINT64_C(0xfffffff81fffffff), UINT64_C(0xfffffff83fffffff), UINT64_C(0xfffffff87fffffff), UINT64_C(0xfffffff8ffffffff), UINT64_C(0xfffffff9ffffffff), UINT64_C(0xfffffffbffffffff) }, { UINT64_C(0xfffffff000000000), UINT64_C(0xfffffff000000001), UINT64_C(0xfffffff000000003), UINT64_C(0xfffffff000000007), UINT64_C(0xfffffff00000000f), UINT64_C(0xfffffff00000001f), UINT64_C(0xfffffff00000003f), UINT64_C(0xfffffff00000007f), UINT64_C(0xfffffff0000000ff), UINT64_C(0xfffffff0000001ff), UINT64_C(0xfffffff0000003ff), UINT64_C(0xfffffff0000007ff), UINT64_C(0xfffffff000000fff), UINT64_C(0xfffffff000001fff), UINT64_C(0xfffffff000003fff), UINT64_C(0xfffffff000007fff), UINT64_C(0xfffffff00000ffff), UINT64_C(0xfffffff00001ffff), UINT64_C(0xfffffff00003ffff), UINT64_C(0xfffffff00007ffff), UINT64_C(0xfffffff0000fffff), UINT64_C(0xfffffff0001fffff), UINT64_C(0xfffffff0003fffff), UINT64_C(0xfffffff0007fffff), UINT64_C(0xfffffff000ffffff), UINT64_C(0xfffffff001ffffff), UINT64_C(0xfffffff003ffffff), UINT64_C(0xfffffff007ffffff), UINT64_C(0xfffffff00fffffff), UINT64_C(0xfffffff01fffffff), UINT64_C(0xfffffff03fffffff), UINT64_C(0xfffffff07fffffff), UINT64_C(0xfffffff0ffffffff), UINT64_C(0xfffffff1ffffffff), UINT64_C(0xfffffff3ffffffff), UINT64_C(0xfffffff7ffffffff) }, { UINT64_C(0xffffffe000000000), UINT64_C(0xffffffe000000001), UINT64_C(0xffffffe000000003), UINT64_C(0xffffffe000000007), UINT64_C(0xffffffe00000000f), UINT64_C(0xffffffe00000001f), UINT64_C(0xffffffe00000003f), UINT64_C(0xffffffe00000007f), UINT64_C(0xffffffe0000000ff), UINT64_C(0xffffffe0000001ff), UINT64_C(0xffffffe0000003ff), UINT64_C(0xffffffe0000007ff), UINT64_C(0xffffffe000000fff), UINT64_C(0xffffffe000001fff), UINT64_C(0xffffffe000003fff), UINT64_C(0xffffffe000007fff), UINT64_C(0xffffffe00000ffff), UINT64_C(0xffffffe00001ffff), UINT64_C(0xffffffe00003ffff), UINT64_C(0xffffffe00007ffff), UINT64_C(0xffffffe0000fffff), UINT64_C(0xffffffe0001fffff), UINT64_C(0xffffffe0003fffff), UINT64_C(0xffffffe0007fffff), UINT64_C(0xffffffe000ffffff), UINT64_C(0xffffffe001ffffff), UINT64_C(0xffffffe003ffffff), UINT64_C(0xffffffe007ffffff), UINT64_C(0xffffffe00fffffff), UINT64_C(0xffffffe01fffffff), UINT64_C(0xffffffe03fffffff), UINT64_C(0xffffffe07fffffff), UINT64_C(0xffffffe0ffffffff), UINT64_C(0xffffffe1ffffffff), UINT64_C(0xffffffe3ffffffff), UINT64_C(0xffffffe7ffffffff), UINT64_C(0xffffffefffffffff) }, { UINT64_C(0xffffffc000000000), UINT64_C(0xffffffc000000001), UINT64_C(0xffffffc000000003), UINT64_C(0xffffffc000000007), UINT64_C(0xffffffc00000000f), UINT64_C(0xffffffc00000001f), UINT64_C(0xffffffc00000003f), UINT64_C(0xffffffc00000007f), UINT64_C(0xffffffc0000000ff), UINT64_C(0xffffffc0000001ff), UINT64_C(0xffffffc0000003ff), UINT64_C(0xffffffc0000007ff), UINT64_C(0xffffffc000000fff), UINT64_C(0xffffffc000001fff), UINT64_C(0xffffffc000003fff), UINT64_C(0xffffffc000007fff), UINT64_C(0xffffffc00000ffff), UINT64_C(0xffffffc00001ffff), UINT64_C(0xffffffc00003ffff), UINT64_C(0xffffffc00007ffff), UINT64_C(0xffffffc0000fffff), UINT64_C(0xffffffc0001fffff), UINT64_C(0xffffffc0003fffff), UINT64_C(0xffffffc0007fffff), UINT64_C(0xffffffc000ffffff), UINT64_C(0xffffffc001ffffff), UINT64_C(0xffffffc003ffffff), UINT64_C(0xffffffc007ffffff), UINT64_C(0xffffffc00fffffff), UINT64_C(0xffffffc01fffffff), UINT64_C(0xffffffc03fffffff), UINT64_C(0xffffffc07fffffff), UINT64_C(0xffffffc0ffffffff), UINT64_C(0xffffffc1ffffffff), UINT64_C(0xffffffc3ffffffff), UINT64_C(0xffffffc7ffffffff), UINT64_C(0xffffffcfffffffff), UINT64_C(0xffffffdfffffffff) }, { UINT64_C(0xffffff8000000000), UINT64_C(0xffffff8000000001), UINT64_C(0xffffff8000000003), UINT64_C(0xffffff8000000007), UINT64_C(0xffffff800000000f), UINT64_C(0xffffff800000001f), UINT64_C(0xffffff800000003f), UINT64_C(0xffffff800000007f), UINT64_C(0xffffff80000000ff), UINT64_C(0xffffff80000001ff), UINT64_C(0xffffff80000003ff), UINT64_C(0xffffff80000007ff), UINT64_C(0xffffff8000000fff), UINT64_C(0xffffff8000001fff), UINT64_C(0xffffff8000003fff), UINT64_C(0xffffff8000007fff), UINT64_C(0xffffff800000ffff), UINT64_C(0xffffff800001ffff), UINT64_C(0xffffff800003ffff), UINT64_C(0xffffff800007ffff), UINT64_C(0xffffff80000fffff), UINT64_C(0xffffff80001fffff), UINT64_C(0xffffff80003fffff), UINT64_C(0xffffff80007fffff), UINT64_C(0xffffff8000ffffff), UINT64_C(0xffffff8001ffffff), UINT64_C(0xffffff8003ffffff), UINT64_C(0xffffff8007ffffff), UINT64_C(0xffffff800fffffff), UINT64_C(0xffffff801fffffff), UINT64_C(0xffffff803fffffff), UINT64_C(0xffffff807fffffff), UINT64_C(0xffffff80ffffffff), UINT64_C(0xffffff81ffffffff), UINT64_C(0xffffff83ffffffff), UINT64_C(0xffffff87ffffffff), UINT64_C(0xffffff8fffffffff), UINT64_C(0xffffff9fffffffff), UINT64_C(0xffffffbfffffffff) }, { UINT64_C(0xffffff0000000000), UINT64_C(0xffffff0000000001), UINT64_C(0xffffff0000000003), UINT64_C(0xffffff0000000007), UINT64_C(0xffffff000000000f), UINT64_C(0xffffff000000001f), UINT64_C(0xffffff000000003f), UINT64_C(0xffffff000000007f), UINT64_C(0xffffff00000000ff), UINT64_C(0xffffff00000001ff), UINT64_C(0xffffff00000003ff), UINT64_C(0xffffff00000007ff), UINT64_C(0xffffff0000000fff), UINT64_C(0xffffff0000001fff), UINT64_C(0xffffff0000003fff), UINT64_C(0xffffff0000007fff), UINT64_C(0xffffff000000ffff), UINT64_C(0xffffff000001ffff), UINT64_C(0xffffff000003ffff), UINT64_C(0xffffff000007ffff), UINT64_C(0xffffff00000fffff), UINT64_C(0xffffff00001fffff), UINT64_C(0xffffff00003fffff), UINT64_C(0xffffff00007fffff), UINT64_C(0xffffff0000ffffff), UINT64_C(0xffffff0001ffffff), UINT64_C(0xffffff0003ffffff), UINT64_C(0xffffff0007ffffff), UINT64_C(0xffffff000fffffff), UINT64_C(0xffffff001fffffff), UINT64_C(0xffffff003fffffff), UINT64_C(0xffffff007fffffff), UINT64_C(0xffffff00ffffffff), UINT64_C(0xffffff01ffffffff), UINT64_C(0xffffff03ffffffff), UINT64_C(0xffffff07ffffffff), UINT64_C(0xffffff0fffffffff), UINT64_C(0xffffff1fffffffff), UINT64_C(0xffffff3fffffffff), UINT64_C(0xffffff7fffffffff) }, { UINT64_C(0xfffffe0000000000), UINT64_C(0xfffffe0000000001), UINT64_C(0xfffffe0000000003), UINT64_C(0xfffffe0000000007), UINT64_C(0xfffffe000000000f), UINT64_C(0xfffffe000000001f), UINT64_C(0xfffffe000000003f), UINT64_C(0xfffffe000000007f), UINT64_C(0xfffffe00000000ff), UINT64_C(0xfffffe00000001ff), UINT64_C(0xfffffe00000003ff), UINT64_C(0xfffffe00000007ff), UINT64_C(0xfffffe0000000fff), UINT64_C(0xfffffe0000001fff), UINT64_C(0xfffffe0000003fff), UINT64_C(0xfffffe0000007fff), UINT64_C(0xfffffe000000ffff), UINT64_C(0xfffffe000001ffff), UINT64_C(0xfffffe000003ffff), UINT64_C(0xfffffe000007ffff), UINT64_C(0xfffffe00000fffff), UINT64_C(0xfffffe00001fffff), UINT64_C(0xfffffe00003fffff), UINT64_C(0xfffffe00007fffff), UINT64_C(0xfffffe0000ffffff), UINT64_C(0xfffffe0001ffffff), UINT64_C(0xfffffe0003ffffff), UINT64_C(0xfffffe0007ffffff), UINT64_C(0xfffffe000fffffff), UINT64_C(0xfffffe001fffffff), UINT64_C(0xfffffe003fffffff), UINT64_C(0xfffffe007fffffff), UINT64_C(0xfffffe00ffffffff), UINT64_C(0xfffffe01ffffffff), UINT64_C(0xfffffe03ffffffff), UINT64_C(0xfffffe07ffffffff), UINT64_C(0xfffffe0fffffffff), UINT64_C(0xfffffe1fffffffff), UINT64_C(0xfffffe3fffffffff), UINT64_C(0xfffffe7fffffffff), UINT64_C(0xfffffeffffffffff) }, { UINT64_C(0xfffffc0000000000), UINT64_C(0xfffffc0000000001), UINT64_C(0xfffffc0000000003), UINT64_C(0xfffffc0000000007), UINT64_C(0xfffffc000000000f), UINT64_C(0xfffffc000000001f), UINT64_C(0xfffffc000000003f), UINT64_C(0xfffffc000000007f), UINT64_C(0xfffffc00000000ff), UINT64_C(0xfffffc00000001ff), UINT64_C(0xfffffc00000003ff), UINT64_C(0xfffffc00000007ff), UINT64_C(0xfffffc0000000fff), UINT64_C(0xfffffc0000001fff), UINT64_C(0xfffffc0000003fff), UINT64_C(0xfffffc0000007fff), UINT64_C(0xfffffc000000ffff), UINT64_C(0xfffffc000001ffff), UINT64_C(0xfffffc000003ffff), UINT64_C(0xfffffc000007ffff), UINT64_C(0xfffffc00000fffff), UINT64_C(0xfffffc00001fffff), UINT64_C(0xfffffc00003fffff), UINT64_C(0xfffffc00007fffff), UINT64_C(0xfffffc0000ffffff), UINT64_C(0xfffffc0001ffffff), UINT64_C(0xfffffc0003ffffff), UINT64_C(0xfffffc0007ffffff), UINT64_C(0xfffffc000fffffff), UINT64_C(0xfffffc001fffffff), UINT64_C(0xfffffc003fffffff), UINT64_C(0xfffffc007fffffff), UINT64_C(0xfffffc00ffffffff), UINT64_C(0xfffffc01ffffffff), UINT64_C(0xfffffc03ffffffff), UINT64_C(0xfffffc07ffffffff), UINT64_C(0xfffffc0fffffffff), UINT64_C(0xfffffc1fffffffff), UINT64_C(0xfffffc3fffffffff), UINT64_C(0xfffffc7fffffffff), UINT64_C(0xfffffcffffffffff), UINT64_C(0xfffffdffffffffff) }, { UINT64_C(0xfffff80000000000), UINT64_C(0xfffff80000000001), UINT64_C(0xfffff80000000003), UINT64_C(0xfffff80000000007), UINT64_C(0xfffff8000000000f), UINT64_C(0xfffff8000000001f), UINT64_C(0xfffff8000000003f), UINT64_C(0xfffff8000000007f), UINT64_C(0xfffff800000000ff), UINT64_C(0xfffff800000001ff), UINT64_C(0xfffff800000003ff), UINT64_C(0xfffff800000007ff), UINT64_C(0xfffff80000000fff), UINT64_C(0xfffff80000001fff), UINT64_C(0xfffff80000003fff), UINT64_C(0xfffff80000007fff), UINT64_C(0xfffff8000000ffff), UINT64_C(0xfffff8000001ffff), UINT64_C(0xfffff8000003ffff), UINT64_C(0xfffff8000007ffff), UINT64_C(0xfffff800000fffff), UINT64_C(0xfffff800001fffff), UINT64_C(0xfffff800003fffff), UINT64_C(0xfffff800007fffff), UINT64_C(0xfffff80000ffffff), UINT64_C(0xfffff80001ffffff), UINT64_C(0xfffff80003ffffff), UINT64_C(0xfffff80007ffffff), UINT64_C(0xfffff8000fffffff), UINT64_C(0xfffff8001fffffff), UINT64_C(0xfffff8003fffffff), UINT64_C(0xfffff8007fffffff), UINT64_C(0xfffff800ffffffff), UINT64_C(0xfffff801ffffffff), UINT64_C(0xfffff803ffffffff), UINT64_C(0xfffff807ffffffff), UINT64_C(0xfffff80fffffffff), UINT64_C(0xfffff81fffffffff), UINT64_C(0xfffff83fffffffff), UINT64_C(0xfffff87fffffffff), UINT64_C(0xfffff8ffffffffff), UINT64_C(0xfffff9ffffffffff), UINT64_C(0xfffffbffffffffff) }, { UINT64_C(0xfffff00000000000), UINT64_C(0xfffff00000000001), UINT64_C(0xfffff00000000003), UINT64_C(0xfffff00000000007), UINT64_C(0xfffff0000000000f), UINT64_C(0xfffff0000000001f), UINT64_C(0xfffff0000000003f), UINT64_C(0xfffff0000000007f), UINT64_C(0xfffff000000000ff), UINT64_C(0xfffff000000001ff), UINT64_C(0xfffff000000003ff), UINT64_C(0xfffff000000007ff), UINT64_C(0xfffff00000000fff), UINT64_C(0xfffff00000001fff), UINT64_C(0xfffff00000003fff), UINT64_C(0xfffff00000007fff), UINT64_C(0xfffff0000000ffff), UINT64_C(0xfffff0000001ffff), UINT64_C(0xfffff0000003ffff), UINT64_C(0xfffff0000007ffff), UINT64_C(0xfffff000000fffff), UINT64_C(0xfffff000001fffff), UINT64_C(0xfffff000003fffff), UINT64_C(0xfffff000007fffff), UINT64_C(0xfffff00000ffffff), UINT64_C(0xfffff00001ffffff), UINT64_C(0xfffff00003ffffff), UINT64_C(0xfffff00007ffffff), UINT64_C(0xfffff0000fffffff), UINT64_C(0xfffff0001fffffff), UINT64_C(0xfffff0003fffffff), UINT64_C(0xfffff0007fffffff), UINT64_C(0xfffff000ffffffff), UINT64_C(0xfffff001ffffffff), UINT64_C(0xfffff003ffffffff), UINT64_C(0xfffff007ffffffff), UINT64_C(0xfffff00fffffffff), UINT64_C(0xfffff01fffffffff), UINT64_C(0xfffff03fffffffff), UINT64_C(0xfffff07fffffffff), UINT64_C(0xfffff0ffffffffff), UINT64_C(0xfffff1ffffffffff), UINT64_C(0xfffff3ffffffffff), UINT64_C(0xfffff7ffffffffff) }, { UINT64_C(0xffffe00000000000), UINT64_C(0xffffe00000000001), UINT64_C(0xffffe00000000003), UINT64_C(0xffffe00000000007), UINT64_C(0xffffe0000000000f), UINT64_C(0xffffe0000000001f), UINT64_C(0xffffe0000000003f), UINT64_C(0xffffe0000000007f), UINT64_C(0xffffe000000000ff), UINT64_C(0xffffe000000001ff), UINT64_C(0xffffe000000003ff), UINT64_C(0xffffe000000007ff), UINT64_C(0xffffe00000000fff), UINT64_C(0xffffe00000001fff), UINT64_C(0xffffe00000003fff), UINT64_C(0xffffe00000007fff), UINT64_C(0xffffe0000000ffff), UINT64_C(0xffffe0000001ffff), UINT64_C(0xffffe0000003ffff), UINT64_C(0xffffe0000007ffff), UINT64_C(0xffffe000000fffff), UINT64_C(0xffffe000001fffff), UINT64_C(0xffffe000003fffff), UINT64_C(0xffffe000007fffff), UINT64_C(0xffffe00000ffffff), UINT64_C(0xffffe00001ffffff), UINT64_C(0xffffe00003ffffff), UINT64_C(0xffffe00007ffffff), UINT64_C(0xffffe0000fffffff), UINT64_C(0xffffe0001fffffff), UINT64_C(0xffffe0003fffffff), UINT64_C(0xffffe0007fffffff), UINT64_C(0xffffe000ffffffff), UINT64_C(0xffffe001ffffffff), UINT64_C(0xffffe003ffffffff), UINT64_C(0xffffe007ffffffff), UINT64_C(0xffffe00fffffffff), UINT64_C(0xffffe01fffffffff), UINT64_C(0xffffe03fffffffff), UINT64_C(0xffffe07fffffffff), UINT64_C(0xffffe0ffffffffff), UINT64_C(0xffffe1ffffffffff), UINT64_C(0xffffe3ffffffffff), UINT64_C(0xffffe7ffffffffff), UINT64_C(0xffffefffffffffff) }, { UINT64_C(0xffffc00000000000), UINT64_C(0xffffc00000000001), UINT64_C(0xffffc00000000003), UINT64_C(0xffffc00000000007), UINT64_C(0xffffc0000000000f), UINT64_C(0xffffc0000000001f), UINT64_C(0xffffc0000000003f), UINT64_C(0xffffc0000000007f), UINT64_C(0xffffc000000000ff), UINT64_C(0xffffc000000001ff), UINT64_C(0xffffc000000003ff), UINT64_C(0xffffc000000007ff), UINT64_C(0xffffc00000000fff), UINT64_C(0xffffc00000001fff), UINT64_C(0xffffc00000003fff), UINT64_C(0xffffc00000007fff), UINT64_C(0xffffc0000000ffff), UINT64_C(0xffffc0000001ffff), UINT64_C(0xffffc0000003ffff), UINT64_C(0xffffc0000007ffff), UINT64_C(0xffffc000000fffff), UINT64_C(0xffffc000001fffff), UINT64_C(0xffffc000003fffff), UINT64_C(0xffffc000007fffff), UINT64_C(0xffffc00000ffffff), UINT64_C(0xffffc00001ffffff), UINT64_C(0xffffc00003ffffff), UINT64_C(0xffffc00007ffffff), UINT64_C(0xffffc0000fffffff), UINT64_C(0xffffc0001fffffff), UINT64_C(0xffffc0003fffffff), UINT64_C(0xffffc0007fffffff), UINT64_C(0xffffc000ffffffff), UINT64_C(0xffffc001ffffffff), UINT64_C(0xffffc003ffffffff), UINT64_C(0xffffc007ffffffff), UINT64_C(0xffffc00fffffffff), UINT64_C(0xffffc01fffffffff), UINT64_C(0xffffc03fffffffff), UINT64_C(0xffffc07fffffffff), UINT64_C(0xffffc0ffffffffff), UINT64_C(0xffffc1ffffffffff), UINT64_C(0xffffc3ffffffffff), UINT64_C(0xffffc7ffffffffff), UINT64_C(0xffffcfffffffffff), UINT64_C(0xffffdfffffffffff) }, { UINT64_C(0xffff800000000000), UINT64_C(0xffff800000000001), UINT64_C(0xffff800000000003), UINT64_C(0xffff800000000007), UINT64_C(0xffff80000000000f), UINT64_C(0xffff80000000001f), UINT64_C(0xffff80000000003f), UINT64_C(0xffff80000000007f), UINT64_C(0xffff8000000000ff), UINT64_C(0xffff8000000001ff), UINT64_C(0xffff8000000003ff), UINT64_C(0xffff8000000007ff), UINT64_C(0xffff800000000fff), UINT64_C(0xffff800000001fff), UINT64_C(0xffff800000003fff), UINT64_C(0xffff800000007fff), UINT64_C(0xffff80000000ffff), UINT64_C(0xffff80000001ffff), UINT64_C(0xffff80000003ffff), UINT64_C(0xffff80000007ffff), UINT64_C(0xffff8000000fffff), UINT64_C(0xffff8000001fffff), UINT64_C(0xffff8000003fffff), UINT64_C(0xffff8000007fffff), UINT64_C(0xffff800000ffffff), UINT64_C(0xffff800001ffffff), UINT64_C(0xffff800003ffffff), UINT64_C(0xffff800007ffffff), UINT64_C(0xffff80000fffffff), UINT64_C(0xffff80001fffffff), UINT64_C(0xffff80003fffffff), UINT64_C(0xffff80007fffffff), UINT64_C(0xffff8000ffffffff), UINT64_C(0xffff8001ffffffff), UINT64_C(0xffff8003ffffffff), UINT64_C(0xffff8007ffffffff), UINT64_C(0xffff800fffffffff), UINT64_C(0xffff801fffffffff), UINT64_C(0xffff803fffffffff), UINT64_C(0xffff807fffffffff), UINT64_C(0xffff80ffffffffff), UINT64_C(0xffff81ffffffffff), UINT64_C(0xffff83ffffffffff), UINT64_C(0xffff87ffffffffff), UINT64_C(0xffff8fffffffffff), UINT64_C(0xffff9fffffffffff), UINT64_C(0xffffbfffffffffff) }, { UINT64_C(0xffff000000000000), UINT64_C(0xffff000000000001), UINT64_C(0xffff000000000003), UINT64_C(0xffff000000000007), UINT64_C(0xffff00000000000f), UINT64_C(0xffff00000000001f), UINT64_C(0xffff00000000003f), UINT64_C(0xffff00000000007f), UINT64_C(0xffff0000000000ff), UINT64_C(0xffff0000000001ff), UINT64_C(0xffff0000000003ff), UINT64_C(0xffff0000000007ff), UINT64_C(0xffff000000000fff), UINT64_C(0xffff000000001fff), UINT64_C(0xffff000000003fff), UINT64_C(0xffff000000007fff), UINT64_C(0xffff00000000ffff), UINT64_C(0xffff00000001ffff), UINT64_C(0xffff00000003ffff), UINT64_C(0xffff00000007ffff), UINT64_C(0xffff0000000fffff), UINT64_C(0xffff0000001fffff), UINT64_C(0xffff0000003fffff), UINT64_C(0xffff0000007fffff), UINT64_C(0xffff000000ffffff), UINT64_C(0xffff000001ffffff), UINT64_C(0xffff000003ffffff), UINT64_C(0xffff000007ffffff), UINT64_C(0xffff00000fffffff), UINT64_C(0xffff00001fffffff), UINT64_C(0xffff00003fffffff), UINT64_C(0xffff00007fffffff), UINT64_C(0xffff0000ffffffff), UINT64_C(0xffff0001ffffffff), UINT64_C(0xffff0003ffffffff), UINT64_C(0xffff0007ffffffff), UINT64_C(0xffff000fffffffff), UINT64_C(0xffff001fffffffff), UINT64_C(0xffff003fffffffff), UINT64_C(0xffff007fffffffff), UINT64_C(0xffff00ffffffffff), UINT64_C(0xffff01ffffffffff), UINT64_C(0xffff03ffffffffff), UINT64_C(0xffff07ffffffffff), UINT64_C(0xffff0fffffffffff), UINT64_C(0xffff1fffffffffff), UINT64_C(0xffff3fffffffffff), UINT64_C(0xffff7fffffffffff) }, { UINT64_C(0xfffe000000000000), UINT64_C(0xfffe000000000001), UINT64_C(0xfffe000000000003), UINT64_C(0xfffe000000000007), UINT64_C(0xfffe00000000000f), UINT64_C(0xfffe00000000001f), UINT64_C(0xfffe00000000003f), UINT64_C(0xfffe00000000007f), UINT64_C(0xfffe0000000000ff), UINT64_C(0xfffe0000000001ff), UINT64_C(0xfffe0000000003ff), UINT64_C(0xfffe0000000007ff), UINT64_C(0xfffe000000000fff), UINT64_C(0xfffe000000001fff), UINT64_C(0xfffe000000003fff), UINT64_C(0xfffe000000007fff), UINT64_C(0xfffe00000000ffff), UINT64_C(0xfffe00000001ffff), UINT64_C(0xfffe00000003ffff), UINT64_C(0xfffe00000007ffff), UINT64_C(0xfffe0000000fffff), UINT64_C(0xfffe0000001fffff), UINT64_C(0xfffe0000003fffff), UINT64_C(0xfffe0000007fffff), UINT64_C(0xfffe000000ffffff), UINT64_C(0xfffe000001ffffff), UINT64_C(0xfffe000003ffffff), UINT64_C(0xfffe000007ffffff), UINT64_C(0xfffe00000fffffff), UINT64_C(0xfffe00001fffffff), UINT64_C(0xfffe00003fffffff), UINT64_C(0xfffe00007fffffff), UINT64_C(0xfffe0000ffffffff), UINT64_C(0xfffe0001ffffffff), UINT64_C(0xfffe0003ffffffff), UINT64_C(0xfffe0007ffffffff), UINT64_C(0xfffe000fffffffff), UINT64_C(0xfffe001fffffffff), UINT64_C(0xfffe003fffffffff), UINT64_C(0xfffe007fffffffff), UINT64_C(0xfffe00ffffffffff), UINT64_C(0xfffe01ffffffffff), UINT64_C(0xfffe03ffffffffff), UINT64_C(0xfffe07ffffffffff), UINT64_C(0xfffe0fffffffffff), UINT64_C(0xfffe1fffffffffff), UINT64_C(0xfffe3fffffffffff), UINT64_C(0xfffe7fffffffffff), UINT64_C(0xfffeffffffffffff) }, { UINT64_C(0xfffc000000000000), UINT64_C(0xfffc000000000001), UINT64_C(0xfffc000000000003), UINT64_C(0xfffc000000000007), UINT64_C(0xfffc00000000000f), UINT64_C(0xfffc00000000001f), UINT64_C(0xfffc00000000003f), UINT64_C(0xfffc00000000007f), UINT64_C(0xfffc0000000000ff), UINT64_C(0xfffc0000000001ff), UINT64_C(0xfffc0000000003ff), UINT64_C(0xfffc0000000007ff), UINT64_C(0xfffc000000000fff), UINT64_C(0xfffc000000001fff), UINT64_C(0xfffc000000003fff), UINT64_C(0xfffc000000007fff), UINT64_C(0xfffc00000000ffff), UINT64_C(0xfffc00000001ffff), UINT64_C(0xfffc00000003ffff), UINT64_C(0xfffc00000007ffff), UINT64_C(0xfffc0000000fffff), UINT64_C(0xfffc0000001fffff), UINT64_C(0xfffc0000003fffff), UINT64_C(0xfffc0000007fffff), UINT64_C(0xfffc000000ffffff), UINT64_C(0xfffc000001ffffff), UINT64_C(0xfffc000003ffffff), UINT64_C(0xfffc000007ffffff), UINT64_C(0xfffc00000fffffff), UINT64_C(0xfffc00001fffffff), UINT64_C(0xfffc00003fffffff), UINT64_C(0xfffc00007fffffff), UINT64_C(0xfffc0000ffffffff), UINT64_C(0xfffc0001ffffffff), UINT64_C(0xfffc0003ffffffff), UINT64_C(0xfffc0007ffffffff), UINT64_C(0xfffc000fffffffff), UINT64_C(0xfffc001fffffffff), UINT64_C(0xfffc003fffffffff), UINT64_C(0xfffc007fffffffff), UINT64_C(0xfffc00ffffffffff), UINT64_C(0xfffc01ffffffffff), UINT64_C(0xfffc03ffffffffff), UINT64_C(0xfffc07ffffffffff), UINT64_C(0xfffc0fffffffffff), UINT64_C(0xfffc1fffffffffff), UINT64_C(0xfffc3fffffffffff), UINT64_C(0xfffc7fffffffffff), UINT64_C(0xfffcffffffffffff), UINT64_C(0xfffdffffffffffff) }, { UINT64_C(0xfff8000000000000), UINT64_C(0xfff8000000000001), UINT64_C(0xfff8000000000003), UINT64_C(0xfff8000000000007), UINT64_C(0xfff800000000000f), UINT64_C(0xfff800000000001f), UINT64_C(0xfff800000000003f), UINT64_C(0xfff800000000007f), UINT64_C(0xfff80000000000ff), UINT64_C(0xfff80000000001ff), UINT64_C(0xfff80000000003ff), UINT64_C(0xfff80000000007ff), UINT64_C(0xfff8000000000fff), UINT64_C(0xfff8000000001fff), UINT64_C(0xfff8000000003fff), UINT64_C(0xfff8000000007fff), UINT64_C(0xfff800000000ffff), UINT64_C(0xfff800000001ffff), UINT64_C(0xfff800000003ffff), UINT64_C(0xfff800000007ffff), UINT64_C(0xfff80000000fffff), UINT64_C(0xfff80000001fffff), UINT64_C(0xfff80000003fffff), UINT64_C(0xfff80000007fffff), UINT64_C(0xfff8000000ffffff), UINT64_C(0xfff8000001ffffff), UINT64_C(0xfff8000003ffffff), UINT64_C(0xfff8000007ffffff), UINT64_C(0xfff800000fffffff), UINT64_C(0xfff800001fffffff), UINT64_C(0xfff800003fffffff), UINT64_C(0xfff800007fffffff), UINT64_C(0xfff80000ffffffff), UINT64_C(0xfff80001ffffffff), UINT64_C(0xfff80003ffffffff), UINT64_C(0xfff80007ffffffff), UINT64_C(0xfff8000fffffffff), UINT64_C(0xfff8001fffffffff), UINT64_C(0xfff8003fffffffff), UINT64_C(0xfff8007fffffffff), UINT64_C(0xfff800ffffffffff), UINT64_C(0xfff801ffffffffff), UINT64_C(0xfff803ffffffffff), UINT64_C(0xfff807ffffffffff), UINT64_C(0xfff80fffffffffff), UINT64_C(0xfff81fffffffffff), UINT64_C(0xfff83fffffffffff), UINT64_C(0xfff87fffffffffff), UINT64_C(0xfff8ffffffffffff), UINT64_C(0xfff9ffffffffffff), UINT64_C(0xfffbffffffffffff) }, { UINT64_C(0xfff0000000000000), UINT64_C(0xfff0000000000001), UINT64_C(0xfff0000000000003), UINT64_C(0xfff0000000000007), UINT64_C(0xfff000000000000f), UINT64_C(0xfff000000000001f), UINT64_C(0xfff000000000003f), UINT64_C(0xfff000000000007f), UINT64_C(0xfff00000000000ff), UINT64_C(0xfff00000000001ff), UINT64_C(0xfff00000000003ff), UINT64_C(0xfff00000000007ff), UINT64_C(0xfff0000000000fff), UINT64_C(0xfff0000000001fff), UINT64_C(0xfff0000000003fff), UINT64_C(0xfff0000000007fff), UINT64_C(0xfff000000000ffff), UINT64_C(0xfff000000001ffff), UINT64_C(0xfff000000003ffff), UINT64_C(0xfff000000007ffff), UINT64_C(0xfff00000000fffff), UINT64_C(0xfff00000001fffff), UINT64_C(0xfff00000003fffff), UINT64_C(0xfff00000007fffff), UINT64_C(0xfff0000000ffffff), UINT64_C(0xfff0000001ffffff), UINT64_C(0xfff0000003ffffff), UINT64_C(0xfff0000007ffffff), UINT64_C(0xfff000000fffffff), UINT64_C(0xfff000001fffffff), UINT64_C(0xfff000003fffffff), UINT64_C(0xfff000007fffffff), UINT64_C(0xfff00000ffffffff), UINT64_C(0xfff00001ffffffff), UINT64_C(0xfff00003ffffffff), UINT64_C(0xfff00007ffffffff), UINT64_C(0xfff0000fffffffff), UINT64_C(0xfff0001fffffffff), UINT64_C(0xfff0003fffffffff), UINT64_C(0xfff0007fffffffff), UINT64_C(0xfff000ffffffffff), UINT64_C(0xfff001ffffffffff), UINT64_C(0xfff003ffffffffff), UINT64_C(0xfff007ffffffffff), UINT64_C(0xfff00fffffffffff), UINT64_C(0xfff01fffffffffff), UINT64_C(0xfff03fffffffffff), UINT64_C(0xfff07fffffffffff), UINT64_C(0xfff0ffffffffffff), UINT64_C(0xfff1ffffffffffff), UINT64_C(0xfff3ffffffffffff), UINT64_C(0xfff7ffffffffffff) }, { UINT64_C(0xffe0000000000000), UINT64_C(0xffe0000000000001), UINT64_C(0xffe0000000000003), UINT64_C(0xffe0000000000007), UINT64_C(0xffe000000000000f), UINT64_C(0xffe000000000001f), UINT64_C(0xffe000000000003f), UINT64_C(0xffe000000000007f), UINT64_C(0xffe00000000000ff), UINT64_C(0xffe00000000001ff), UINT64_C(0xffe00000000003ff), UINT64_C(0xffe00000000007ff), UINT64_C(0xffe0000000000fff), UINT64_C(0xffe0000000001fff), UINT64_C(0xffe0000000003fff), UINT64_C(0xffe0000000007fff), UINT64_C(0xffe000000000ffff), UINT64_C(0xffe000000001ffff), UINT64_C(0xffe000000003ffff), UINT64_C(0xffe000000007ffff), UINT64_C(0xffe00000000fffff), UINT64_C(0xffe00000001fffff), UINT64_C(0xffe00000003fffff), UINT64_C(0xffe00000007fffff), UINT64_C(0xffe0000000ffffff), UINT64_C(0xffe0000001ffffff), UINT64_C(0xffe0000003ffffff), UINT64_C(0xffe0000007ffffff), UINT64_C(0xffe000000fffffff), UINT64_C(0xffe000001fffffff), UINT64_C(0xffe000003fffffff), UINT64_C(0xffe000007fffffff), UINT64_C(0xffe00000ffffffff), UINT64_C(0xffe00001ffffffff), UINT64_C(0xffe00003ffffffff), UINT64_C(0xffe00007ffffffff), UINT64_C(0xffe0000fffffffff), UINT64_C(0xffe0001fffffffff), UINT64_C(0xffe0003fffffffff), UINT64_C(0xffe0007fffffffff), UINT64_C(0xffe000ffffffffff), UINT64_C(0xffe001ffffffffff), UINT64_C(0xffe003ffffffffff), UINT64_C(0xffe007ffffffffff), UINT64_C(0xffe00fffffffffff), UINT64_C(0xffe01fffffffffff), UINT64_C(0xffe03fffffffffff), UINT64_C(0xffe07fffffffffff), UINT64_C(0xffe0ffffffffffff), UINT64_C(0xffe1ffffffffffff), UINT64_C(0xffe3ffffffffffff), UINT64_C(0xffe7ffffffffffff), UINT64_C(0xffefffffffffffff) }, { UINT64_C(0xffc0000000000000), UINT64_C(0xffc0000000000001), UINT64_C(0xffc0000000000003), UINT64_C(0xffc0000000000007), UINT64_C(0xffc000000000000f), UINT64_C(0xffc000000000001f), UINT64_C(0xffc000000000003f), UINT64_C(0xffc000000000007f), UINT64_C(0xffc00000000000ff), UINT64_C(0xffc00000000001ff), UINT64_C(0xffc00000000003ff), UINT64_C(0xffc00000000007ff), UINT64_C(0xffc0000000000fff), UINT64_C(0xffc0000000001fff), UINT64_C(0xffc0000000003fff), UINT64_C(0xffc0000000007fff), UINT64_C(0xffc000000000ffff), UINT64_C(0xffc000000001ffff), UINT64_C(0xffc000000003ffff), UINT64_C(0xffc000000007ffff), UINT64_C(0xffc00000000fffff), UINT64_C(0xffc00000001fffff), UINT64_C(0xffc00000003fffff), UINT64_C(0xffc00000007fffff), UINT64_C(0xffc0000000ffffff), UINT64_C(0xffc0000001ffffff), UINT64_C(0xffc0000003ffffff), UINT64_C(0xffc0000007ffffff), UINT64_C(0xffc000000fffffff), UINT64_C(0xffc000001fffffff), UINT64_C(0xffc000003fffffff), UINT64_C(0xffc000007fffffff), UINT64_C(0xffc00000ffffffff), UINT64_C(0xffc00001ffffffff), UINT64_C(0xffc00003ffffffff), UINT64_C(0xffc00007ffffffff), UINT64_C(0xffc0000fffffffff), UINT64_C(0xffc0001fffffffff), UINT64_C(0xffc0003fffffffff), UINT64_C(0xffc0007fffffffff), UINT64_C(0xffc000ffffffffff), UINT64_C(0xffc001ffffffffff), UINT64_C(0xffc003ffffffffff), UINT64_C(0xffc007ffffffffff), UINT64_C(0xffc00fffffffffff), UINT64_C(0xffc01fffffffffff), UINT64_C(0xffc03fffffffffff), UINT64_C(0xffc07fffffffffff), UINT64_C(0xffc0ffffffffffff), UINT64_C(0xffc1ffffffffffff), UINT64_C(0xffc3ffffffffffff), UINT64_C(0xffc7ffffffffffff), UINT64_C(0xffcfffffffffffff), UINT64_C(0xffdfffffffffffff) }, { UINT64_C(0xff80000000000000), UINT64_C(0xff80000000000001), UINT64_C(0xff80000000000003), UINT64_C(0xff80000000000007), UINT64_C(0xff8000000000000f), UINT64_C(0xff8000000000001f), UINT64_C(0xff8000000000003f), UINT64_C(0xff8000000000007f), UINT64_C(0xff800000000000ff), UINT64_C(0xff800000000001ff), UINT64_C(0xff800000000003ff), UINT64_C(0xff800000000007ff), UINT64_C(0xff80000000000fff), UINT64_C(0xff80000000001fff), UINT64_C(0xff80000000003fff), UINT64_C(0xff80000000007fff), UINT64_C(0xff8000000000ffff), UINT64_C(0xff8000000001ffff), UINT64_C(0xff8000000003ffff), UINT64_C(0xff8000000007ffff), UINT64_C(0xff800000000fffff), UINT64_C(0xff800000001fffff), UINT64_C(0xff800000003fffff), UINT64_C(0xff800000007fffff), UINT64_C(0xff80000000ffffff), UINT64_C(0xff80000001ffffff), UINT64_C(0xff80000003ffffff), UINT64_C(0xff80000007ffffff), UINT64_C(0xff8000000fffffff), UINT64_C(0xff8000001fffffff), UINT64_C(0xff8000003fffffff), UINT64_C(0xff8000007fffffff), UINT64_C(0xff800000ffffffff), UINT64_C(0xff800001ffffffff), UINT64_C(0xff800003ffffffff), UINT64_C(0xff800007ffffffff), UINT64_C(0xff80000fffffffff), UINT64_C(0xff80001fffffffff), UINT64_C(0xff80003fffffffff), UINT64_C(0xff80007fffffffff), UINT64_C(0xff8000ffffffffff), UINT64_C(0xff8001ffffffffff), UINT64_C(0xff8003ffffffffff), UINT64_C(0xff8007ffffffffff), UINT64_C(0xff800fffffffffff), UINT64_C(0xff801fffffffffff), UINT64_C(0xff803fffffffffff), UINT64_C(0xff807fffffffffff), UINT64_C(0xff80ffffffffffff), UINT64_C(0xff81ffffffffffff), UINT64_C(0xff83ffffffffffff), UINT64_C(0xff87ffffffffffff), UINT64_C(0xff8fffffffffffff), UINT64_C(0xff9fffffffffffff), UINT64_C(0xffbfffffffffffff) }, { UINT64_C(0xff00000000000000), UINT64_C(0xff00000000000001), UINT64_C(0xff00000000000003), UINT64_C(0xff00000000000007), UINT64_C(0xff0000000000000f), UINT64_C(0xff0000000000001f), UINT64_C(0xff0000000000003f), UINT64_C(0xff0000000000007f), UINT64_C(0xff000000000000ff), UINT64_C(0xff000000000001ff), UINT64_C(0xff000000000003ff), UINT64_C(0xff000000000007ff), UINT64_C(0xff00000000000fff), UINT64_C(0xff00000000001fff), UINT64_C(0xff00000000003fff), UINT64_C(0xff00000000007fff), UINT64_C(0xff0000000000ffff), UINT64_C(0xff0000000001ffff), UINT64_C(0xff0000000003ffff), UINT64_C(0xff0000000007ffff), UINT64_C(0xff000000000fffff), UINT64_C(0xff000000001fffff), UINT64_C(0xff000000003fffff), UINT64_C(0xff000000007fffff), UINT64_C(0xff00000000ffffff), UINT64_C(0xff00000001ffffff), UINT64_C(0xff00000003ffffff), UINT64_C(0xff00000007ffffff), UINT64_C(0xff0000000fffffff), UINT64_C(0xff0000001fffffff), UINT64_C(0xff0000003fffffff), UINT64_C(0xff0000007fffffff), UINT64_C(0xff000000ffffffff), UINT64_C(0xff000001ffffffff), UINT64_C(0xff000003ffffffff), UINT64_C(0xff000007ffffffff), UINT64_C(0xff00000fffffffff), UINT64_C(0xff00001fffffffff), UINT64_C(0xff00003fffffffff), UINT64_C(0xff00007fffffffff), UINT64_C(0xff0000ffffffffff), UINT64_C(0xff0001ffffffffff), UINT64_C(0xff0003ffffffffff), UINT64_C(0xff0007ffffffffff), UINT64_C(0xff000fffffffffff), UINT64_C(0xff001fffffffffff), UINT64_C(0xff003fffffffffff), UINT64_C(0xff007fffffffffff), UINT64_C(0xff00ffffffffffff), UINT64_C(0xff01ffffffffffff), UINT64_C(0xff03ffffffffffff), UINT64_C(0xff07ffffffffffff), UINT64_C(0xff0fffffffffffff), UINT64_C(0xff1fffffffffffff), UINT64_C(0xff3fffffffffffff), UINT64_C(0xff7fffffffffffff) }, { UINT64_C(0xfe00000000000000), UINT64_C(0xfe00000000000001), UINT64_C(0xfe00000000000003), UINT64_C(0xfe00000000000007), UINT64_C(0xfe0000000000000f), UINT64_C(0xfe0000000000001f), UINT64_C(0xfe0000000000003f), UINT64_C(0xfe0000000000007f), UINT64_C(0xfe000000000000ff), UINT64_C(0xfe000000000001ff), UINT64_C(0xfe000000000003ff), UINT64_C(0xfe000000000007ff), UINT64_C(0xfe00000000000fff), UINT64_C(0xfe00000000001fff), UINT64_C(0xfe00000000003fff), UINT64_C(0xfe00000000007fff), UINT64_C(0xfe0000000000ffff), UINT64_C(0xfe0000000001ffff), UINT64_C(0xfe0000000003ffff), UINT64_C(0xfe0000000007ffff), UINT64_C(0xfe000000000fffff), UINT64_C(0xfe000000001fffff), UINT64_C(0xfe000000003fffff), UINT64_C(0xfe000000007fffff), UINT64_C(0xfe00000000ffffff), UINT64_C(0xfe00000001ffffff), UINT64_C(0xfe00000003ffffff), UINT64_C(0xfe00000007ffffff), UINT64_C(0xfe0000000fffffff), UINT64_C(0xfe0000001fffffff), UINT64_C(0xfe0000003fffffff), UINT64_C(0xfe0000007fffffff), UINT64_C(0xfe000000ffffffff), UINT64_C(0xfe000001ffffffff), UINT64_C(0xfe000003ffffffff), UINT64_C(0xfe000007ffffffff), UINT64_C(0xfe00000fffffffff), UINT64_C(0xfe00001fffffffff), UINT64_C(0xfe00003fffffffff), UINT64_C(0xfe00007fffffffff), UINT64_C(0xfe0000ffffffffff), UINT64_C(0xfe0001ffffffffff), UINT64_C(0xfe0003ffffffffff), UINT64_C(0xfe0007ffffffffff), UINT64_C(0xfe000fffffffffff), UINT64_C(0xfe001fffffffffff), UINT64_C(0xfe003fffffffffff), UINT64_C(0xfe007fffffffffff), UINT64_C(0xfe00ffffffffffff), UINT64_C(0xfe01ffffffffffff), UINT64_C(0xfe03ffffffffffff), UINT64_C(0xfe07ffffffffffff), UINT64_C(0xfe0fffffffffffff), UINT64_C(0xfe1fffffffffffff), UINT64_C(0xfe3fffffffffffff), UINT64_C(0xfe7fffffffffffff), UINT64_C(0xfeffffffffffffff) }, { UINT64_C(0xfc00000000000000), UINT64_C(0xfc00000000000001), UINT64_C(0xfc00000000000003), UINT64_C(0xfc00000000000007), UINT64_C(0xfc0000000000000f), UINT64_C(0xfc0000000000001f), UINT64_C(0xfc0000000000003f), UINT64_C(0xfc0000000000007f), UINT64_C(0xfc000000000000ff), UINT64_C(0xfc000000000001ff), UINT64_C(0xfc000000000003ff), UINT64_C(0xfc000000000007ff), UINT64_C(0xfc00000000000fff), UINT64_C(0xfc00000000001fff), UINT64_C(0xfc00000000003fff), UINT64_C(0xfc00000000007fff), UINT64_C(0xfc0000000000ffff), UINT64_C(0xfc0000000001ffff), UINT64_C(0xfc0000000003ffff), UINT64_C(0xfc0000000007ffff), UINT64_C(0xfc000000000fffff), UINT64_C(0xfc000000001fffff), UINT64_C(0xfc000000003fffff), UINT64_C(0xfc000000007fffff), UINT64_C(0xfc00000000ffffff), UINT64_C(0xfc00000001ffffff), UINT64_C(0xfc00000003ffffff), UINT64_C(0xfc00000007ffffff), UINT64_C(0xfc0000000fffffff), UINT64_C(0xfc0000001fffffff), UINT64_C(0xfc0000003fffffff), UINT64_C(0xfc0000007fffffff), UINT64_C(0xfc000000ffffffff), UINT64_C(0xfc000001ffffffff), UINT64_C(0xfc000003ffffffff), UINT64_C(0xfc000007ffffffff), UINT64_C(0xfc00000fffffffff), UINT64_C(0xfc00001fffffffff), UINT64_C(0xfc00003fffffffff), UINT64_C(0xfc00007fffffffff), UINT64_C(0xfc0000ffffffffff), UINT64_C(0xfc0001ffffffffff), UINT64_C(0xfc0003ffffffffff), UINT64_C(0xfc0007ffffffffff), UINT64_C(0xfc000fffffffffff), UINT64_C(0xfc001fffffffffff), UINT64_C(0xfc003fffffffffff), UINT64_C(0xfc007fffffffffff), UINT64_C(0xfc00ffffffffffff), UINT64_C(0xfc01ffffffffffff), UINT64_C(0xfc03ffffffffffff), UINT64_C(0xfc07ffffffffffff), UINT64_C(0xfc0fffffffffffff), UINT64_C(0xfc1fffffffffffff), UINT64_C(0xfc3fffffffffffff), UINT64_C(0xfc7fffffffffffff), UINT64_C(0xfcffffffffffffff), UINT64_C(0xfdffffffffffffff) }, { UINT64_C(0xf800000000000000), UINT64_C(0xf800000000000001), UINT64_C(0xf800000000000003), UINT64_C(0xf800000000000007), UINT64_C(0xf80000000000000f), UINT64_C(0xf80000000000001f), UINT64_C(0xf80000000000003f), UINT64_C(0xf80000000000007f), UINT64_C(0xf8000000000000ff), UINT64_C(0xf8000000000001ff), UINT64_C(0xf8000000000003ff), UINT64_C(0xf8000000000007ff), UINT64_C(0xf800000000000fff), UINT64_C(0xf800000000001fff), UINT64_C(0xf800000000003fff), UINT64_C(0xf800000000007fff), UINT64_C(0xf80000000000ffff), UINT64_C(0xf80000000001ffff), UINT64_C(0xf80000000003ffff), UINT64_C(0xf80000000007ffff), UINT64_C(0xf8000000000fffff), UINT64_C(0xf8000000001fffff), UINT64_C(0xf8000000003fffff), UINT64_C(0xf8000000007fffff), UINT64_C(0xf800000000ffffff), UINT64_C(0xf800000001ffffff), UINT64_C(0xf800000003ffffff), UINT64_C(0xf800000007ffffff), UINT64_C(0xf80000000fffffff), UINT64_C(0xf80000001fffffff), UINT64_C(0xf80000003fffffff), UINT64_C(0xf80000007fffffff), UINT64_C(0xf8000000ffffffff), UINT64_C(0xf8000001ffffffff), UINT64_C(0xf8000003ffffffff), UINT64_C(0xf8000007ffffffff), UINT64_C(0xf800000fffffffff), UINT64_C(0xf800001fffffffff), UINT64_C(0xf800003fffffffff), UINT64_C(0xf800007fffffffff), UINT64_C(0xf80000ffffffffff), UINT64_C(0xf80001ffffffffff), UINT64_C(0xf80003ffffffffff), UINT64_C(0xf80007ffffffffff), UINT64_C(0xf8000fffffffffff), UINT64_C(0xf8001fffffffffff), UINT64_C(0xf8003fffffffffff), UINT64_C(0xf8007fffffffffff), UINT64_C(0xf800ffffffffffff), UINT64_C(0xf801ffffffffffff), UINT64_C(0xf803ffffffffffff), UINT64_C(0xf807ffffffffffff), UINT64_C(0xf80fffffffffffff), UINT64_C(0xf81fffffffffffff), UINT64_C(0xf83fffffffffffff), UINT64_C(0xf87fffffffffffff), UINT64_C(0xf8ffffffffffffff), UINT64_C(0xf9ffffffffffffff), UINT64_C(0xfbffffffffffffff) }, { UINT64_C(0xf000000000000000), UINT64_C(0xf000000000000001), UINT64_C(0xf000000000000003), UINT64_C(0xf000000000000007), UINT64_C(0xf00000000000000f), UINT64_C(0xf00000000000001f), UINT64_C(0xf00000000000003f), UINT64_C(0xf00000000000007f), UINT64_C(0xf0000000000000ff), UINT64_C(0xf0000000000001ff), UINT64_C(0xf0000000000003ff), UINT64_C(0xf0000000000007ff), UINT64_C(0xf000000000000fff), UINT64_C(0xf000000000001fff), UINT64_C(0xf000000000003fff), UINT64_C(0xf000000000007fff), UINT64_C(0xf00000000000ffff), UINT64_C(0xf00000000001ffff), UINT64_C(0xf00000000003ffff), UINT64_C(0xf00000000007ffff), UINT64_C(0xf0000000000fffff), UINT64_C(0xf0000000001fffff), UINT64_C(0xf0000000003fffff), UINT64_C(0xf0000000007fffff), UINT64_C(0xf000000000ffffff), UINT64_C(0xf000000001ffffff), UINT64_C(0xf000000003ffffff), UINT64_C(0xf000000007ffffff), UINT64_C(0xf00000000fffffff), UINT64_C(0xf00000001fffffff), UINT64_C(0xf00000003fffffff), UINT64_C(0xf00000007fffffff), UINT64_C(0xf0000000ffffffff), UINT64_C(0xf0000001ffffffff), UINT64_C(0xf0000003ffffffff), UINT64_C(0xf0000007ffffffff), UINT64_C(0xf000000fffffffff), UINT64_C(0xf000001fffffffff), UINT64_C(0xf000003fffffffff), UINT64_C(0xf000007fffffffff), UINT64_C(0xf00000ffffffffff), UINT64_C(0xf00001ffffffffff), UINT64_C(0xf00003ffffffffff), UINT64_C(0xf00007ffffffffff), UINT64_C(0xf0000fffffffffff), UINT64_C(0xf0001fffffffffff), UINT64_C(0xf0003fffffffffff), UINT64_C(0xf0007fffffffffff), UINT64_C(0xf000ffffffffffff), UINT64_C(0xf001ffffffffffff), UINT64_C(0xf003ffffffffffff), UINT64_C(0xf007ffffffffffff), UINT64_C(0xf00fffffffffffff), UINT64_C(0xf01fffffffffffff), UINT64_C(0xf03fffffffffffff), UINT64_C(0xf07fffffffffffff), UINT64_C(0xf0ffffffffffffff), UINT64_C(0xf1ffffffffffffff), UINT64_C(0xf3ffffffffffffff), UINT64_C(0xf7ffffffffffffff) }, { UINT64_C(0xe000000000000000), UINT64_C(0xe000000000000001), UINT64_C(0xe000000000000003), UINT64_C(0xe000000000000007), UINT64_C(0xe00000000000000f), UINT64_C(0xe00000000000001f), UINT64_C(0xe00000000000003f), UINT64_C(0xe00000000000007f), UINT64_C(0xe0000000000000ff), UINT64_C(0xe0000000000001ff), UINT64_C(0xe0000000000003ff), UINT64_C(0xe0000000000007ff), UINT64_C(0xe000000000000fff), UINT64_C(0xe000000000001fff), UINT64_C(0xe000000000003fff), UINT64_C(0xe000000000007fff), UINT64_C(0xe00000000000ffff), UINT64_C(0xe00000000001ffff), UINT64_C(0xe00000000003ffff), UINT64_C(0xe00000000007ffff), UINT64_C(0xe0000000000fffff), UINT64_C(0xe0000000001fffff), UINT64_C(0xe0000000003fffff), UINT64_C(0xe0000000007fffff), UINT64_C(0xe000000000ffffff), UINT64_C(0xe000000001ffffff), UINT64_C(0xe000000003ffffff), UINT64_C(0xe000000007ffffff), UINT64_C(0xe00000000fffffff), UINT64_C(0xe00000001fffffff), UINT64_C(0xe00000003fffffff), UINT64_C(0xe00000007fffffff), UINT64_C(0xe0000000ffffffff), UINT64_C(0xe0000001ffffffff), UINT64_C(0xe0000003ffffffff), UINT64_C(0xe0000007ffffffff), UINT64_C(0xe000000fffffffff), UINT64_C(0xe000001fffffffff), UINT64_C(0xe000003fffffffff), UINT64_C(0xe000007fffffffff), UINT64_C(0xe00000ffffffffff), UINT64_C(0xe00001ffffffffff), UINT64_C(0xe00003ffffffffff), UINT64_C(0xe00007ffffffffff), UINT64_C(0xe0000fffffffffff), UINT64_C(0xe0001fffffffffff), UINT64_C(0xe0003fffffffffff), UINT64_C(0xe0007fffffffffff), UINT64_C(0xe000ffffffffffff), UINT64_C(0xe001ffffffffffff), UINT64_C(0xe003ffffffffffff), UINT64_C(0xe007ffffffffffff), UINT64_C(0xe00fffffffffffff), UINT64_C(0xe01fffffffffffff), UINT64_C(0xe03fffffffffffff), UINT64_C(0xe07fffffffffffff), UINT64_C(0xe0ffffffffffffff), UINT64_C(0xe1ffffffffffffff), UINT64_C(0xe3ffffffffffffff), UINT64_C(0xe7ffffffffffffff), UINT64_C(0xefffffffffffffff) }, { UINT64_C(0xc000000000000000), UINT64_C(0xc000000000000001), UINT64_C(0xc000000000000003), UINT64_C(0xc000000000000007), UINT64_C(0xc00000000000000f), UINT64_C(0xc00000000000001f), UINT64_C(0xc00000000000003f), UINT64_C(0xc00000000000007f), UINT64_C(0xc0000000000000ff), UINT64_C(0xc0000000000001ff), UINT64_C(0xc0000000000003ff), UINT64_C(0xc0000000000007ff), UINT64_C(0xc000000000000fff), UINT64_C(0xc000000000001fff), UINT64_C(0xc000000000003fff), UINT64_C(0xc000000000007fff), UINT64_C(0xc00000000000ffff), UINT64_C(0xc00000000001ffff), UINT64_C(0xc00000000003ffff), UINT64_C(0xc00000000007ffff), UINT64_C(0xc0000000000fffff), UINT64_C(0xc0000000001fffff), UINT64_C(0xc0000000003fffff), UINT64_C(0xc0000000007fffff), UINT64_C(0xc000000000ffffff), UINT64_C(0xc000000001ffffff), UINT64_C(0xc000000003ffffff), UINT64_C(0xc000000007ffffff), UINT64_C(0xc00000000fffffff), UINT64_C(0xc00000001fffffff), UINT64_C(0xc00000003fffffff), UINT64_C(0xc00000007fffffff), UINT64_C(0xc0000000ffffffff), UINT64_C(0xc0000001ffffffff), UINT64_C(0xc0000003ffffffff), UINT64_C(0xc0000007ffffffff), UINT64_C(0xc000000fffffffff), UINT64_C(0xc000001fffffffff), UINT64_C(0xc000003fffffffff), UINT64_C(0xc000007fffffffff), UINT64_C(0xc00000ffffffffff), UINT64_C(0xc00001ffffffffff), UINT64_C(0xc00003ffffffffff), UINT64_C(0xc00007ffffffffff), UINT64_C(0xc0000fffffffffff), UINT64_C(0xc0001fffffffffff), UINT64_C(0xc0003fffffffffff), UINT64_C(0xc0007fffffffffff), UINT64_C(0xc000ffffffffffff), UINT64_C(0xc001ffffffffffff), UINT64_C(0xc003ffffffffffff), UINT64_C(0xc007ffffffffffff), UINT64_C(0xc00fffffffffffff), UINT64_C(0xc01fffffffffffff), UINT64_C(0xc03fffffffffffff), UINT64_C(0xc07fffffffffffff), UINT64_C(0xc0ffffffffffffff), UINT64_C(0xc1ffffffffffffff), UINT64_C(0xc3ffffffffffffff), UINT64_C(0xc7ffffffffffffff), UINT64_C(0xcfffffffffffffff), UINT64_C(0xdfffffffffffffff) }, { UINT64_C(0x8000000000000000), UINT64_C(0x8000000000000001), UINT64_C(0x8000000000000003), UINT64_C(0x8000000000000007), UINT64_C(0x800000000000000f), UINT64_C(0x800000000000001f), UINT64_C(0x800000000000003f), UINT64_C(0x800000000000007f), UINT64_C(0x80000000000000ff), UINT64_C(0x80000000000001ff), UINT64_C(0x80000000000003ff), UINT64_C(0x80000000000007ff), UINT64_C(0x8000000000000fff), UINT64_C(0x8000000000001fff), UINT64_C(0x8000000000003fff), UINT64_C(0x8000000000007fff), UINT64_C(0x800000000000ffff), UINT64_C(0x800000000001ffff), UINT64_C(0x800000000003ffff), UINT64_C(0x800000000007ffff), UINT64_C(0x80000000000fffff), UINT64_C(0x80000000001fffff), UINT64_C(0x80000000003fffff), UINT64_C(0x80000000007fffff), UINT64_C(0x8000000000ffffff), UINT64_C(0x8000000001ffffff), UINT64_C(0x8000000003ffffff), UINT64_C(0x8000000007ffffff), UINT64_C(0x800000000fffffff), UINT64_C(0x800000001fffffff), UINT64_C(0x800000003fffffff), UINT64_C(0x800000007fffffff), UINT64_C(0x80000000ffffffff), UINT64_C(0x80000001ffffffff), UINT64_C(0x80000003ffffffff), UINT64_C(0x80000007ffffffff), UINT64_C(0x8000000fffffffff), UINT64_C(0x8000001fffffffff), UINT64_C(0x8000003fffffffff), UINT64_C(0x8000007fffffffff), UINT64_C(0x800000ffffffffff), UINT64_C(0x800001ffffffffff), UINT64_C(0x800003ffffffffff), UINT64_C(0x800007ffffffffff), UINT64_C(0x80000fffffffffff), UINT64_C(0x80001fffffffffff), UINT64_C(0x80003fffffffffff), UINT64_C(0x80007fffffffffff), UINT64_C(0x8000ffffffffffff), UINT64_C(0x8001ffffffffffff), UINT64_C(0x8003ffffffffffff), UINT64_C(0x8007ffffffffffff), UINT64_C(0x800fffffffffffff), UINT64_C(0x801fffffffffffff), UINT64_C(0x803fffffffffffff), UINT64_C(0x807fffffffffffff), UINT64_C(0x80ffffffffffffff), UINT64_C(0x81ffffffffffffff), UINT64_C(0x83ffffffffffffff), UINT64_C(0x87ffffffffffffff), UINT64_C(0x8fffffffffffffff), UINT64_C(0x9fffffffffffffff), UINT64_C(0xbfffffffffffffff) }, { UINT64_C(0x0), UINT64_C(0x1), UINT64_C(0x3), UINT64_C(0x7), UINT64_C(0xf), UINT64_C(0x1f), UINT64_C(0x3f), UINT64_C(0x7f), UINT64_C(0xff), UINT64_C(0x1ff), UINT64_C(0x3ff), UINT64_C(0x7ff), UINT64_C(0xfff), UINT64_C(0x1fff), UINT64_C(0x3fff), UINT64_C(0x7fff), UINT64_C(0xffff), UINT64_C(0x1ffff), UINT64_C(0x3ffff), UINT64_C(0x7ffff), UINT64_C(0xfffff), UINT64_C(0x1fffff), UINT64_C(0x3fffff), UINT64_C(0x7fffff), UINT64_C(0xffffff), UINT64_C(0x1ffffff), UINT64_C(0x3ffffff), UINT64_C(0x7ffffff), UINT64_C(0xfffffff), UINT64_C(0x1fffffff), UINT64_C(0x3fffffff), UINT64_C(0x7fffffff), UINT64_C(0xffffffff), UINT64_C(0x1ffffffff), UINT64_C(0x3ffffffff), UINT64_C(0x7ffffffff), UINT64_C(0xfffffffff), UINT64_C(0x1fffffffff), UINT64_C(0x3fffffffff), UINT64_C(0x7fffffffff), UINT64_C(0xffffffffff), UINT64_C(0x1ffffffffff), UINT64_C(0x3ffffffffff), UINT64_C(0x7ffffffffff), UINT64_C(0xfffffffffff), UINT64_C(0x1fffffffffff), UINT64_C(0x3fffffffffff), UINT64_C(0x7fffffffffff), UINT64_C(0xffffffffffff), UINT64_C(0x1ffffffffffff), UINT64_C(0x3ffffffffffff), UINT64_C(0x7ffffffffffff), UINT64_C(0xfffffffffffff), UINT64_C(0x1fffffffffffff), UINT64_C(0x3fffffffffffff), UINT64_C(0x7fffffffffffff), UINT64_C(0xffffffffffffff), UINT64_C(0x1ffffffffffffff), UINT64_C(0x3ffffffffffffff), UINT64_C(0x7ffffffffffffff), UINT64_C(0xfffffffffffffff), UINT64_C(0x1fffffffffffffff), UINT64_C(0x3fffffffffffffff), UINT64_C(0x7fffffffffffffff) } }; } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/int/sc_unsigned.h0000644000175000017500000027032114342422106022104 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_unsigned.h -- Arbitrary precision unsigned arithmetic. This file includes the definitions of sc_unsigned_bitref, sc_unsigned_subref, and sc_unsigned classes. The first two classes are proxy classes to reference one bit and a range of bits of a sc_unsigned number, respectively. An sc_signed number has the sign-magnitude representation internally. However, its interface guarantees a 2's-complement representation. The sign-magnitude representation is chosen because of its efficiency: The sc_signed and sc_unsigned types are optimized for arithmetic rather than bitwise operations. For arithmetic operations, the sign-magnitude representation performs better. It is also important to note that an sc_unsigned number with n bits is equivalent to an sc_signed non-negative number with n + 1 bits. The implementations of sc_signed and sc_unsigned classes are almost identical: Most of the member and friend functions are defined in sc_nbcommon.cpp and sc_nbfriends.cpp so that they can be shared by both of these classes. These functions are chosed by defining a few macros before including them such as IF_SC_SIGNED and CLASS_TYPE. Our implementation choices are mostly dictated by performance considerations in that we tried to provide the most efficient sc_signed and sc_unsigned types without compromising their interface. For the behavior of operators, we have two semantics: the old and new. The most important difference between these two semantics is that the old semantics is closer to C/C++ semantics in that the result type of a binary operator on unsigned and signed arguments is unsigned; the new semantics, on the other hand, requires the result type be signed. The new semantics is required by the VSIA C/C++ data types standard. We have implemented the new semantics. Original Author: Ali Dasdan, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_unsigned.h,v $ // Revision 1.4 2011/08/24 22:05:46 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.3 2011/02/18 20:19:15 acg // Andy Goodrich: updating Copyright notice. // // Revision 1.2 2009/02/28 00:26:26 acg // Andy Goodrich: bug fixes. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.5 2006/05/08 17:50:02 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.4 2006/03/13 20:25:27 acg // Andy Goodrich: Addition of function declarations, e.g., xor_signed_friend() // to keep gcc 4.x happy. // // Revision 1.3 2006/01/13 18:49:32 acg // Added $Log command so that CVS check in comments are reproduced in the // source. // #ifndef SC_UNSIGNED_H #define SC_UNSIGNED_H #include "sysc/kernel/sc_object.h" #include "sysc/datatypes/misc/sc_value_base.h" #include "sysc/utils/sc_temporary.h" #include "sysc/datatypes/int/sc_length_param.h" #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/datatypes/int/sc_nbutils.h" #include "sysc/datatypes/int/sc_nbexterns.h" #include "sysc/utils/sc_temporary.h" namespace sc_dt { // classes defined in this module class sc_unsigned_bitref_r; class sc_unsigned_bitref; class sc_unsigned_subref_r; class sc_unsigned_subref; class sc_concatref; class sc_unsigned; // forward class declarations class sc_bv_base; class sc_lv_base; class sc_int_base; class sc_uint_base; class sc_int_subref_r; class sc_uint_subref_r; class sc_signed; class sc_signed_subref_r; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; } // namespace sc_dt // extern template instantiations namespace sc_core { SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; } // namespace sc_core namespace sc_dt { // Helper function declarions int compare_unsigned(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd, small_type if_u_signed=0, small_type if_v_signed=0); sc_unsigned add_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_unsigned sub_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_unsigned mul_unsigned_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_unsigned div_unsigned_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_unsigned mod_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); sc_unsigned and_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_unsigned or_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); sc_unsigned xor_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); // friend operator declarations // ARITHMETIC OPERATORS: // ADDition operators: SC_API sc_signed operator + (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator + (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator + (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator + (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator + (const sc_unsigned& u, uint64 v); SC_API sc_signed operator + (const sc_unsigned& u, long v); SC_API sc_unsigned operator + (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator + (const sc_unsigned& u, int v); inline sc_unsigned operator + (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator + (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator + (uint64 u, const sc_unsigned& v); SC_API sc_signed operator + (long u, const sc_unsigned& v); SC_API sc_unsigned operator + (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator + (int u, const sc_unsigned& v); inline sc_unsigned operator + (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator + (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator + (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator + (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator + (const sc_int_base& u, const sc_unsigned& v); // SUBtraction operators: SC_API sc_signed operator - (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator - (const sc_signed& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_unsigned& u, int64 v); SC_API sc_signed operator - (const sc_unsigned& u, uint64 v); SC_API sc_signed operator - (const sc_unsigned& u, long v); SC_API sc_signed operator - (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator - (const sc_unsigned& u, int v); SC_API sc_signed operator - (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator - (int64 u, const sc_unsigned& v); SC_API sc_signed operator - (uint64 u, const sc_unsigned& v); SC_API sc_signed operator - (long u, const sc_unsigned& v); SC_API sc_signed operator - (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator - (int u, const sc_unsigned& v); SC_API sc_signed operator - (unsigned int u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator - (const sc_unsigned& u, const sc_int_base& v); SC_API sc_signed operator - (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator - (const sc_int_base& u, const sc_unsigned& v); // MULtiplication operators: SC_API sc_signed operator * (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator * (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator * (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator * (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator * (const sc_unsigned& u, uint64 v); SC_API sc_signed operator * (const sc_unsigned& u, long v); SC_API sc_unsigned operator * (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator * (const sc_unsigned& u, int v); inline sc_unsigned operator * (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator * (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator * (uint64 u, const sc_unsigned& v); SC_API sc_signed operator * (long u, const sc_unsigned& v); SC_API sc_unsigned operator * (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator * (int u, const sc_unsigned& v); inline sc_unsigned operator * (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator * (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator * (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator * (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator * (const sc_int_base& u, const sc_unsigned& v); // DIVision operators: SC_API sc_signed operator / (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator / (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator / (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator / (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator / (const sc_unsigned& u, uint64 v); SC_API sc_signed operator / (const sc_unsigned& u, long v); SC_API sc_unsigned operator / (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator / (const sc_unsigned& u, int v); inline sc_unsigned operator / (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator / (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator / (uint64 u, const sc_unsigned& v); SC_API sc_signed operator / (long u, const sc_unsigned& v); SC_API sc_unsigned operator / (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator / (int u, const sc_unsigned& v); inline sc_unsigned operator / (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator / (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator / (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator / (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator / (const sc_int_base& u, const sc_unsigned& v); // MODulo operators: SC_API sc_signed operator % (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator % (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator % (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator % (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator % (const sc_unsigned& u, uint64 v); SC_API sc_signed operator % (const sc_unsigned& u, long v); SC_API sc_unsigned operator % (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator % (const sc_unsigned& u, int v); inline sc_unsigned operator % (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator % (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator % (uint64 u, const sc_unsigned& v); SC_API sc_signed operator % (long u, const sc_unsigned& v); SC_API sc_unsigned operator % (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator % (int u, const sc_unsigned& v); inline sc_unsigned operator % (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator % (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator % (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator % (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator % (const sc_int_base& u, const sc_unsigned& v); // BITWISE OPERATORS: // Bitwise AND operators: SC_API sc_signed operator & (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator & (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator & (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator & (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator & (const sc_unsigned& u, uint64 v); SC_API sc_signed operator & (const sc_unsigned& u, long v); SC_API sc_unsigned operator & (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator & (const sc_unsigned& u, int v); inline sc_unsigned operator & (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator & (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator & (uint64 u, const sc_unsigned& v); SC_API sc_signed operator & (long u, const sc_unsigned& v); SC_API sc_unsigned operator & (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator & (int u, const sc_unsigned& v); inline sc_unsigned operator & (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator & (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator & (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator & (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator & (const sc_int_base& u, const sc_unsigned& v); // Bitwise OR operators: SC_API sc_signed operator | (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator | (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator | (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator | (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator | (const sc_unsigned& u, uint64 v); SC_API sc_signed operator | (const sc_unsigned& u, long v); SC_API sc_unsigned operator | (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator | (const sc_unsigned& u, int v); inline sc_unsigned operator | (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator | (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator | (uint64 u, const sc_unsigned& v); SC_API sc_signed operator | (long u, const sc_unsigned& v); SC_API sc_unsigned operator | (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator | (int u, const sc_unsigned& v); inline sc_unsigned operator | (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator | (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator | (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator | (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator | (const sc_int_base& u, const sc_unsigned& v); // Bitwise XOR operators: SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator ^ (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator ^ (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_signed operator ^ (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator ^ (const sc_unsigned& u, uint64 v); SC_API sc_signed operator ^ (const sc_unsigned& u, long v); SC_API sc_unsigned operator ^ (const sc_unsigned& u, unsigned long v); SC_API sc_signed operator ^ (const sc_unsigned& u, int v); inline sc_unsigned operator ^ (const sc_unsigned& u, unsigned int v); SC_API sc_signed operator ^ (int64 u, const sc_unsigned& v); SC_API sc_unsigned operator ^ (uint64 u, const sc_unsigned& v); SC_API sc_signed operator ^ (long u, const sc_unsigned& v); SC_API sc_unsigned operator ^ (unsigned long u, const sc_unsigned& v); SC_API sc_signed operator ^ (int u, const sc_unsigned& v); inline sc_unsigned operator ^ (unsigned int u, const sc_unsigned& v); SC_API sc_unsigned operator ^ (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_int_base& v); SC_API sc_unsigned operator ^ (const sc_uint_base& u, const sc_unsigned& v); SC_API sc_signed operator ^ (const sc_int_base& u, const sc_unsigned& v); // SHIFT OPERATORS: // LEFT SHIFT operators: SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator << (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_unsigned operator << (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator << (const sc_unsigned& u, uint64 v); SC_API sc_unsigned operator << (const sc_unsigned& u, long v); SC_API sc_unsigned operator << (const sc_unsigned& u, unsigned long v); inline sc_unsigned operator << (const sc_unsigned& u, int v); inline sc_unsigned operator << (const sc_unsigned& u, unsigned int v); SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_uint_base& v); SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_int_base& v); // RIGHT SHIFT operators: SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_signed& v); SC_API sc_signed operator >> (const sc_signed& u, const sc_unsigned& v); SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_unsigned& v); SC_API sc_unsigned operator >> (const sc_unsigned& u, int64 v); SC_API sc_unsigned operator >> (const sc_unsigned& u, uint64 v); SC_API sc_unsigned operator >> (const sc_unsigned& u, long v); SC_API sc_unsigned operator >> (const sc_unsigned& u, unsigned long v); inline sc_unsigned operator >> (const sc_unsigned& u, int v); inline sc_unsigned operator >> (const sc_unsigned& u, unsigned int v); SC_API sc_unsigned operator >> ( const sc_unsigned& , const sc_uint_base& ); SC_API sc_unsigned operator >> ( const sc_unsigned&, const sc_int_base& ); // Unary arithmetic operators SC_API sc_unsigned operator + (const sc_unsigned& u); SC_API sc_signed operator - (const sc_unsigned& u); // LOGICAL OPERATORS: // Logical EQUAL operators: SC_API bool operator == (const sc_unsigned& u, const sc_signed& v); SC_API bool operator == (const sc_signed& u, const sc_unsigned& v); SC_API bool operator == (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator == (const sc_unsigned& u, int64 v); SC_API bool operator == (const sc_unsigned& u, uint64 v); SC_API bool operator == (const sc_unsigned& u, long v); SC_API bool operator == (const sc_unsigned& u, unsigned long v); inline bool operator == (const sc_unsigned& u, int v); inline bool operator == (const sc_unsigned& u, unsigned int v); SC_API bool operator == (int64 u, const sc_unsigned& v); SC_API bool operator == (uint64 u, const sc_unsigned& v); SC_API bool operator == (long u, const sc_unsigned& v); SC_API bool operator == (unsigned long u, const sc_unsigned& v); inline bool operator == (int u, const sc_unsigned& v); inline bool operator == (unsigned int u, const sc_unsigned& v) ; SC_API bool operator == (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator == (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator == (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator == (const sc_int_base& u, const sc_unsigned& v); // Logical NOT_EQUAL operators: SC_API bool operator != (const sc_unsigned& u, const sc_signed& v); SC_API bool operator != (const sc_signed& u, const sc_unsigned& v); SC_API bool operator != (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator != (const sc_unsigned& u, int64 v); SC_API bool operator != (const sc_unsigned& u, uint64 v); SC_API bool operator != (const sc_unsigned& u, long v); SC_API bool operator != (const sc_unsigned& u, unsigned long v); inline bool operator != (const sc_unsigned& u, int v); inline bool operator != (const sc_unsigned& u, unsigned int v); SC_API bool operator != (int64 u, const sc_unsigned& v); SC_API bool operator != (uint64 u, const sc_unsigned& v); SC_API bool operator != (long u, const sc_unsigned& v); SC_API bool operator != (unsigned long u, const sc_unsigned& v); inline bool operator != (int u, const sc_unsigned& v); inline bool operator != (unsigned int u, const sc_unsigned& v); SC_API bool operator != (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator != (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator != (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator != (const sc_int_base& u, const sc_unsigned& v); // Logical LESS_THAN operators: SC_API bool operator < (const sc_unsigned& u, const sc_signed& v); SC_API bool operator < (const sc_signed& u, const sc_unsigned& v); SC_API bool operator < (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator < (const sc_unsigned& u, int64 v); SC_API bool operator < (const sc_unsigned& u, uint64 v); SC_API bool operator < (const sc_unsigned& u, long v); SC_API bool operator < (const sc_unsigned& u, unsigned long v); inline bool operator < (const sc_unsigned& u, int v); inline bool operator < (const sc_unsigned& u, unsigned int v); SC_API bool operator < (int64 u, const sc_unsigned& v); SC_API bool operator < (uint64 u, const sc_unsigned& v); SC_API bool operator < (long u, const sc_unsigned& v); SC_API bool operator < (unsigned long u, const sc_unsigned& v); inline bool operator < (int u, const sc_unsigned& v); inline bool operator < (unsigned int u, const sc_unsigned& v); SC_API bool operator < (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator < (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator < (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator < (const sc_int_base& u, const sc_unsigned& v); // Logical LESS_THAN_AND_EQUAL operators: SC_API bool operator <= (const sc_unsigned& u, const sc_signed& v); SC_API bool operator <= (const sc_signed& u, const sc_unsigned& v); SC_API bool operator <= (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator <= (const sc_unsigned& u, int64 v); SC_API bool operator <= (const sc_unsigned& u, uint64 v); SC_API bool operator <= (const sc_unsigned& u, long v); SC_API bool operator <= (const sc_unsigned& u, unsigned long v); inline bool operator <= (const sc_unsigned& u, int v); inline bool operator <= (const sc_unsigned& u, unsigned int v); SC_API bool operator <= (int64 u, const sc_unsigned& v); SC_API bool operator <= (uint64 u, const sc_unsigned& v); SC_API bool operator <= (long u, const sc_unsigned& v); SC_API bool operator <= (unsigned long u, const sc_unsigned& v); inline bool operator <= (int u, const sc_unsigned& v); inline bool operator <= (unsigned int u, const sc_unsigned& v); SC_API bool operator <= (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator <= (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator <= (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator <= (const sc_int_base& u, const sc_unsigned& v); // Logical GREATER_THAN operators: SC_API bool operator > (const sc_unsigned& u, const sc_signed& v); SC_API bool operator > (const sc_signed& u, const sc_unsigned& v); SC_API bool operator > (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator > (const sc_unsigned& u, int64 v); SC_API bool operator > (const sc_unsigned& u, uint64 v); SC_API bool operator > (const sc_unsigned& u, long v); SC_API bool operator > (const sc_unsigned& u, unsigned long v); inline bool operator > (const sc_unsigned& u, int v); inline bool operator > (const sc_unsigned& u, unsigned int v); SC_API bool operator > (int64 u, const sc_unsigned& v); SC_API bool operator > (uint64 u, const sc_unsigned& v); SC_API bool operator > (long u, const sc_unsigned& v); SC_API bool operator > (unsigned long u, const sc_unsigned& v); inline bool operator > (int u, const sc_unsigned& v); inline bool operator > (unsigned int u, const sc_unsigned& v); SC_API bool operator > (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator > (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator > (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator > (const sc_int_base& u, const sc_unsigned& v); // Logical GREATER_THAN_AND_EQUAL operators: SC_API bool operator >= (const sc_unsigned& u, const sc_signed& v); SC_API bool operator >= (const sc_signed& u, const sc_unsigned& v); SC_API bool operator >= (const sc_unsigned& u, const sc_unsigned& v); SC_API bool operator >= (const sc_unsigned& u, int64 v); SC_API bool operator >= (const sc_unsigned& u, uint64 v); SC_API bool operator >= (const sc_unsigned& u, long v); SC_API bool operator >= (const sc_unsigned& u, unsigned long v); inline bool operator >= (const sc_unsigned& u, int v); inline bool operator >= (const sc_unsigned& u, unsigned int v); SC_API bool operator >= (int64 u, const sc_unsigned& v); SC_API bool operator >= (uint64 u, const sc_unsigned& v); SC_API bool operator >= (long u, const sc_unsigned& v); SC_API bool operator >= (unsigned long u, const sc_unsigned& v); inline bool operator >= (int u, const sc_unsigned& v); inline bool operator >= (unsigned int u, const sc_unsigned& v); SC_API bool operator >= (const sc_unsigned& u, const sc_uint_base& v); SC_API bool operator >= (const sc_unsigned& u, const sc_int_base& v); SC_API bool operator >= (const sc_uint_base& u, const sc_unsigned& v); SC_API bool operator >= (const sc_int_base& u, const sc_unsigned& v); // Bitwise NOT operator (unary). SC_API sc_unsigned operator ~ (const sc_unsigned& u); // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref_r // // Proxy class for sc_unsigned bit selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_unsigned_bitref_r : public sc_value_base { friend class sc_unsigned; protected: // construction and initialization: sc_unsigned_bitref_r() : sc_value_base(), m_index(0), m_obj_p(0) {} void initialize( const sc_unsigned* obj_p, int index_ ) { m_obj_p = const_cast( obj_p ); m_index = index_; } public: // destructor virtual ~sc_unsigned_bitref_r() {} // copy constructor sc_unsigned_bitref_r( const sc_unsigned_bitref_r& a ) : sc_value_base(a), m_index( a.m_index ), m_obj_p( a.m_obj_p ) {} // capacity int length() const { return 1; } // implicit conversion to bool operator uint64 () const; bool operator ! () const; bool operator ~ () const; // explicit conversions uint64 value() const { return operator uint64(); } bool to_bool() const { return operator uint64(); } // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return 1; } virtual uint64 concat_get_uint64() const { return (uint64)operator uint64(); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; dst_p[word_i] &= ~bit_mask; return false; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { int bit_mask = 1 << (low_i % BITS_PER_DIGIT); bool result; // True if non-zero. int word_i = low_i / BITS_PER_DIGIT; if ( operator uint64() ) { dst_p[word_i] |= bit_mask; result = true; } else { dst_p[word_i] &= ~bit_mask; result = false; } return result; } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_bool(); } protected: int m_index; sc_unsigned* m_obj_p; private: // disabled const sc_unsigned_bitref_r& operator = ( const sc_unsigned_bitref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_unsigned_bitref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref // // Proxy class for sc_unsigned bit selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_unsigned_bitref : public sc_unsigned_bitref_r { friend class sc_unsigned; friend class sc_core::sc_vpool; protected: // construction sc_unsigned_bitref() : sc_unsigned_bitref_r() {} public: // copy constructor sc_unsigned_bitref( const sc_unsigned_bitref& a ) : sc_unsigned_bitref_r( a ) {} // assignment operators const sc_unsigned_bitref& operator = ( const sc_unsigned_bitref_r& ); const sc_unsigned_bitref& operator = ( const sc_unsigned_bitref& ); const sc_unsigned_bitref& operator = ( bool ); const sc_unsigned_bitref& operator &= ( bool ); const sc_unsigned_bitref& operator |= ( bool ); const sc_unsigned_bitref& operator ^= ( bool ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_unsigned_bitref& ); // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref_r // // Proxy class for sc_unsigned part selection (r-value only). // ---------------------------------------------------------------------------- class SC_API sc_unsigned_subref_r : public sc_value_base { friend class sc_signed; friend class sc_unsigned; friend class sc_unsigned_signal; protected: // constructor sc_unsigned_subref_r() : sc_value_base(), m_left(0), m_obj_p(0), m_right(0) {} void initialize( const sc_unsigned* obj_p, int left_, int right_ ) { m_obj_p = const_cast( obj_p ); m_left = left_; m_right = right_; } public: // destructor virtual ~sc_unsigned_subref_r() {} // copy constructor sc_unsigned_subref_r( const sc_unsigned_subref_r& a ) : sc_value_base(a), m_left( a.m_left ), m_obj_p( a.m_obj_p ), m_right( a.m_right ) {} // capacity int length() const { return m_left >= m_right ? (m_left-m_right+1) : (m_right-m_left+1 ); } // implicit conversion to sc_unsigned operator sc_unsigned () const; // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // concatenation support virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return m_left - m_right + 1; } virtual uint64 concat_get_uint64() const; virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; // reduce methods bool and_reduce() const; bool nand_reduce() const; bool or_reduce() const; bool nor_reduce() const; bool xor_reduce() const ; bool xnor_reduce() const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } protected: int m_left; // Left-most bit in this part selection. sc_unsigned* m_obj_p; // Target of this part selection. int m_right; // Right-most bit in this part selection. private: // disabled const sc_unsigned_subref_r& operator = ( const sc_unsigned_subref_r& ); }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_unsigned_subref_r& ); // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref // // Proxy class for sc_unsigned part selection (r-value and l-value). // ---------------------------------------------------------------------------- class SC_API sc_unsigned_subref : public sc_unsigned_subref_r { friend class sc_unsigned; friend class sc_core::sc_vpool; // constructor protected: sc_unsigned_subref() : sc_unsigned_subref_r() {} public: // copy constructor sc_unsigned_subref( const sc_unsigned_subref& a ) : sc_unsigned_subref_r( a ) {} // assignment operators const sc_unsigned_subref& operator = ( const sc_unsigned_subref_r& a ); const sc_unsigned_subref& operator = ( const sc_unsigned_subref& a ); const sc_unsigned_subref& operator = ( const sc_unsigned& a ); template const sc_unsigned_subref& operator = ( const sc_generic_base& a ); const sc_unsigned_subref& operator = ( const sc_signed_subref_r& a ); const sc_unsigned_subref& operator = ( const sc_signed& a ); const sc_unsigned_subref& operator = ( const char* a ); const sc_unsigned_subref& operator = ( unsigned long a ); const sc_unsigned_subref& operator = ( long a ); const sc_unsigned_subref& operator = ( unsigned int a ) { return operator = ( (unsigned long) a ); } const sc_unsigned_subref& operator = ( int a ) { return operator = ( (long) a ); } const sc_unsigned_subref& operator = ( uint64 a ); const sc_unsigned_subref& operator = ( int64 a ); const sc_unsigned_subref& operator = ( double a ); const sc_unsigned_subref& operator = ( const sc_int_base& a ); const sc_unsigned_subref& operator = ( const sc_uint_base& a ); // concatenation methods virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // other methods void scan( ::std::istream& is = ::std::cin ); protected: static sc_core::sc_vpool m_pool; }; inline ::std::istream& operator >> ( ::std::istream&, sc_unsigned_subref& ); // ---------------------------------------------------------------------------- // CLASS : sc_unsigned // // Arbitrary precision unsigned number. // ---------------------------------------------------------------------------- class SC_API sc_unsigned : public sc_value_base { friend class sc_concatref; friend class sc_unsigned_bitref_r; friend class sc_unsigned_bitref; friend class sc_unsigned_subref_r; friend class sc_unsigned_subref; friend class sc_signed; friend class sc_signed_subref; friend class sc_signed_subref_r; // Needed for types using sc_unsigned. typedef bool elemtype; void invalid_init( const char* type_name, int nb ) const; public: // constructors explicit sc_unsigned( int nb = sc_length_param().len() ); sc_unsigned( const sc_unsigned& v ); sc_unsigned( const sc_signed& v ); template explicit sc_unsigned( const sc_generic_base& v ); explicit sc_unsigned( const sc_bv_base& v ); explicit sc_unsigned( const sc_lv_base& v ); explicit sc_unsigned( const sc_int_subref_r& v ); explicit sc_unsigned( const sc_uint_subref_r& v ); explicit sc_unsigned( const sc_signed_subref_r& v ); explicit sc_unsigned( const sc_unsigned_subref_r& v ); // assignment operators const sc_unsigned& operator = (const sc_unsigned& v); const sc_unsigned& operator = (const sc_unsigned_subref_r& a ); template const sc_unsigned& operator = ( const sc_generic_base& a ) { a->to_sc_unsigned(*this); return *this; } const sc_unsigned& operator = (const sc_signed& v); const sc_unsigned& operator = (const sc_signed_subref_r& a ); const sc_unsigned& operator = ( const char* v); const sc_unsigned& operator = ( int64 v); const sc_unsigned& operator = ( uint64 v); const sc_unsigned& operator = ( long v); const sc_unsigned& operator = ( unsigned long v); const sc_unsigned& operator = ( int v) { return operator=((long) v); } const sc_unsigned& operator = ( unsigned int v) { return operator=((unsigned long) v); } const sc_unsigned& operator = ( double v); const sc_unsigned& operator = ( const sc_int_base& v); const sc_unsigned& operator = ( const sc_uint_base& v); const sc_unsigned& operator = ( const sc_bv_base& ); const sc_unsigned& operator = ( const sc_lv_base& ); #ifdef SC_INCLUDE_FX const sc_unsigned& operator = ( const sc_fxval& ); const sc_unsigned& operator = ( const sc_fxval_fast& ); const sc_unsigned& operator = ( const sc_fxnum& ); const sc_unsigned& operator = ( const sc_fxnum_fast& ); #endif // destructor virtual ~sc_unsigned() { # ifndef SC_MAX_NBITS delete [] digit; # endif } // Concatenation support: sc_digit* get_raw() const { return digit; } virtual int concat_length(bool* xz_present_p) const { if ( xz_present_p ) *xz_present_p = false; return nbits-1; } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const; virtual void concat_set(int64 src, int low_i); virtual void concat_set(const sc_signed& src, int low_i); virtual void concat_set(const sc_unsigned& src, int low_i); virtual void concat_set(uint64 src, int low_i); // Increment operators. sc_unsigned& operator ++ (); const sc_unsigned operator ++ (int); // Decrement operators. sc_unsigned& operator -- (); const sc_unsigned operator -- (int); // bit selection inline void check_index( int i ) const { if ( (i < 0) || (i >= nbits-1) ) invalid_index(i); } void invalid_index( int i ) const; sc_unsigned_bitref& operator [] ( int i ) { check_index(i); sc_unsigned_bitref* result_p = sc_unsigned_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } const sc_unsigned_bitref_r& operator [] ( int i ) const { check_index(i); sc_unsigned_bitref* result_p = sc_unsigned_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } sc_unsigned_bitref& bit( int i ) { check_index(i); sc_unsigned_bitref* result_p = sc_unsigned_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } const sc_unsigned_bitref_r& bit( int i ) const { check_index(i); sc_unsigned_bitref* result_p = sc_unsigned_bitref::m_pool.allocate(); result_p->initialize( this, i ); return *result_p; } // part selection // Subref operators. Help access the range of bits from the ith to // jth. These indices have arbitrary precedence with respect to each // other, i.e., we can have i <= j or i > j. Note the equivalence // between range(i, j) and operator (i, j). Also note that // operator (i, i) returns an unsigned number that corresponds to the // bit operator [i], so these two forms are not the same. inline void check_range( int l, int r ) const { if ( l < r ) { if ( (l < 0) || (r >= nbits-1) ) invalid_range(l,r); } else { if ( (r < 0) || (l >= nbits-1) ) invalid_range(l,r); } } void invalid_range( int l, int r ) const; sc_unsigned_subref& range( int i, int j ) { check_range(i,j); sc_unsigned_subref* result_p = sc_unsigned_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } const sc_unsigned_subref_r& range( int i, int j ) const { check_range(i,j); sc_unsigned_subref* result_p = sc_unsigned_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } sc_unsigned_subref& operator () ( int i, int j ) { check_range(i,j); sc_unsigned_subref* result_p = sc_unsigned_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } const sc_unsigned_subref_r& operator () ( int i, int j ) const { check_range(i,j); sc_unsigned_subref* result_p = sc_unsigned_subref::m_pool.allocate(); result_p->initialize( this, i, j ); return *result_p; } // explicit conversions int to_int() const; unsigned int to_uint() const; long to_long() const; unsigned long to_ulong() const; int64 to_int64() const; uint64 to_uint64() const; double to_double() const; #ifdef SC_DT_DEPRECATED int to_signed() const { return to_int(); } unsigned int to_unsigned() const { return to_uint(); } #endif // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const; const std::string to_string( sc_numrep numrep, bool w_prefix ) const; // Print functions. dump prints the internals of the class. void print( ::std::ostream& os = ::std::cout ) const { os << to_string(sc_io_base(os,SC_DEC),sc_io_show_base(os)); } void scan( ::std::istream& is = ::std::cin ); void dump( ::std::ostream& os = ::std::cout ) const; // Functions to find various properties. int length() const { return nbits - 1; } // Bit width. bool iszero() const; // Is the number zero? bool sign() const { return 0; } // Sign. // reduce methods bool and_reduce() const; bool nand_reduce() const { return ( ! and_reduce() ); } bool or_reduce() const; bool nor_reduce() const { return ( ! or_reduce() ); } bool xor_reduce() const; bool xnor_reduce() const { return ( ! xor_reduce() ); } // Functions to access individual bits. bool test(int i) const; // Is the ith bit 0 or 1? void set(int i); // Set the ith bit to 1. void clear(int i); // Set the ith bit to 0. void set(int i, bool v) // Set the ith bit to v. { if (v) set(i); else clear(i); } void invert(int i) // Negate the ith bit. { if (test(i)) clear(i); else set(i); } // Make the number equal to its mirror image. void reverse(); // Get/set a packed bit representation of the number. void get_packed_rep(sc_digit *buf) const; void set_packed_rep(sc_digit *buf); /* The comparison of the old and new semantics are as follows: Let s = sc_signed, u = sc_unsigned, un = { uint64, unsigned long, unsigned int }, sn = { int64, long, int, char* }, and OP = { +, -, *, /, % }. Old semantics: New semantics: u OP u -> u u OP u -> u s OP u -> u s OP u -> s u OP s -> u u OP s -> s s OP s -> s s OP s -> s u OP un = un OP u -> u u OP un = un OP u -> u u OP sn = sn OP u -> u u OP sn = sn OP u -> s s OP un = un OP s -> s s OP un = un OP s -> s s OP sn = sn OP s -> s s OP sn = sn OP s -> s In the new semantics, the result is u if both operands are u; the result is s otherwise. The only exception is subtraction. The result of a subtraction is always s. The old semantics is like C/C++ semantics on integer types; the new semantics is due to the VSIA C/C++ data types standard. */ // ARITHMETIC OPERATORS: // ADDition operators: friend SC_API sc_signed operator + (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator + (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator + (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator + (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator + (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator + (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator + (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator + (const sc_unsigned& u, int v); friend sc_unsigned operator + (const sc_unsigned& u, unsigned int v) { return operator+(u, (unsigned long) v); } friend SC_API sc_signed operator + (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator + (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator + (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator + (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator + (int u, const sc_unsigned& v); friend sc_unsigned operator + (unsigned int u, const sc_unsigned& v) { return operator+((unsigned long) u, v); } const sc_unsigned& operator += (const sc_signed& v); const sc_unsigned& operator += (const sc_unsigned& v); const sc_unsigned& operator += (int64 v); const sc_unsigned& operator += (uint64 v); const sc_unsigned& operator += (long v); const sc_unsigned& operator += (unsigned long v); const sc_unsigned& operator += (int v) { return operator+=((long) v); } const sc_unsigned& operator += (unsigned int v) { return operator+=((unsigned long) v); } friend SC_API sc_unsigned operator + (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator + (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator + (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator + (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator += (const sc_int_base& v); const sc_unsigned& operator += (const sc_uint_base& v); // SUBtraction operators: friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator - (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_unsigned& u, int64 v); friend SC_API sc_signed operator - (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator - (const sc_unsigned& u, long v); friend SC_API sc_signed operator - (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator - (const sc_unsigned& u, int v); friend SC_API sc_signed operator - (const sc_unsigned& u, unsigned int v); friend SC_API sc_signed operator - (int64 u, const sc_unsigned& v); friend SC_API sc_signed operator - (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator - (long u, const sc_unsigned& v); friend SC_API sc_signed operator - (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator - (int u, const sc_unsigned& v); friend SC_API sc_signed operator - (unsigned int u, const sc_unsigned& v); const sc_unsigned& operator -= (const sc_signed& v); const sc_unsigned& operator -= (const sc_unsigned& v); const sc_unsigned& operator -= (int64 v); const sc_unsigned& operator -= (uint64 v); const sc_unsigned& operator -= (long v); const sc_unsigned& operator -= (unsigned long v); const sc_unsigned& operator -= (int v) { return operator-=((long) v); } const sc_unsigned& operator -= (unsigned int v) { return operator-=((unsigned long) v); } friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator - (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_signed operator - (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator - (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator -= (const sc_int_base& v); const sc_unsigned& operator -= (const sc_uint_base& v); // MULtiplication operators: friend SC_API sc_signed operator * (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator * (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator * (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator * (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator * (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator * (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator * (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator * (const sc_unsigned& u, int v); friend sc_unsigned operator * (const sc_unsigned& u, unsigned int v) { return operator*(u, (unsigned long) v); } friend SC_API sc_signed operator * (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator * (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator * (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator * (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator * (int u, const sc_unsigned& v); friend sc_unsigned operator * (unsigned int u, const sc_unsigned& v) { return operator*((unsigned long) u, v); } const sc_unsigned& operator *= (const sc_signed& v); const sc_unsigned& operator *= (const sc_unsigned& v); const sc_unsigned& operator *= (int64 v); const sc_unsigned& operator *= (uint64 v); const sc_unsigned& operator *= (long v); const sc_unsigned& operator *= (unsigned long v); const sc_unsigned& operator *= (int v) { return operator*=((long) v); } const sc_unsigned& operator *= (unsigned int v) { return operator*=((unsigned long) v); } friend SC_API sc_unsigned operator * (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator * (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator * (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator * (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator *= (const sc_int_base& v); const sc_unsigned& operator *= (const sc_uint_base& v); // DIVision operators: friend SC_API sc_signed operator / (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator / (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator / (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator / (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator / (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator / (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator / (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator / (const sc_unsigned& u, int v); friend sc_unsigned operator / (const sc_unsigned& u, unsigned int v) { return operator/(u, (unsigned long) v); } friend SC_API sc_signed operator / (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator / (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator / (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator / (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator / (int u, const sc_unsigned& v); friend sc_unsigned operator / (unsigned int u, const sc_unsigned& v) { return operator/((unsigned long) u, v); } const sc_unsigned& operator /= (const sc_signed& v); const sc_unsigned& operator /= (const sc_unsigned& v); const sc_unsigned& operator /= (int64 v); const sc_unsigned& operator /= (uint64 v); const sc_unsigned& operator /= (long v); const sc_unsigned& operator /= (unsigned long v); const sc_unsigned& operator /= (int v) { return operator/=((long) v); } const sc_unsigned& operator /= (unsigned int v) { return operator/=((unsigned long) v); } friend SC_API sc_unsigned operator / (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator / (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator / (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator / (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator /= (const sc_int_base& v); const sc_unsigned& operator /= (const sc_uint_base& v); // MODulo operators: friend SC_API sc_signed operator % (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator % (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator % (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator % (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator % (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator % (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator % (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator % (const sc_unsigned& u, int v); friend sc_unsigned operator % (const sc_unsigned& u, unsigned int v) { return operator%(u, (unsigned long) v); } friend SC_API sc_signed operator % (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator % (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator % (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator % (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator % (int u, const sc_unsigned& v); friend sc_unsigned operator % (unsigned int u, const sc_unsigned& v) { return operator%((unsigned long) u, v); } const sc_unsigned& operator %= (const sc_signed& v); const sc_unsigned& operator %= (const sc_unsigned& v); const sc_unsigned& operator %= (int64 v); const sc_unsigned& operator %= (uint64 v); const sc_unsigned& operator %= (long v); const sc_unsigned& operator %= (unsigned long v); const sc_unsigned& operator %= (int v) { return operator%=((long) v); } const sc_unsigned& operator %= (unsigned int v) { return operator%=((unsigned long) v); } friend SC_API sc_unsigned operator % (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator % (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator % (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator % (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator %= (const sc_int_base& v); const sc_unsigned& operator %= (const sc_uint_base& v); // BITWISE OPERATORS: // Bitwise AND operators: friend SC_API sc_signed operator & (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator & (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator & (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator & (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator & (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator & (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator & (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator & (const sc_unsigned& u, int v); friend sc_unsigned operator & (const sc_unsigned& u, unsigned int v) { return operator&(u, (unsigned long) v); } friend SC_API sc_signed operator & (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator & (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator & (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator & (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator & (int u, const sc_unsigned& v); friend sc_unsigned operator & (unsigned int u, const sc_unsigned& v) { return operator&((unsigned long) u, v); } const sc_unsigned& operator &= (const sc_signed& v); const sc_unsigned& operator &= (const sc_unsigned& v); const sc_unsigned& operator &= (int64 v); const sc_unsigned& operator &= (uint64 v); const sc_unsigned& operator &= (long v); const sc_unsigned& operator &= (unsigned long v); const sc_unsigned& operator &= (int v) { return operator&=((long) v); } const sc_unsigned& operator &= (unsigned int v) { return operator&=((unsigned long) v); } friend SC_API sc_unsigned operator & (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator & (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator & (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator & (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator &= (const sc_int_base& v); const sc_unsigned& operator &= (const sc_uint_base& v); // Bitwise OR operators: friend SC_API sc_signed operator | (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator | (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator | (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator | (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator | (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator | (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator | (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator | (const sc_unsigned& u, int v); friend sc_unsigned operator | (const sc_unsigned& u, unsigned int v) { return operator|(u, (unsigned long) v); } friend SC_API sc_signed operator | (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator | (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator | (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator | (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator | (int u, const sc_unsigned& v); friend sc_unsigned operator | (unsigned int u, const sc_unsigned& v) { return operator|((unsigned long) u, v); } const sc_unsigned& operator |= (const sc_signed& v); const sc_unsigned& operator |= (const sc_unsigned& v); const sc_unsigned& operator |= (int64 v); const sc_unsigned& operator |= (uint64 v); const sc_unsigned& operator |= (long v); const sc_unsigned& operator |= (unsigned long v); const sc_unsigned& operator |= (int v) { return operator|=((long) v); } const sc_unsigned& operator |= (unsigned int v) { return operator|=((unsigned long) v); } friend SC_API sc_unsigned operator | (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator | (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator | (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator | (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator |= (const sc_int_base& v); const sc_unsigned& operator |= (const sc_uint_base& v); // Bitwise XOR operators: friend SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator ^ (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator ^ (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator ^ (const sc_unsigned& u, uint64 v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator ^ (const sc_unsigned& u, unsigned long v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, int v); friend sc_unsigned operator ^ (const sc_unsigned& u, unsigned int v) { return operator^(u, (unsigned long) v); } friend SC_API sc_signed operator ^ (int64 u, const sc_unsigned& v); friend SC_API sc_unsigned operator ^ (uint64 u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (long u, const sc_unsigned& v); friend SC_API sc_unsigned operator ^ (unsigned long u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (int u, const sc_unsigned& v); friend sc_unsigned operator ^ (unsigned int u, const sc_unsigned& v) { return operator^((unsigned long) u, v); } const sc_unsigned& operator ^= (const sc_signed& v); const sc_unsigned& operator ^= (const sc_unsigned& v); const sc_unsigned& operator ^= (int64 v); const sc_unsigned& operator ^= (uint64 v); const sc_unsigned& operator ^= (long v); const sc_unsigned& operator ^= (unsigned long v); const sc_unsigned& operator ^= (int v) { return operator^=((long) v); } const sc_unsigned& operator ^= (unsigned int v) { return operator^=((unsigned long) v); } friend SC_API sc_unsigned operator ^ (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_signed operator ^ (const sc_unsigned& u, const sc_int_base& v); friend SC_API sc_unsigned operator ^ (const sc_uint_base& u, const sc_unsigned& v); friend SC_API sc_signed operator ^ (const sc_int_base& u, const sc_unsigned& v); const sc_unsigned& operator ^= (const sc_int_base& v); const sc_unsigned& operator ^= (const sc_uint_base& v); // SHIFT OPERATORS: // LEFT SHIFT operators: friend SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator << (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, uint64 v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, unsigned long v); friend sc_unsigned operator << (const sc_unsigned& u, int v) { return operator<<(u, (long) v); } friend sc_unsigned operator << (const sc_unsigned& u, unsigned int v) { return operator<<(u, (unsigned long) v); } const sc_unsigned& operator <<= (const sc_signed& v); const sc_unsigned& operator <<= (const sc_unsigned& v); const sc_unsigned& operator <<= (int64 v); const sc_unsigned& operator <<= (uint64 v); const sc_unsigned& operator <<= (long v); const sc_unsigned& operator <<= (unsigned long v); const sc_unsigned& operator <<= (int v) { return operator<<=((long) v); } const sc_unsigned& operator <<= (unsigned int v) { return operator<<=((unsigned long) v); } friend SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_uint_base& v); friend SC_API sc_unsigned operator << (const sc_unsigned& u, const sc_int_base& v); const sc_unsigned& operator <<= (const sc_int_base& v); const sc_unsigned& operator <<= (const sc_uint_base& v); // RIGHT SHIFT operators: friend SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_signed& v); friend SC_API sc_signed operator >> (const sc_signed& u, const sc_unsigned& v); friend SC_API sc_unsigned operator >> (const sc_unsigned& u, const sc_unsigned& v); friend SC_API sc_unsigned operator >> (const sc_unsigned& u, int64 v); friend SC_API sc_unsigned operator >> (const sc_unsigned& u, uint64 v); friend SC_API sc_unsigned operator >> (const sc_unsigned& u, long v); friend SC_API sc_unsigned operator >> (const sc_unsigned& u, unsigned long v); friend sc_unsigned operator >> (const sc_unsigned& u, int v) { return operator>>(u, (long) v); } friend sc_unsigned operator >> (const sc_unsigned& u, unsigned int v) { return operator>>(u, (unsigned long) v); } const sc_unsigned& operator >>= (const sc_signed& v); const sc_unsigned& operator >>= (const sc_unsigned& v); const sc_unsigned& operator >>= (int64 v); const sc_unsigned& operator >>= (uint64 v); const sc_unsigned& operator >>= (long v); const sc_unsigned& operator >>= (unsigned long v); const sc_unsigned& operator >>= (int v) { return operator>>=((long) v); } const sc_unsigned& operator >>= (unsigned int v) { return operator>>=((unsigned long) v); } friend SC_API sc_unsigned operator >> ( const sc_unsigned& , const sc_uint_base& ); friend SC_API sc_unsigned operator >> ( const sc_unsigned&, const sc_int_base& ); const sc_unsigned& operator >>= (const sc_int_base& v); const sc_unsigned& operator >>= (const sc_uint_base& v); // Unary arithmetic operators friend SC_API sc_unsigned operator + (const sc_unsigned& u); friend SC_API sc_signed operator - (const sc_unsigned& u); // LOGICAL OPERATORS: // Logical EQUAL operators: friend SC_API bool operator == (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator == (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator == (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator == (const sc_unsigned& u, int64 v); friend SC_API bool operator == (const sc_unsigned& u, uint64 v); friend SC_API bool operator == (const sc_unsigned& u, long v); friend SC_API bool operator == (const sc_unsigned& u, unsigned long v); friend bool operator == (const sc_unsigned& u, int v) { return operator==(u, (long) v); } friend bool operator == (const sc_unsigned& u, unsigned int v) { return operator==(u, (unsigned long) v); } friend SC_API bool operator == (int64 u, const sc_unsigned& v); friend SC_API bool operator == (uint64 u, const sc_unsigned& v); friend SC_API bool operator == (long u, const sc_unsigned& v); friend SC_API bool operator == (unsigned long u, const sc_unsigned& v); friend bool operator == (int u, const sc_unsigned& v) { return operator==((long) u, v); } friend bool operator == (unsigned int u, const sc_unsigned& v) { return operator==((unsigned long) u, v); } friend SC_API bool operator == (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator == (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator == (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator == (const sc_int_base& u, const sc_unsigned& v); // Logical NOT_EQUAL operators: friend SC_API bool operator != (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator != (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator != (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator != (const sc_unsigned& u, int64 v); friend SC_API bool operator != (const sc_unsigned& u, uint64 v); friend SC_API bool operator != (const sc_unsigned& u, long v); friend SC_API bool operator != (const sc_unsigned& u, unsigned long v); friend bool operator != (const sc_unsigned& u, int v) { return operator!=(u, (long) v); } friend bool operator != (const sc_unsigned& u, unsigned int v) { return operator!=(u, (unsigned long) v); } friend SC_API bool operator != (int64 u, const sc_unsigned& v); friend SC_API bool operator != (uint64 u, const sc_unsigned& v); friend SC_API bool operator != (long u, const sc_unsigned& v); friend SC_API bool operator != (unsigned long u, const sc_unsigned& v); friend bool operator != (int u, const sc_unsigned& v) { return operator!=((long) u, v); } friend bool operator != (unsigned int u, const sc_unsigned& v) { return operator!=((unsigned long) u, v); } friend SC_API bool operator != (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator != (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator != (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator != (const sc_int_base& u, const sc_unsigned& v); // Logical LESS_THAN operators: friend SC_API bool operator < (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator < (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator < (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator < (const sc_unsigned& u, int64 v); friend SC_API bool operator < (const sc_unsigned& u, uint64 v); friend SC_API bool operator < (const sc_unsigned& u, long v); friend SC_API bool operator < (const sc_unsigned& u, unsigned long v); friend bool operator < (const sc_unsigned& u, int v) { return operator<(u, (long) v); } friend bool operator < (const sc_unsigned& u, unsigned int v) { return operator<(u, (unsigned long) v); } friend SC_API bool operator < (int64 u, const sc_unsigned& v); friend SC_API bool operator < (uint64 u, const sc_unsigned& v); friend SC_API bool operator < (long u, const sc_unsigned& v); friend SC_API bool operator < (unsigned long u, const sc_unsigned& v); friend bool operator < (int u, const sc_unsigned& v) { return operator<((long) u, v); } friend bool operator < (unsigned int u, const sc_unsigned& v) { return operator<((unsigned long) u, v); } friend SC_API bool operator < (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator < (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator < (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator < (const sc_int_base& u, const sc_unsigned& v); // Logical LESS_THAN_AND_EQUAL operators: friend SC_API bool operator <= (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator <= (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator <= (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator <= (const sc_unsigned& u, int64 v); friend SC_API bool operator <= (const sc_unsigned& u, uint64 v); friend SC_API bool operator <= (const sc_unsigned& u, long v); friend SC_API bool operator <= (const sc_unsigned& u, unsigned long v); friend bool operator <= (const sc_unsigned& u, int v) { return operator<=(u, (long) v); } friend bool operator <= (const sc_unsigned& u, unsigned int v) { return operator<=(u, (unsigned long) v); } friend SC_API bool operator <= (int64 u, const sc_unsigned& v); friend SC_API bool operator <= (uint64 u, const sc_unsigned& v); friend SC_API bool operator <= (long u, const sc_unsigned& v); friend SC_API bool operator <= (unsigned long u, const sc_unsigned& v); friend bool operator <= (int u, const sc_unsigned& v) { return operator<=((long) u, v); } friend bool operator <= (unsigned int u, const sc_unsigned& v) { return operator<=((unsigned long) u, v); } friend SC_API bool operator <= (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator <= (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator <= (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator <= (const sc_int_base& u, const sc_unsigned& v); // Logical GREATER_THAN operators: friend SC_API bool operator > (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator > (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator > (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator > (const sc_unsigned& u, int64 v); friend SC_API bool operator > (const sc_unsigned& u, uint64 v); friend SC_API bool operator > (const sc_unsigned& u, long v); friend SC_API bool operator > (const sc_unsigned& u, unsigned long v); friend bool operator > (const sc_unsigned& u, int v) { return operator>(u, (long) v); } friend bool operator > (const sc_unsigned& u, unsigned int v) { return operator>(u, (unsigned long) v); } friend SC_API bool operator > (int64 u, const sc_unsigned& v); friend SC_API bool operator > (uint64 u, const sc_unsigned& v); friend SC_API bool operator > (long u, const sc_unsigned& v); friend SC_API bool operator > (unsigned long u, const sc_unsigned& v); friend bool operator > (int u, const sc_unsigned& v) { return operator>((long) u, v); } friend bool operator > (unsigned int u, const sc_unsigned& v) { return operator>((unsigned long) u, v); } friend SC_API bool operator > (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator > (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator > (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator > (const sc_int_base& u, const sc_unsigned& v); // Logical GREATER_THAN_AND_EQUAL operators: friend SC_API bool operator >= (const sc_unsigned& u, const sc_signed& v); friend SC_API bool operator >= (const sc_signed& u, const sc_unsigned& v); friend SC_API bool operator >= (const sc_unsigned& u, const sc_unsigned& v); friend SC_API bool operator >= (const sc_unsigned& u, int64 v); friend SC_API bool operator >= (const sc_unsigned& u, uint64 v); friend SC_API bool operator >= (const sc_unsigned& u, long v); friend SC_API bool operator >= (const sc_unsigned& u, unsigned long v); friend bool operator >= (const sc_unsigned& u, int v) { return operator>=(u, (long) v); } friend bool operator >= (const sc_unsigned& u, unsigned int v) { return operator>=(u, (unsigned long) v); } friend SC_API bool operator >= (int64 u, const sc_unsigned& v); friend SC_API bool operator >= (uint64 u, const sc_unsigned& v); friend SC_API bool operator >= (long u, const sc_unsigned& v); friend SC_API bool operator >= (unsigned long u, const sc_unsigned& v); friend bool operator >= (int u, const sc_unsigned& v) { return operator>=((long) u, v); } friend bool operator >= (unsigned int u, const sc_unsigned& v) { return operator>=((unsigned long) u, v); } friend SC_API bool operator >= (const sc_unsigned& u, const sc_uint_base& v); friend SC_API bool operator >= (const sc_unsigned& u, const sc_int_base& v); friend SC_API bool operator >= (const sc_uint_base& u, const sc_unsigned& v); friend SC_API bool operator >= (const sc_int_base& u, const sc_unsigned& v); // Bitwise NOT operator (unary). friend SC_API sc_unsigned operator ~ (const sc_unsigned& u); // Helper functions. friend int compare_unsigned(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd, small_type if_u_signed, small_type if_v_signed); friend sc_unsigned add_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned sub_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned mul_unsigned_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned div_unsigned_friend(small_type s, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned mod_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned and_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned or_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); friend sc_unsigned xor_unsigned_friend(small_type us, int unb, int und, const sc_digit *ud, small_type vs, int vnb, int vnd, const sc_digit *vd); public: static sc_core::sc_vpool m_pool; private: small_type sgn; // Shortened as s. int nbits; // Shortened as nb. int ndigits; // Shortened as nd. #ifdef SC_MAX_NBITS sc_digit digit[DIV_CEIL(SC_MAX_NBITS)]; // Shortened as d. #else sc_digit *digit; // Shortened as d. #endif // Private constructors: // Create a copy of v with sign s. sc_unsigned(const sc_unsigned& v, small_type s); sc_unsigned(const sc_signed& v, small_type s); // Create an unsigned number with the given attributes. sc_unsigned(small_type s, int nb, int nd, sc_digit *d, bool alloc = true); // Create an unsigned number using the bits u[l..r]. sc_unsigned(const sc_signed* u, int l, int r); sc_unsigned(const sc_unsigned* u, int l, int r); // Private member functions. The called functions are inline functions. small_type default_sign() const { return SC_POS; } int num_bits(int nb) const { return nb + 1; } bool check_if_outside(int bit_num) const; void copy_digits(int nb, int nd, const sc_digit *d) { copy_digits_unsigned(sgn, nbits, ndigits, digit, nb, nd, d); } void makezero() { sgn = make_zero(ndigits, digit); } // Conversion functions between 2's complement (2C) and // sign-magnitude (SM): void convert_2C_to_SM() { sgn = convert_unsigned_2C_to_SM(nbits, ndigits, digit); } void convert_SM_to_2C_to_SM() { sgn = convert_unsigned_SM_to_2C_to_SM(sgn, nbits, ndigits, digit); } void convert_SM_to_2C() { convert_unsigned_SM_to_2C(sgn, ndigits, digit); } }; inline ::std::ostream& operator << ( ::std::ostream&, const sc_unsigned& ); inline ::std::istream& operator >> ( ::std::istream&, sc_unsigned& ); // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref_r // // Proxy class for sc_unsigned bit selection (r-value only). // ---------------------------------------------------------------------------- inline ::std::ostream& operator << ( ::std::ostream& os, const sc_unsigned_bitref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_bitref // // Proxy class for sc_unsigned bit selection (r-value and l-value). // ---------------------------------------------------------------------------- template inline const sc_unsigned_subref& sc_unsigned_subref::operator = ( const sc_generic_base& a ) { sc_unsigned temp( length() ); a->to_sc_unsigned(temp); return *this = temp; } inline ::std::istream& operator >> ( ::std::istream& is, sc_unsigned_bitref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref_r // // Proxy class for sc_unsigned part selection (r-value only). // ---------------------------------------------------------------------------- // reduce methods inline bool sc_unsigned_subref_r::and_reduce() const { const sc_unsigned* target_p = m_obj_p; for ( int i = m_right; i <= m_left; i++ ) if ( !target_p->test(i) ) return false; return true; } inline bool sc_unsigned_subref_r::nand_reduce() const { return !and_reduce(); } inline bool sc_unsigned_subref_r::or_reduce() const { const sc_unsigned* target_p = m_obj_p; for ( int i = m_right; i <= m_left; i++ ) if ( target_p->test(i) ) return true; return false; } inline bool sc_unsigned_subref_r::nor_reduce() const { return !or_reduce(); } inline bool sc_unsigned_subref_r::xor_reduce() const { int odd; const sc_unsigned* target_p = m_obj_p; odd = 0; for ( int i = m_right; i <= m_left; i++ ) if ( target_p->test(i) ) odd = ~odd; return odd ? true : false; } inline bool sc_unsigned_subref_r::xnor_reduce() const { return !xor_reduce(); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_unsigned_subref_r& a ) { a.print( os ); return os; } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned_subref // // Proxy class for sc_unsigned part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators inline const sc_unsigned_subref& sc_unsigned_subref::operator = ( const char* a ) { sc_unsigned aa( length() ); return ( *this = aa = a ); } inline ::std::istream& operator >> ( ::std::istream& is, sc_unsigned_subref& a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS : sc_unsigned // // Arbitrary precision signed number. // ---------------------------------------------------------------------------- template sc_unsigned::sc_unsigned( const sc_generic_base& v ) { int nb = v->length(); sgn = default_sign(); if( nb > 0 ) { nbits = num_bits( nb ); } else { invalid_init( "sc_generic_base", nb ); sc_core::sc_abort(); // can't recover from here } ndigits = DIV_CEIL(nbits); # ifdef SC_MAX_NBITS test_bound(nb); # else digit = new sc_digit[ndigits]; # endif makezero(); v->to_sc_unsigned(*this); } inline ::std::ostream& operator << ( ::std::ostream& os, const sc_unsigned& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_unsigned& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/0000755000175000017500000000000014342422106017411 5ustar carstencarstensystemc-2.3.4/src/sysc/datatypes/bit/sc_bit.cpp0000644000175000017500000000727614342422106021374 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bit.cpp -- Bit class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bit.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.6 2006/04/12 20:17:52 acg // Andy Goodrich: enabled deprecation message for sc_bit. // // Revision 1.5 2006/01/25 00:31:15 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.4 2006/01/24 20:50:55 acg // Andy Goodrich: added warnings indicating that sc_bit is deprecated and that // the C bool data type should be used in its place. // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/bit/sc_bit.h" #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/utils/sc_utils_ids.h" #include "sysc/datatypes/bit/sc_logic.h" #include namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_bit // // Bit class. // Note: VSIA compatibility indicated. // ---------------------------------------------------------------------------- // support methods void sc_bit::invalid_value( char c ) { std::stringstream msg; msg << "sc_bit( '" << c << "' )"; SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } void sc_bit::invalid_value( int i ) { std::stringstream msg; msg << "sc_bit( " << i << " )"; SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, msg.str().c_str() ); sc_core::sc_abort(); // can't recover from here } // constructors sc_bit::sc_bit( const sc_logic& a ) // non-VSIA : m_val( a.to_bool() ) { sc_deprecated_sc_bit(); } // assignment operators sc_bit& sc_bit::operator = ( const sc_logic& b ) // non-VSIA { return ( *this = sc_bit( b ) ); } // other methods void sc_bit::scan( ::std::istream& is ) { bool b; is >> b; *this = b; } void sc_deprecated_sc_bit() { static bool warn_sc_bit_deprecated=true; if ( warn_sc_bit_deprecated ) { warn_sc_bit_deprecated=false; SC_REPORT_INFO(sc_core::SC_ID_IEEE_1666_DEPRECATION_, "sc_bit is deprecated, use bool instead"); } } } // namespace sc_dt // Taf! systemc-2.3.4/src/sysc/datatypes/bit/sc_bit.h0000644000175000017500000002352414342422106021033 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bit.h -- Bit class. Original Author: Stan Y. Liao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bit.h,v $ // Revision 1.2 2011/08/07 18:54:19 acg // Philipp A. Hartmann: remove friend function declarations that implement // code, and clean up how bit and logic operators are defined in general. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.6 2006/05/08 17:49:59 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.5 2006/04/12 20:17:52 acg // Andy Goodrich: enabled deprecation message for sc_bit. // // Revision 1.4 2006/01/24 20:50:55 acg // Andy Goodrich: added warnings indicating that sc_bit is deprecated and that // the C bool data type should be used in its place. // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_BIT_H #define SC_BIT_H #include "sysc/datatypes/int/sc_nbdefs.h" #include namespace sc_dt { // classes defined in this module class sc_bit; // forward class declarations class sc_logic; extern void sc_deprecated_sc_bit(); // ---------------------------------------------------------------------------- // CLASS : sc_bit // // Bit class. // Note: VSIA compatibility indicated. // ---------------------------------------------------------------------------- class SC_API sc_bit { // support methods static void invalid_value( char ); static void invalid_value( int ); static bool to_value( char c ) { if( c != '0' && c != '1' ) { invalid_value( c ); } return ( c == '0' ? false : true ); } static bool to_value( int i ) { if( i != 0 && i != 1 ) { invalid_value( i ); } return ( i == 0 ? false : true ); } static bool to_value( bool b ) { return b; } #define DEFN_TO_VALUE_T(tp) \ static bool to_value( tp i ) \ { return to_value( (int) i); } DEFN_TO_VALUE_T(unsigned) DEFN_TO_VALUE_T(long) DEFN_TO_VALUE_T(unsigned long) DEFN_TO_VALUE_T(int64) DEFN_TO_VALUE_T(uint64) #undef DEFN_TO_VALUE_T public: // constructors // MANDATORY sc_bit() : m_val( false ) { sc_deprecated_sc_bit(); } #define DEFN_CTOR_T(tp) \ explicit sc_bit( tp a ) \ : m_val( to_value(a) ) \ { sc_deprecated_sc_bit(); } DEFN_CTOR_T(bool) DEFN_CTOR_T(char) DEFN_CTOR_T(int) DEFN_CTOR_T(unsigned) DEFN_CTOR_T(long) DEFN_CTOR_T(unsigned long) DEFN_CTOR_T(int64) DEFN_CTOR_T(uint64) #undef DEFN_CTOR_T explicit sc_bit( const sc_logic& a ); // non-VSIA // copy constructor // MANDATORY sc_bit( const sc_bit& a ) : m_val( a.m_val ) {} // destructor // MANDATORY ~sc_bit() {} // assignment operators // MANDATORY sc_bit& operator = ( const sc_bit& b ) { m_val = b.m_val; return *this; } #define DEFN_ASN_OP_T(op,tp) \ sc_bit& operator op( tp b ) \ { return ( *this op sc_bit( b ) ); } #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op,int) \ DEFN_ASN_OP_T(op,bool) \ DEFN_ASN_OP_T(op,char) DEFN_ASN_OP(=) DEFN_ASN_OP_T(=,int64) DEFN_ASN_OP_T(=,uint64) DEFN_ASN_OP_T(=,long) DEFN_ASN_OP_T(=,unsigned long) sc_bit& operator = ( const sc_logic& b ); // non-VSIA // bitwise assignment operators sc_bit& operator &= ( const sc_bit& b ) { m_val = ( m_val && b.m_val ); return *this; } sc_bit& operator |= ( const sc_bit& b ) { m_val = ( m_val || b.m_val ); return *this; } sc_bit& operator ^= ( const sc_bit& b ) { m_val = ( m_val != b.m_val ); return *this; } DEFN_ASN_OP(&=) DEFN_ASN_OP(|=) DEFN_ASN_OP(^=) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP // conversions // MANDATORY // implicit conversion to bool operator bool () const { return m_val; } bool operator ! () const // non-VSIA { return ! m_val; } // explicit conversions bool to_bool() const // non-VSIA { return m_val; } char to_char() const { return ( m_val ? '1' : '0' ); } // relational operators and functions // MANDATORY friend bool operator == ( const sc_bit& a, const sc_bit& b ); friend bool operator != ( const sc_bit& a, const sc_bit& b ); // bitwise operators and functions // bitwise complement // MANDATORY friend const sc_bit operator ~ ( const sc_bit& a ); // RECOMMENDED sc_bit& b_not() { m_val = ( ! m_val ); return *this; } // binary bit-wise operations friend const sc_bit operator | ( const sc_bit& a, const sc_bit& b ); friend const sc_bit operator & ( const sc_bit& a, const sc_bit& b ); friend const sc_bit operator ^ ( const sc_bit& a, const sc_bit& b ); // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_bool(); } void scan( ::std::istream& = ::std::cin ); private: bool m_val; }; // ---------------------------------------------------------------------------- // relational operators and functions #define DEFN_BIN_FUN_T(ret,fun,tp) \ inline ret fun( const sc_bit& a, tp b ) \ { return fun(a, sc_bit(b) ); } \ inline ret fun( tp b, const sc_bit& a ) \ { return fun( sc_bit(a), b ); } #define DEFN_BIN_FUN(ret,fun) \ DEFN_BIN_FUN_T(ret,fun,bool) \ DEFN_BIN_FUN_T(ret,fun,char) \ DEFN_BIN_FUN_T(ret,fun,int) // MANDATORY inline bool operator == ( const sc_bit& a, const sc_bit& b ) { return ( a.m_val == b.m_val ); } inline bool operator != ( const sc_bit& a, const sc_bit& b ) { return ( a.m_val != b.m_val ); } DEFN_BIN_FUN(bool,operator==) DEFN_BIN_FUN(bool,operator!=) // OPTIONAL inline bool equal( const sc_bit& a, const sc_bit& b ) { return ( a == b ); } inline bool not_equal( const sc_bit& a, const sc_bit& b ) { return ( a != b ); } DEFN_BIN_FUN(bool,equal) DEFN_BIN_FUN(bool,not_equal) // ---------------------------------------------------------------------------- // bitwise operators and functions // bitwise complement // MANDATORY inline const sc_bit operator ~ ( const sc_bit& a ) { return sc_bit( ! a.m_val ); } // OPTIONAL inline const sc_bit b_not( const sc_bit& a ) { return ( ~ a ); } // RECOMMENDED inline void b_not( sc_bit& r, const sc_bit& a ) { r = ( ~ a ); } // binary bit-wise operations // MANDATORY inline const sc_bit operator & ( const sc_bit& a, const sc_bit& b ) { return sc_bit( a.m_val && b.m_val ); } inline const sc_bit operator | ( const sc_bit& a, const sc_bit& b ) { return sc_bit( a.m_val || b.m_val ); } inline const sc_bit operator ^ ( const sc_bit& a, const sc_bit& b ) { return sc_bit( a.m_val != b.m_val ); } DEFN_BIN_FUN(const sc_bit,operator&) DEFN_BIN_FUN(const sc_bit,operator|) DEFN_BIN_FUN(const sc_bit,operator^) // OPTIONAL inline const sc_bit b_and ( const sc_bit& a, const sc_bit& b ) { return a & b; } inline const sc_bit b_or ( const sc_bit& a, const sc_bit& b ) { return a | b; } inline const sc_bit b_xor ( const sc_bit& a, const sc_bit& b ) { return a ^ b; } DEFN_BIN_FUN(const sc_bit,b_and) DEFN_BIN_FUN(const sc_bit,b_or) DEFN_BIN_FUN(const sc_bit,b_xor) // RECOMMENDED #define DEFN_TRN_FUN_T(fun,tp) \ inline void fun( sc_bit& r, const sc_bit& a, tp b ) \ { r = fun( a, sc_bit(b) ); } \ inline void fun( sc_bit& r, tp a, const sc_bit& b ) \ { r = fun( sc_bit(a), b ); } #define DEFN_TRN_FUN(fun) \ inline void fun( sc_bit& r, const sc_bit& a, const sc_bit& b ) \ { r = fun( a , b ); } \ DEFN_TRN_FUN_T(fun,int) \ DEFN_TRN_FUN_T(fun,bool) \ DEFN_TRN_FUN_T(fun,char) DEFN_TRN_FUN( b_and ) DEFN_TRN_FUN( b_or ) DEFN_TRN_FUN( b_xor ) #undef DEFN_BIN_FUN_T #undef DEFN_BIN_FUN #undef DEFN_TRN_FUN_T #undef DEFN_TRN_FUN // ---------------------------------------------------------------------------- inline ::std::ostream& operator << ( ::std::ostream& os, const sc_bit& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_bit& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif // Taf! systemc-2.3.4/src/sysc/datatypes/bit/sc_logic.cpp0000644000175000017500000001176214342422106021706 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_logic.cpp -- C++ implementation of logic type. Behaves pretty much the same way as HDLs logic type. Original Author: Stan Y. Liao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_logic.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_logic.h" #include namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_logic // // Four-valued logic type. // ---------------------------------------------------------------------------- // support methods void sc_logic::invalid_value( sc_logic_value_t v ) { invalid_value( (int)v ); } void sc_logic::invalid_value( char c ) { std::stringstream msg; msg << "sc_logic( '" << c << "' )"; SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, msg.str().c_str() ); } void sc_logic::invalid_value( int i ) { std::stringstream msg; msg << "sc_logic( " << i << " )"; SC_REPORT_ERROR( sc_core::SC_ID_VALUE_NOT_VALID_, msg.str().c_str() ); } void sc_logic::invalid_01() const { if( (int) m_val == Log_Z ) { SC_REPORT_WARNING( sc_core::SC_ID_LOGIC_Z_TO_BOOL_, 0 ); } else { SC_REPORT_WARNING( sc_core::SC_ID_LOGIC_X_TO_BOOL_, 0 ); } } // conversion tables const sc_logic_value_t sc_logic::char_to_logic[128] = { Log_0, Log_1, Log_Z, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_0, Log_1, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_Z, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_Z, Log_X, Log_X, Log_X, Log_X, Log_X }; const char sc_logic::logic_to_char[4] = { '0', '1', 'Z', 'X' }; const sc_logic_value_t sc_logic::and_table[4][4] = { { Log_0, Log_0, Log_0, Log_0 }, { Log_0, Log_1, Log_X, Log_X }, { Log_0, Log_X, Log_X, Log_X }, { Log_0, Log_X, Log_X, Log_X } }; const sc_logic_value_t sc_logic::or_table[4][4] = { { Log_0, Log_1, Log_X, Log_X }, { Log_1, Log_1, Log_1, Log_1 }, { Log_X, Log_1, Log_X, Log_X }, { Log_X, Log_1, Log_X, Log_X } }; const sc_logic_value_t sc_logic::xor_table[4][4] = { { Log_0, Log_1, Log_X, Log_X }, { Log_1, Log_0, Log_X, Log_X }, { Log_X, Log_X, Log_X, Log_X }, { Log_X, Log_X, Log_X, Log_X } }; const sc_logic_value_t sc_logic::not_table[4] = { Log_1, Log_0, Log_X, Log_X }; // other methods void sc_logic::scan( ::std::istream& is ) { char c; is >> c; *this = c; } // #ifdef SC_DT_DEPRECATED const sc_logic sc_logic_0( Log_0 ); const sc_logic sc_logic_1( Log_1 ); const sc_logic sc_logic_Z( Log_Z ); const sc_logic sc_logic_X( Log_X ); // #endif const sc_logic SC_LOGIC_0( Log_0 ); const sc_logic SC_LOGIC_1( Log_1 ); const sc_logic SC_LOGIC_Z( Log_Z ); const sc_logic SC_LOGIC_X( Log_X ); } // namespace sc_dt systemc-2.3.4/src/sysc/datatypes/bit/sc_lv_base.h0000644000175000017500000013471214342422106021672 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_lv_base.h -- Arbitrary size logic vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: Andy Goodrich, Forte Design Systems Fixed bug in clean_tail for sizes that are modulo 32, which caused zeroing of values. *****************************************************************************/ // $Log: sc_lv_base.h,v $ // Revision 1.4 2011/08/26 22:32:00 acg // Torsten Maehne: added parentheses to make opearator ordering more obvious. // // Revision 1.3 2010/01/27 19:41:29 acg // Andy Goodrich: fix 8 instances of sc_concref constructor invocations // that failed to indicate that their arguments should be freed when the // object was freed. // // Revision 1.2 2009/02/28 00:26:14 acg // Andy Goodrich: bug fixes. // // Revision 1.2 2007/03/14 17:47:49 acg // Andy Goodrich: Formatting. // // Revision 1.1.1.1 2006/12/15 20:31:36 acg // SystemC 2.2 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_LV_BASE_H #define SC_LV_BASE_H #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/datatypes/int/sc_length_param.h" namespace sc_dt { // classes defined in this module class sc_lv_base; // ---------------------------------------------------------------------------- // CLASS : sc_lv_base // // Arbitrary size logic vector base class. // ---------------------------------------------------------------------------- class SC_API sc_lv_base : public sc_proxy { friend class sc_bv_base; void init( int length_, const sc_logic& init_value = SC_LOGIC_X ); void assign_from_string( const std::string& ); public: // typedefs typedef sc_proxy base_type; typedef base_type::value_type value_type; // constructors explicit sc_lv_base( int length_ = sc_length_param().len() ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( length_ ); } explicit sc_lv_base( const sc_logic& a, int length_ = sc_length_param().len() ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( length_, a ); } sc_lv_base( const char* a ); sc_lv_base( const char* a, int length_ ); template sc_lv_base( const sc_proxy& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( a.back_cast().length() ); base_type::assign_( a ); } sc_lv_base( const sc_lv_base& a ); #ifdef SC_DT_DEPRECATED explicit sc_lv_base( const sc_unsigned& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_lv_base( const sc_signed& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_lv_base( const sc_uint_base& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_lv_base( const sc_int_base& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( a.length() ); base_type::assign_( a ); } #endif // destructor virtual ~sc_lv_base() { delete [] m_data; } // assignment operators template sc_lv_base& operator = ( const sc_proxy& a ) { assign_p_( *this, a ); return *this; } sc_lv_base& operator = ( const sc_lv_base& a ) { assign_p_( *this, a ); return *this; } sc_lv_base& operator = ( const char* a ); sc_lv_base& operator = ( const bool* a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( const sc_logic* a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( const sc_unsigned& a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( const sc_signed& a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( const sc_uint_base& a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( const sc_int_base& a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( unsigned long a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( long a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( unsigned int a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( int a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( uint64 a ) { base_type::assign_( a ); return *this; } sc_lv_base& operator = ( int64 a ) { base_type::assign_( a ); return *this; } // common methods int length() const { return m_len; } int size() const { return m_size; } value_type get_bit( int i ) const; void set_bit( int i, value_type value ); sc_digit get_word( int wi ) const { return m_data[wi]; } // note the test for out of range access here. this is necessary // because of the hair-brained way concatenations are set up. // an extend_sign on a concatenation uses the whole length of // the concatenation to determine how many words to set. void set_word( int wi, sc_digit w ) { sc_assert ( wi < m_size ); m_data[wi] = w; } sc_digit get_cword( int wi ) const { return m_ctrl[wi]; } void set_cword( int wi, sc_digit w ) { sc_assert ( wi < m_size ); m_ctrl[wi] = w; } void clean_tail(); // other methods bool is_01() const; protected: int m_len; // length in bits int m_size; // size of the data array sc_digit* m_data; // data array sc_digit* m_ctrl; // dito (control part) }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII #if 0 // bitwise left rotate inline const sc_lv_base lrotate( const sc_lv_base& x, int n ) { sc_lv_base a( x ); return a.lrotate( n ); } // bitwise right rotate inline const sc_lv_base rrotate( const sc_lv_base& x, int n ) { sc_lv_base a( x ); return a.rrotate( n ); } #endif inline sc_lv_base::value_type sc_lv_base::get_bit( int i ) const { int wi = i / SC_DIGIT_SIZE; int bi = i % SC_DIGIT_SIZE; return value_type( ((m_data[wi] >> bi) & SC_DIGIT_ONE) | (((m_ctrl[wi] >> bi) << 1) & SC_DIGIT_TWO) ); } inline void sc_lv_base::set_bit( int i, value_type value ) { int wi = i / SC_DIGIT_SIZE; // word index int bi = i % SC_DIGIT_SIZE; // bit index sc_digit mask = SC_DIGIT_ONE << bi; m_data[wi] |= mask; // set bit to 1 m_ctrl[wi] |= mask; // set bit to 1 m_data[wi] &= value << bi | ~mask; m_ctrl[wi] &= value >> 1 << bi | ~mask; } inline void sc_lv_base::clean_tail() { int wi = m_size - 1; int bi = m_len % SC_DIGIT_SIZE; sc_digit mask = ~SC_DIGIT_ZERO >> (SC_DIGIT_SIZE - bi); if ( mask ) { m_data[wi] &= mask; m_ctrl[wi] &= mask; } } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy // // Base class template for bit/logic vector classes. // (Barton/Nackmann implementation) // ---------------------------------------------------------------------------- // bitwise operators and functions // bitwise complement template inline const sc_lv_base sc_proxy::operator ~ () const { sc_lv_base a( back_cast() ); return a.b_not(); } // bitwise and template inline X& operator &= ( sc_proxy& px, const sc_proxy& py ) { X& x = px.back_cast(); sc_lv_base a( x.length() ); a = py.back_cast(); return b_and_assign_( x, a ); } #define DEFN_BITWISE_AND_ASN_OP_T(tp) \ template \ inline \ X& \ sc_proxy::operator &= ( tp b ) \ { \ X& x = back_cast(); \ sc_lv_base a( x.length() ); \ a = b; \ return b_and_assign_( x, a ); \ } DEFN_BITWISE_AND_ASN_OP_T(const char*) DEFN_BITWISE_AND_ASN_OP_T(const bool*) DEFN_BITWISE_AND_ASN_OP_T(const sc_logic*) DEFN_BITWISE_AND_ASN_OP_T(const sc_unsigned&) DEFN_BITWISE_AND_ASN_OP_T(const sc_signed&) DEFN_BITWISE_AND_ASN_OP_T(unsigned long) DEFN_BITWISE_AND_ASN_OP_T(long) DEFN_BITWISE_AND_ASN_OP_T(uint64) DEFN_BITWISE_AND_ASN_OP_T(int64) #undef DEFN_BITWISE_AND_ASN_OP_T template inline const sc_lv_base operator & ( const sc_proxy& px, const sc_proxy& py ) { sc_lv_base a( px.back_cast() ); return ( a &= py.back_cast() ); } #define DEFN_BITWISE_AND_OP_T_A(tp) \ template \ inline \ const sc_lv_base \ sc_proxy::operator & ( tp b ) const \ { \ sc_lv_base a( back_cast() ); \ return ( a &= b ); \ } DEFN_BITWISE_AND_OP_T_A(const char*) DEFN_BITWISE_AND_OP_T_A(const bool*) DEFN_BITWISE_AND_OP_T_A(const sc_logic*) DEFN_BITWISE_AND_OP_T_A(const sc_unsigned&) DEFN_BITWISE_AND_OP_T_A(const sc_signed&) DEFN_BITWISE_AND_OP_T_A(const sc_uint_base&) DEFN_BITWISE_AND_OP_T_A(const sc_int_base&) DEFN_BITWISE_AND_OP_T_A(unsigned long) DEFN_BITWISE_AND_OP_T_A(long) DEFN_BITWISE_AND_OP_T_A(unsigned int) DEFN_BITWISE_AND_OP_T_A(int) DEFN_BITWISE_AND_OP_T_A(uint64) DEFN_BITWISE_AND_OP_T_A(int64) #undef DEFN_BITWISE_AND_OP_T_A #define DEFN_BITWISE_AND_OP_T_B(tp) \ template \ inline \ const sc_lv_base \ operator & ( tp b, const sc_proxy& px ) \ { \ return ( px & b ); \ } DEFN_BITWISE_AND_OP_T_B(const char*) DEFN_BITWISE_AND_OP_T_B(const bool*) DEFN_BITWISE_AND_OP_T_B(const sc_logic*) DEFN_BITWISE_AND_OP_T_B(const sc_unsigned&) DEFN_BITWISE_AND_OP_T_B(const sc_signed&) DEFN_BITWISE_AND_OP_T_B(const sc_uint_base&) DEFN_BITWISE_AND_OP_T_B(const sc_int_base&) DEFN_BITWISE_AND_OP_T_B(unsigned long) DEFN_BITWISE_AND_OP_T_B(long) DEFN_BITWISE_AND_OP_T_B(unsigned int) DEFN_BITWISE_AND_OP_T_B(int) DEFN_BITWISE_AND_OP_T_B(uint64) DEFN_BITWISE_AND_OP_T_B(int64) #undef DEFN_BITWISE_AND_OP_T_B // bitwise or template inline X& operator |= ( sc_proxy& px, const sc_proxy& py ) { X& x = px.back_cast(); sc_lv_base a( x.length() ); a = py.back_cast(); return b_or_assign_( x, a ); } #define DEFN_BITWISE_OR_ASN_OP_T(tp) \ template \ inline \ X& \ sc_proxy::operator |= ( tp b ) \ { \ X& x = back_cast(); \ sc_lv_base a( x.length() ); \ a = b; \ return b_or_assign_( x, a ); \ } DEFN_BITWISE_OR_ASN_OP_T(const char*) DEFN_BITWISE_OR_ASN_OP_T(const bool*) DEFN_BITWISE_OR_ASN_OP_T(const sc_logic*) DEFN_BITWISE_OR_ASN_OP_T(const sc_unsigned&) DEFN_BITWISE_OR_ASN_OP_T(const sc_signed&) DEFN_BITWISE_OR_ASN_OP_T(unsigned long) DEFN_BITWISE_OR_ASN_OP_T(long) DEFN_BITWISE_OR_ASN_OP_T(uint64) DEFN_BITWISE_OR_ASN_OP_T(int64) #undef DEFN_BITWISE_OR_ASN_OP_T template inline const sc_lv_base operator | ( const sc_proxy& px, const sc_proxy& py ) { sc_lv_base a( px.back_cast() ); return ( a |= py.back_cast() ); } #define DEFN_BITWISE_OR_OP_T_A(tp) \ template \ inline \ const sc_lv_base \ sc_proxy::operator | ( tp b ) const \ { \ sc_lv_base a( back_cast() ); \ return ( a |= b ); \ } DEFN_BITWISE_OR_OP_T_A(const char*) DEFN_BITWISE_OR_OP_T_A(const bool*) DEFN_BITWISE_OR_OP_T_A(const sc_logic*) DEFN_BITWISE_OR_OP_T_A(const sc_unsigned&) DEFN_BITWISE_OR_OP_T_A(const sc_signed&) DEFN_BITWISE_OR_OP_T_A(const sc_uint_base&) DEFN_BITWISE_OR_OP_T_A(const sc_int_base&) DEFN_BITWISE_OR_OP_T_A(unsigned long) DEFN_BITWISE_OR_OP_T_A(long) DEFN_BITWISE_OR_OP_T_A(unsigned int) DEFN_BITWISE_OR_OP_T_A(int) DEFN_BITWISE_OR_OP_T_A(uint64) DEFN_BITWISE_OR_OP_T_A(int64) #undef DEFN_BITWISE_OR_OP_T_A #define DEFN_BITWISE_OR_OP_T_B(tp) \ template \ inline \ const sc_lv_base \ operator | ( tp b, const sc_proxy& px ) \ { \ return ( px | b ); \ } DEFN_BITWISE_OR_OP_T_B(const char*) DEFN_BITWISE_OR_OP_T_B(const bool*) DEFN_BITWISE_OR_OP_T_B(const sc_logic*) DEFN_BITWISE_OR_OP_T_B(const sc_unsigned&) DEFN_BITWISE_OR_OP_T_B(const sc_signed&) DEFN_BITWISE_OR_OP_T_B(const sc_uint_base&) DEFN_BITWISE_OR_OP_T_B(const sc_int_base&) DEFN_BITWISE_OR_OP_T_B(unsigned long) DEFN_BITWISE_OR_OP_T_B(long) DEFN_BITWISE_OR_OP_T_B(unsigned int) DEFN_BITWISE_OR_OP_T_B(int) DEFN_BITWISE_OR_OP_T_B(uint64) DEFN_BITWISE_OR_OP_T_B(int64) #undef DEFN_BITWISE_OR_OP_T_B // bitwise xor template inline X& operator ^= ( sc_proxy& px, const sc_proxy& py ) { X& x = px.back_cast(); sc_lv_base a( x.length() ); a = py.back_cast(); return b_xor_assign_( x, a ); } #define DEFN_BITWISE_XOR_ASN_OP_T(tp) \ template \ inline \ X& \ sc_proxy::operator ^= ( tp b ) \ { \ X& x = back_cast(); \ sc_lv_base a( x.length() ); \ a = b; \ return b_xor_assign_( x, a ); \ } DEFN_BITWISE_XOR_ASN_OP_T(const char*) DEFN_BITWISE_XOR_ASN_OP_T(const bool*) DEFN_BITWISE_XOR_ASN_OP_T(const sc_logic*) DEFN_BITWISE_XOR_ASN_OP_T(const sc_unsigned&) DEFN_BITWISE_XOR_ASN_OP_T(const sc_signed&) DEFN_BITWISE_XOR_ASN_OP_T(unsigned long) DEFN_BITWISE_XOR_ASN_OP_T(long) DEFN_BITWISE_XOR_ASN_OP_T(uint64) DEFN_BITWISE_XOR_ASN_OP_T(int64) #undef DEFN_BITWISE_XOR_ASN_OP_T template inline const sc_lv_base operator ^ ( const sc_proxy& px, const sc_proxy& py ) { sc_lv_base a( px.back_cast() ); return ( a ^= py.back_cast() ); } #define DEFN_BITWISE_XOR_OP_T_A(tp) \ template \ inline \ const sc_lv_base \ sc_proxy::operator ^ ( tp b ) const \ { \ sc_lv_base a( back_cast() ); \ return ( a ^= b ); \ } DEFN_BITWISE_XOR_OP_T_A(const char*) DEFN_BITWISE_XOR_OP_T_A(const bool*) DEFN_BITWISE_XOR_OP_T_A(const sc_logic*) DEFN_BITWISE_XOR_OP_T_A(const sc_unsigned&) DEFN_BITWISE_XOR_OP_T_A(const sc_signed&) DEFN_BITWISE_XOR_OP_T_A(const sc_uint_base&) DEFN_BITWISE_XOR_OP_T_A(const sc_int_base&) DEFN_BITWISE_XOR_OP_T_A(unsigned long) DEFN_BITWISE_XOR_OP_T_A(long) DEFN_BITWISE_XOR_OP_T_A(unsigned int) DEFN_BITWISE_XOR_OP_T_A(int) DEFN_BITWISE_XOR_OP_T_A(uint64) DEFN_BITWISE_XOR_OP_T_A(int64) #undef DEFN_BITWISE_XOR_OP_T_A #define DEFN_BITWISE_XOR_OP_T_B(tp) \ template \ inline \ const sc_lv_base \ operator ^ ( tp b, const sc_proxy& px ) \ { \ return ( px ^ b ); \ } DEFN_BITWISE_XOR_OP_T_B(const char*) DEFN_BITWISE_XOR_OP_T_B(const bool*) DEFN_BITWISE_XOR_OP_T_B(const sc_logic*) DEFN_BITWISE_XOR_OP_T_B(const sc_unsigned&) DEFN_BITWISE_XOR_OP_T_B(const sc_signed&) DEFN_BITWISE_XOR_OP_T_B(const sc_uint_base&) DEFN_BITWISE_XOR_OP_T_B(const sc_int_base&) DEFN_BITWISE_XOR_OP_T_B(unsigned long) DEFN_BITWISE_XOR_OP_T_B(long) DEFN_BITWISE_XOR_OP_T_B(unsigned int) DEFN_BITWISE_XOR_OP_T_B(int) DEFN_BITWISE_XOR_OP_T_B(uint64) DEFN_BITWISE_XOR_OP_T_B(int64) #undef DEFN_BITWISE_XOR_OP_T_B // bitwise left shift template inline const sc_lv_base sc_proxy::operator << ( int n ) const { sc_lv_base a( back_cast().length()+n ); a = back_cast(); return ( a <<= n ); } // bitwise right shift template inline const sc_lv_base sc_proxy::operator >> ( int n ) const { sc_lv_base a( back_cast() ); return ( a >>= n ); } // bitwise left rotate template inline X& sc_proxy::lrotate( int n ) { X& x = back_cast(); if( n < 0 ) { sc_proxy_out_of_bounds( "left rotate operation is only allowed with " "positive rotate values, rotate value = ", n ); return x; } int len = x.length(); n %= len; // x = (x << n) | (x >> (len - n)); sc_lv_base a( x << n ); sc_lv_base b( x >> (len - n) ); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { x.set_word( i, a.get_word( i ) | b.get_word( i ) ); x.set_cword( i, a.get_cword( i ) | b.get_cword( i ) ); } x.clean_tail(); return x; } template inline const sc_lv_base lrotate( const sc_proxy& x, int n ) { sc_lv_base a( x.back_cast() ); return a.lrotate( n ); } // bitwise right rotate template inline X& sc_proxy::rrotate( int n ) { X& x = back_cast(); if( n < 0 ) { sc_proxy_out_of_bounds( "right rotate operation is only allowed with " "positive rotate values, rotate value = ", n ); return x; } int len = x.length(); n %= len; // x = (x >> n) | (x << (len - n)); sc_lv_base a( x >> n ); sc_lv_base b( x << (len - n) ); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { x.set_word( i, a.get_word( i ) | b.get_word( i ) ); x.set_cword( i, a.get_cword( i ) | b.get_cword( i ) ); } x.clean_tail(); return x; } template inline const sc_lv_base rrotate( const sc_proxy& x, int n ) { sc_lv_base a( x.back_cast() ); return a.rrotate( n ); } // bitwise reverse template inline const sc_lv_base reverse( const sc_proxy& x ) { sc_lv_base a( x.back_cast() ); return a.reverse(); } // relational operators template inline bool operator == ( const sc_proxy& px, const sc_proxy& py ) { const X& x = px.back_cast(); const Y& y = py.back_cast(); int x_len = x.length(); int y_len = y.length(); if( x_len != y_len ) { return false; } int sz = x.size(); for( int i = 0; i < sz; ++ i ) { if( x.get_word( i ) != y.get_word( i ) || x.get_cword( i ) != y.get_cword( i ) ) { return false; } } return true; } #define DEFN_REL_OP_T(tp) \ template \ inline \ bool \ sc_proxy::operator == ( tp b ) const \ { \ const X& x = back_cast(); \ sc_lv_base y( x.length() ); \ y = b; \ return ( x == y ); \ } DEFN_REL_OP_T(const char*) DEFN_REL_OP_T(const bool*) DEFN_REL_OP_T(const sc_logic*) DEFN_REL_OP_T(const sc_unsigned&) DEFN_REL_OP_T(const sc_signed&) DEFN_REL_OP_T(const sc_uint_base&) DEFN_REL_OP_T(const sc_int_base&) DEFN_REL_OP_T(unsigned long) DEFN_REL_OP_T(long) DEFN_REL_OP_T(unsigned int) DEFN_REL_OP_T(int) DEFN_REL_OP_T(uint64) DEFN_REL_OP_T(int64) #undef DEFN_REL_OP_T // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref_r // // Proxy class for sc_proxy bit selection (r-value only). // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref_r a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_bitref_r b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_bitref_r b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_bitref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_bitref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_bitref_r a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_bitref_r b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_bitref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_bitref_r b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_bitref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_bitref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_bitref b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_bitref b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_bitref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_bitref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_bitref a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_bitref b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_bitref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_bitref b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_bitref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_bitref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref_r // // Proxy class for sc_proxy part selection (r-value only). // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r,sc_lv_base> operator , ( sc_subref_r a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_subref_r b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_subref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_subref_r b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_subref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_subref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_subref_r a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_subref_r b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_subref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_subref_r b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_subref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_subref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_lv_base> operator , ( sc_subref a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_subref b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_subref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_subref b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_subref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_subref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_subref a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_subref b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_subref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_subref b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_subref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_subref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref // // Proxy class for sc_proxy part selection (r-value and l-value). // ---------------------------------------------------------------------------- template inline sc_subref& sc_subref::operator = ( const sc_subref_r& b ) { sc_lv_base t( b ); // (partial) self assignment protection int len = sc_min( this->length(), t.length() ); if( ! this->reversed() ) { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo + i, t[i].value() ); } } else { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo - i, t[i].value() ); } } return *this; } template inline sc_subref& sc_subref::operator = ( const sc_subref& b ) { sc_lv_base t( b ); // (partial) self assignment protection int len = sc_min( this->length(), t.length() ); if( ! this->reversed() ) { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo + i, t[i].value() ); } } else { for( int i = len - 1; i >= 0; -- i ) { this->m_obj.set_bit( this->m_lo - i, t[i].value() ); } } return *this; } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concref_r // // Proxy class for sc_proxy concatenation (r-value only). // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r,sc_lv_base> operator , ( sc_concref_r a, const char* b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_concref_r b ) { return sc_concref_r >( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_concref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base>( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_concref_r b ) { return sc_concref_r >( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_concref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_concref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_concref_r a, const char* b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_concref_r b ) { return sc_concref_r > ( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_concref_r a, const sc_logic& b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_concref_r b ) { return sc_concref_r > ( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_concref_r a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_concref_r b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_lv_base> operator , ( sc_concref a, const char* b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > operator , ( const char* a, sc_concref b ) { return sc_concref_r > ( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> operator , ( sc_concref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( const sc_logic& a, sc_concref b ) { return sc_concref_r > ( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> operator , ( sc_concref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > operator , ( bool a, sc_concref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_concref a, const char* b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b ), 3 ); } template inline sc_concref_r > concat( const char* a, sc_concref b ) { return sc_concref_r > ( *new sc_lv_base( a ), *b.clone(), 3 ); } template inline sc_concref_r,sc_lv_base> concat( sc_concref a, const sc_logic& b ) { return sc_concref_r,sc_lv_base> ( *a.clone(), *new sc_lv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( const sc_logic& a, sc_concref b ) { return sc_concref_r > ( *new sc_lv_base( a, 1 ), *b.clone(), 3 ); } template inline sc_concref_r,sc_bv_base> concat( sc_concref a, bool b ) { return sc_concref_r,sc_bv_base> ( *a.clone(), *new sc_bv_base( b, 1 ), 3 ); } template inline sc_concref_r > concat( bool a, sc_concref b ) { return sc_concref_r > ( *new sc_bv_base( a, 1 ), *b.clone(), 3 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy // // Base class template for bit/logic vector classes. // (Barton/Nackmann implementation) // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r operator , ( const sc_proxy& a, const char* b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b ), 2 ); } template inline sc_concref_r operator , ( const char* a, const sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a ), b.back_cast(), 1 ); } template inline sc_concref_r operator , ( const sc_proxy& a, const sc_logic& b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b, 1 ), 2 ); } template inline sc_concref_r operator , ( const sc_logic& a, const sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r operator , ( const sc_proxy& a, bool b ) { return sc_concref_r ( a.back_cast(), *new sc_bv_base( b, 1 ), 2 ); } template inline sc_concref_r operator , ( bool a, const sc_proxy& b ) { return sc_concref_r ( *new sc_bv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r concat( const sc_proxy& a, const char* b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b ), 2 ); } template inline sc_concref_r concat( const char* a, const sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a ), b.back_cast(), 1 ); } template inline sc_concref_r concat( const sc_proxy& a, const sc_logic& b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b, 1 ), 2 ); } template inline sc_concref_r concat( const sc_logic& a, const sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r concat( const sc_proxy& a, bool b ) { return sc_concref_r ( a.back_cast(), *new sc_bv_base( b, 1 ), 2 ); } template inline sc_concref_r concat( bool a, const sc_proxy& b ) { return sc_concref_r ( *new sc_bv_base( a, 1 ), b.back_cast(), 1 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r operator , ( sc_proxy& a, const char* b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b ), 2 ); } template inline sc_concref_r operator , ( const char* a, sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a ), b.back_cast(), 1 ); } template inline sc_concref_r operator , ( sc_proxy& a, const sc_logic& b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b, 1 ), 2 ); } template inline sc_concref_r operator , ( const sc_logic& a, sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r operator , ( sc_proxy& a, bool b ) { return sc_concref_r ( a.back_cast(), *new sc_bv_base( b, 1 ), 2 ); } template inline sc_concref_r operator , ( bool a, sc_proxy& b ) { return sc_concref_r ( *new sc_bv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r concat( sc_proxy& a, const char* b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b ), 2 ); } template inline sc_concref_r concat( const char* a, sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a ), b.back_cast(), 1 ); } template inline sc_concref_r concat( sc_proxy& a, const sc_logic& b ) { return sc_concref_r ( a.back_cast(), *new sc_lv_base( b, 1 ), 2 ); } template inline sc_concref_r concat( const sc_logic& a, sc_proxy& b ) { return sc_concref_r ( *new sc_lv_base( a, 1 ), b.back_cast(), 1 ); } template inline sc_concref_r concat( sc_proxy& a, bool b ) { return sc_concref_r ( a.back_cast(), *new sc_bv_base( b, 1 ), 2 ); } template inline sc_concref_r concat( bool a, sc_proxy& b ) { return sc_concref_r ( *new sc_bv_base( a, 1 ), b.back_cast(), 1 ); } #endif // extern template instantiations SC_API_TEMPLATE_DECL_ sc_proxy; SC_API_TEMPLATE_DECL_ sc_proxy; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_bv.h0000644000175000017500000001206314342422106020660 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bv.h -- Arbitrary size bit vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bv.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_BV_H #define SC_BV_H #include "sysc/datatypes/bit/sc_bv_base.h" namespace sc_dt { // classes defined in this module template class sc_bv; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bv // // Arbitrary size bit vector class. // ---------------------------------------------------------------------------- template class sc_bv : public sc_bv_base { public: // constructors sc_bv() :sc_bv_base( W ) {} explicit sc_bv( bool init_value ) : sc_bv_base( init_value, W ) {} explicit sc_bv( char init_value ) : sc_bv_base( (init_value != '0'), W ) {} sc_bv( const char* a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const bool* a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_logic* a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_unsigned& a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_signed& a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_uint_base& a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_int_base& a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( unsigned long a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( long a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( unsigned int a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( int a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( uint64 a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( int64 a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } template sc_bv( const sc_proxy& a ) : sc_bv_base( W ) { sc_bv_base::operator = ( a ); } sc_bv( const sc_bv& a ) : sc_bv_base( a ) {} // assignment operators template sc_bv& operator = ( const sc_proxy& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_bv& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const char* a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const bool* a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_logic* a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_unsigned& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_signed& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_uint_base& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( const sc_int_base& a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( unsigned long a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( long a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( unsigned int a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( int a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( uint64 a ) { sc_bv_base::operator = ( a ); return *this; } sc_bv& operator = ( int64 a ) { sc_bv_base::operator = ( a ); return *this; } }; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_lv.h0000644000175000017500000001223414342422106020672 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_lv.h -- Arbitrary size logic vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_lv.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_LV_H #define SC_LV_H #include "sysc/datatypes/bit/sc_lv_base.h" namespace sc_dt { // classes defined in this module template class sc_lv; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_lv // // Arbitrary size logic vector class. // ---------------------------------------------------------------------------- template class sc_lv : public sc_lv_base { public: // constructors sc_lv() : sc_lv_base( W ) {} explicit sc_lv( const sc_logic& init_value ) : sc_lv_base( init_value, W ) {} explicit sc_lv( bool init_value ) : sc_lv_base( sc_logic( init_value ), W ) {} explicit sc_lv( char init_value ) : sc_lv_base( sc_logic( init_value ), W ) {} sc_lv( const char* a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const bool* a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_logic* a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_unsigned& a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_signed& a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_uint_base& a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_int_base& a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( unsigned long a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( long a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( unsigned int a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( int a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( uint64 a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( int64 a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } template sc_lv( const sc_proxy& a ) : sc_lv_base( W ) { sc_lv_base::operator = ( a ); } sc_lv( const sc_lv& a ) : sc_lv_base( a ) {} // assignment operators template sc_lv& operator = ( const sc_proxy& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_lv& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const char* a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const bool* a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_logic* a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_unsigned& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_signed& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_uint_base& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( const sc_int_base& a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( unsigned long a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( long a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( unsigned int a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( int a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( uint64 a ) { sc_lv_base::operator = ( a ); return *this; } sc_lv& operator = ( int64 a ) { sc_lv_base::operator = ( a ); return *this; } }; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_bv_base.h0000644000175000017500000001621514342422106021655 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bv_base.h -- Arbitrary size bit vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bv_base.h,v $ // Revision 1.3 2011/08/26 22:32:00 acg // Torsten Maehne: added parentheses to make opearator ordering more obvious. // // Revision 1.2 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_BV_BASE_H #define SC_BV_BASE_H #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_bit_proxies.h" #include "sysc/datatypes/bit/sc_proxy.h" #include "sysc/datatypes/int/sc_length_param.h" namespace sc_dt { // classes defined in this module class sc_bv_base; // ---------------------------------------------------------------------------- // CLASS : sc_bv_base // // Arbitrary size bit vector base class. // ---------------------------------------------------------------------------- class SC_API sc_bv_base : public sc_proxy { friend class sc_lv_base; void init( int length_, bool init_value = false ); void assign_from_string( const std::string& ); public: // typedefs typedef sc_proxy base_type; typedef base_type::value_type value_type; // constructors explicit sc_bv_base( int length_ = sc_length_param().len() ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( length_ ); } explicit sc_bv_base( bool a, int length_ = sc_length_param().len() ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( length_, a ); } sc_bv_base( const char* a ); sc_bv_base( const char* a, int length_ ); template sc_bv_base( const sc_proxy& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( a.back_cast().length() ); base_type::assign_( a ); } sc_bv_base( const sc_bv_base& a ); #ifdef SC_DT_DEPRECATED explicit sc_bv_base( const sc_unsigned& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_bv_base( const sc_signed& a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_bv_base( const sc_uint_base& a) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( a.length() ); base_type::assign_( a ); } explicit sc_bv_base( const sc_int_base& a) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( a.length() ); base_type::assign_( a ); } #endif // destructor virtual ~sc_bv_base() { delete [] m_data; } // assignment operators template sc_bv_base& operator = ( const sc_proxy& a ) { assign_p_( *this, a ); return *this; } sc_bv_base& operator = ( const sc_bv_base& a ) { assign_p_( *this, a ); return *this; } sc_bv_base& operator = ( const char* a ); sc_bv_base& operator = ( const bool* a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( const sc_logic* a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( const sc_unsigned& a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( const sc_signed& a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( const sc_uint_base& a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( const sc_int_base& a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( unsigned long a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( long a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( unsigned int a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( int a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( uint64 a ) { base_type::assign_( a ); return *this; } sc_bv_base& operator = ( int64 a ) { base_type::assign_( a ); return *this; } // common methods int length() const { return m_len; } int size() const { return m_size; } value_type get_bit( int i ) const; void set_bit( int i, value_type value ); sc_digit get_word( int i ) const { return m_data[i]; } void set_word( int i, sc_digit w ) { m_data[i] = w; } sc_digit get_cword( int /*i*/ ) const { return SC_DIGIT_ZERO; } void set_cword( int i, sc_digit w ); void clean_tail(); // other methods bool is_01() const { return true; } protected: int m_len; // length in bits int m_size; // size of data array sc_digit* m_data; // data array }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII #if 0 // bitwise left rotate inline const sc_bv_base lrotate( const sc_bv_base& x, int n ) { sc_bv_base a( x ); return a.lrotate( n ); } // bitwise right rotate inline const sc_bv_base rrotate( const sc_bv_base& x, int n ) { sc_bv_base a( x ); return a.rrotate( n ); } #endif // common methods inline sc_bv_base::value_type sc_bv_base::get_bit( int i ) const { int wi = i / SC_DIGIT_SIZE; int bi = i % SC_DIGIT_SIZE; return value_type( (m_data[wi] >> bi) & SC_DIGIT_ONE ); } inline void sc_bv_base::set_bit( int i, value_type value ) { int wi = i / SC_DIGIT_SIZE; int bi = i % SC_DIGIT_SIZE; sc_digit mask = SC_DIGIT_ONE << bi; m_data[wi] |= mask; // set bit to 1 m_data[wi] &= value << bi | ~mask; } inline void sc_bv_base::set_cword( int /*i*/, sc_digit w ) { if( w ) { SC_REPORT_WARNING( sc_core::SC_ID_SC_BV_CANNOT_CONTAIN_X_AND_Z_, 0 ); } } inline void sc_bv_base::clean_tail() { int wi = m_size - 1; int bi = m_len % SC_DIGIT_SIZE; if ( bi != 0 ) m_data[wi] &= ~SC_DIGIT_ZERO >> (SC_DIGIT_SIZE - bi); } } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_lv_base.cpp0000644000175000017500000001217614342422106022224 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_lv_base.cpp -- Arbitrary size logic vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_lv_base.cpp,v $ // Revision 1.2 2011/08/24 22:05:40 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include namespace sc_dt { // explicit template instantiations template class SC_API sc_proxy; template class SC_API sc_proxy; SC_API void sc_proxy_out_of_bounds(const char* msg, int64 val) { std::stringstream ss; if( msg != NULL ) ss << msg; if( val != 0 ) ss << val; SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, ss.str().c_str() ); } // ---------------------------------------------------------------------------- // CLASS : sc_lv_base // // Arbitrary size logic vector base class. // ---------------------------------------------------------------------------- static const sc_digit data_array[] = { SC_DIGIT_ZERO, ~SC_DIGIT_ZERO, SC_DIGIT_ZERO, ~SC_DIGIT_ZERO }; static const sc_digit ctrl_array[] = { SC_DIGIT_ZERO, SC_DIGIT_ZERO, ~SC_DIGIT_ZERO, ~SC_DIGIT_ZERO }; void sc_lv_base::init( int length_, const sc_logic& init_value ) { // check the length if( length_ <= 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_ZERO_LENGTH_, 0 ); sc_core::sc_abort(); // can't recover from here } // allocate memory for the data and control words m_len = length_; m_size = (m_len - 1) / SC_DIGIT_SIZE + 1; m_data = new sc_digit[m_size * 2]; m_ctrl = m_data + m_size; // initialize the bits to 'init_value' sc_digit dw = data_array[init_value.value()]; sc_digit cw = ctrl_array[init_value.value()]; int sz = m_size; for( int i = 0; i < sz; ++ i ) { m_data[i] = dw; m_ctrl[i] = cw; } clean_tail(); } void sc_lv_base::assign_from_string( const std::string& s ) { // s must have been converted to bin int len = m_len; int s_len = s.length() - 1; int min_len = sc_min( len, s_len ); int i = 0; for( ; i < min_len; ++ i ) { char c = s[s_len - i - 1]; set_bit( i, sc_logic::char_to_logic[(int)c] ); } // if formatted, fill the rest with sign(s), otherwise fill with zeros sc_logic_value_t fill = (s[s_len] == 'F' ? sc_logic_value_t( s[0] - '0' ) : sc_logic_value_t( 0 )); for( ; i < len; ++ i ) { set_bit( i, fill ); } } // constructors sc_lv_base::sc_lv_base( const char* a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { std::string s = convert_to_bin( a ); init( s.length() - 1 ); assign_from_string( s ); } sc_lv_base::sc_lv_base( const char* a, int length_ ) : m_len( 0 ), m_size( 0 ), m_data( 0 ), m_ctrl( 0 ) { init( length_ ); assign_from_string( convert_to_bin( a ) ); } sc_lv_base::sc_lv_base( const sc_lv_base& a ) : sc_proxy(), m_len( a.m_len ), m_size( a.m_size ), m_data( new sc_digit[m_size * 2] ), m_ctrl( m_data + m_size ) { // copy the bits int sz = m_size; for( int i = 0; i < sz; ++ i ) { m_data[i] = a.m_data[i]; m_ctrl[i] = a.m_ctrl[i]; } } // assignment operators sc_lv_base& sc_lv_base::operator = ( const char* a ) { assign_from_string( convert_to_bin( a ) ); return *this; } // returns true if logic vector contains only 0's and 1's bool sc_lv_base::is_01() const { int sz = m_size; for( int i = 0; i < sz; ++ i ) { if( m_ctrl[i] != 0 ) { return false; } } return true; } } // namespace sc_dt systemc-2.3.4/src/sysc/datatypes/bit/sc_logic.h0000644000175000017500000002341014342422106021344 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_logic.h -- C++ implementation of logic type. Behaves pretty much the same way as HDLs except with 4 values. Original Author: Stan Y. Liao, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_logic.h,v $ // Revision 1.3 2011/08/07 18:54:19 acg // Philipp A. Hartmann: remove friend function declarations that implement // code, and clean up how bit and logic operators are defined in general. // // Revision 1.2 2011/01/25 20:50:37 acg // Andy Goodrich: changes for IEEE 1666 2011. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.5 2006/12/02 21:00:57 acg // Andy Goodrich: fixes for concatenation support. // // Revision 1.4 2006/05/08 17:49:59 acg // Andy Goodrich: Added David Long's declarations for friend operators, // functions, and methods, to keep the Microsoft compiler happy. // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_LOGIC_H #define SC_LOGIC_H #include #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/kernel/sc_macros.h" #include "sysc/utils/sc_mempool.h" #include "sysc/datatypes/bit/sc_bit.h" namespace sc_dt { // classes defined in this module class sc_logic; // ---------------------------------------------------------------------------- // ENUM : sc_logic_value_t // // Enumeration of values for sc_logic. // ---------------------------------------------------------------------------- enum sc_logic_value_t { Log_0 = 0, Log_1, Log_Z, Log_X }; // ---------------------------------------------------------------------------- // CLASS : sc_logic // // Four-valued logic type. // ---------------------------------------------------------------------------- class SC_API sc_logic { private: // support methods static void invalid_value( sc_logic_value_t ); static void invalid_value( char ); static void invalid_value( int ); static sc_logic_value_t to_value( sc_logic_value_t v ) { if( v < Log_0 || v > Log_X ) { invalid_value( v ); // may continue, if suppressed v = Log_X; } return v; } static sc_logic_value_t to_value( bool b ) { return ( b ? Log_1 : Log_0 ); } static sc_logic_value_t to_value( char c ) { unsigned int index = (int)c; if ( index > 127 ) { invalid_value( c ); // may continue, if suppressed index = 127; // aka Log_X } return char_to_logic[index]; } static sc_logic_value_t to_value( int i ) { if( i < Log_0 || i > Log_X ) { invalid_value( i ); // may continue, if suppressed i = Log_X; } return sc_logic_value_t( i ); } void invalid_01() const; public: // conversion tables static const sc_logic_value_t char_to_logic[128]; static const char logic_to_char[4]; static const sc_logic_value_t and_table[4][4]; static const sc_logic_value_t or_table[4][4]; static const sc_logic_value_t xor_table[4][4]; static const sc_logic_value_t not_table[4]; // constructors sc_logic() : m_val( Log_X ) {} sc_logic( const sc_logic& a ) : m_val( a.m_val ) {} sc_logic( sc_logic_value_t v ) : m_val( to_value( v ) ) {} explicit sc_logic( bool a ) : m_val( to_value( a ) ) {} explicit sc_logic( char a ) : m_val( to_value( a ) ) {} explicit sc_logic( int a ) : m_val( to_value( a ) ) {} explicit sc_logic( const sc_bit& a ) : m_val( to_value( a.to_bool() ) ) {} // destructor ~sc_logic() {} // (bitwise) assignment operators #define DEFN_ASN_OP_T(op,tp) \ sc_logic& operator op ( tp v ) \ { *this op sc_logic( v ); return *this; } #define DEFN_ASN_OP(op) \ DEFN_ASN_OP_T(op, sc_logic_value_t) \ DEFN_ASN_OP_T(op, bool) \ DEFN_ASN_OP_T(op, char) \ DEFN_ASN_OP_T(op, int ) \ DEFN_ASN_OP_T(op, const sc_bit& ) sc_logic& operator = ( const sc_logic& a ) { m_val = a.m_val; return *this; } sc_logic& operator &= ( const sc_logic& b ) { m_val = and_table[m_val][b.m_val]; return *this; } sc_logic& operator |= ( const sc_logic& b ) { m_val = or_table[m_val][b.m_val]; return *this; } sc_logic& operator ^= ( const sc_logic& b ) { m_val = xor_table[m_val][b.m_val]; return *this; } DEFN_ASN_OP(=) DEFN_ASN_OP(&=) DEFN_ASN_OP(|=) DEFN_ASN_OP(^=) #undef DEFN_ASN_OP_T #undef DEFN_ASN_OP // bitwise operators and functions friend const sc_logic operator & ( const sc_logic&, const sc_logic& ); friend const sc_logic operator | ( const sc_logic&, const sc_logic& ); friend const sc_logic operator ^ ( const sc_logic&, const sc_logic& ); // relational operators friend bool operator == ( const sc_logic&, const sc_logic& ); friend bool operator != ( const sc_logic&, const sc_logic& ); // bitwise complement const sc_logic operator ~ () const { return sc_logic( not_table[m_val] ); } sc_logic& b_not() { m_val = not_table[m_val]; return *this; } // explicit conversions sc_logic_value_t value() const { return m_val; } bool is_01() const { return ( (int) m_val == Log_0 || (int) m_val == Log_1 ); } bool to_bool() const { if( ! is_01() ) { invalid_01(); } return ( (int) m_val != Log_0 ); } char to_char() const { return logic_to_char[m_val]; } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_char(); } void scan( ::std::istream& is = ::std::cin ); // memory (de)allocation static void* operator new( std::size_t, void* p ) // placement new { return p; } static void* operator new( std::size_t sz ) { return sc_core::sc_mempool::allocate( sz ); } static void operator delete( void* p, std::size_t sz ) { sc_core::sc_mempool::release( p, sz ); } static void* operator new [] ( std::size_t sz ) { return sc_core::sc_mempool::allocate( sz ); } static void operator delete [] ( void* p, std::size_t sz ) { sc_core::sc_mempool::release( p, sz ); } private: sc_logic_value_t m_val; private: // disabled explicit sc_logic( const char* ); sc_logic& operator = ( const char* ); }; // ---------------------------------------------------------------------------- // bitwise operators inline const sc_logic operator & ( const sc_logic& a, const sc_logic& b ) { return sc_logic( sc_logic::and_table[a.m_val][b.m_val] ); } inline const sc_logic operator | ( const sc_logic& a, const sc_logic& b ) { return sc_logic( sc_logic::or_table[a.m_val][b.m_val] ); } inline const sc_logic operator ^ ( const sc_logic& a, const sc_logic& b ) { return sc_logic( sc_logic::xor_table[a.m_val][b.m_val] ); } #define DEFN_BIN_OP_T(ret,op,tp) \ inline ret operator op ( const sc_logic& a, tp b ) \ { return ( a op sc_logic( b ) ); } \ inline ret operator op ( tp a, const sc_logic& b ) \ { return ( sc_logic( a ) op b ); } #define DEFN_BIN_OP(ret,op) \ DEFN_BIN_OP_T(ret,op,sc_logic_value_t) \ DEFN_BIN_OP_T(ret,op,bool) \ DEFN_BIN_OP_T(ret,op,char) \ DEFN_BIN_OP_T(ret,op,int) DEFN_BIN_OP(const sc_logic,&) DEFN_BIN_OP(const sc_logic,|) DEFN_BIN_OP(const sc_logic,^) // relational operators and functions inline bool operator == ( const sc_logic& a, const sc_logic& b ) { return ( (int) a.m_val == b.m_val ); } inline bool operator != ( const sc_logic& a, const sc_logic& b ) { return ( (int) a.m_val != b.m_val ); } DEFN_BIN_OP(bool,==) DEFN_BIN_OP(bool,!=) #undef DEFN_BIN_OP_T #undef DEFN_BIN_OP // ---------------------------------------------------------------------------- inline ::std::ostream& operator << ( ::std::ostream& os, const sc_logic& a ) { a.print( os ); return os; } inline ::std::istream& operator >> ( ::std::istream& is, sc_logic& a ) { a.scan( is ); return is; } extern SC_API const sc_logic SC_LOGIC_0; extern SC_API const sc_logic SC_LOGIC_1; extern SC_API const sc_logic SC_LOGIC_Z; extern SC_API const sc_logic SC_LOGIC_X; // #ifdef SC_DT_DEPRECATED extern SC_API const sc_logic sc_logic_0; extern SC_API const sc_logic sc_logic_1; extern SC_API const sc_logic sc_logic_Z; extern SC_API const sc_logic sc_logic_X; // #endif } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_bv_base.cpp0000644000175000017500000001616514342422106022214 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bv_base.cpp -- Arbitrary size bit vector class. Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bv_base.cpp,v $ // Revision 1.2 2011/08/24 22:05:40 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.4 2006/04/11 23:12:26 acg // Andy Goodrich: Fixed bug in parsing of extended string constants like // 0bus1110011. // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include #include #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_bv_base.h" #include "sysc/datatypes/fx/sc_fix.h" #include "sysc/datatypes/fx/sc_ufix.h" namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS : sc_bv_base // // Arbitrary size bit vector base class. // ---------------------------------------------------------------------------- void sc_bv_base::init( int length_, bool init_value ) { // check the length if( length_ <= 0 ) { SC_REPORT_ERROR( sc_core::SC_ID_ZERO_LENGTH_, 0 ); sc_core::sc_abort(); // can't recover from here } // allocate memory for the data and control words m_len = length_; m_size = (m_len - 1) / SC_DIGIT_SIZE + 1; m_data = new sc_digit[m_size]; // initialize the bits to 'init_value' sc_digit dw = init_value ? ~SC_DIGIT_ZERO : SC_DIGIT_ZERO; int sz = m_size; for( int i = 0; i < sz; ++ i ) { m_data[i] = dw; } clean_tail(); } void sc_bv_base::assign_from_string( const std::string& s ) { // s must have been converted to bin int len = m_len; int s_len = s.length() - 1; int min_len = sc_min( len, s_len ); int i = 0; for( ; i < min_len; ++ i ) { char c = s[s_len - i - 1]; if( c != '0' && c != '1' ) { SC_REPORT_ERROR( sc_core::SC_ID_CANNOT_CONVERT_, "string can contain only '0' and '1' characters" ); // may continue, if suppressed c = '0'; } set_bit( i, sc_logic_value_t( c - '0' ) ); } // if formatted, fill the rest with sign(s), otherwise fill with zeros sc_logic_value_t fill = (s[s_len] == 'F' ? sc_logic_value_t( s[0] - '0' ) : sc_logic_value_t( 0 )); for( ; i < len; ++ i ) { set_bit( i, fill ); } } // constructors sc_bv_base::sc_bv_base( const char* a ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { std::string s = convert_to_bin( a ); init( s.length() - 1 ); assign_from_string( s ); } sc_bv_base::sc_bv_base( const char* a, int length_ ) : m_len( 0 ), m_size( 0 ), m_data( 0 ) { init( length_ ); assign_from_string( convert_to_bin( a ) ); } sc_bv_base::sc_bv_base( const sc_bv_base& a ) : sc_proxy(), m_len( a.m_len ), m_size( a.m_size ), m_data( new sc_digit[m_size] ) { // copy the bits int sz = m_size; for( int i = 0; i < sz; ++ i ) { m_data[i] = a.m_data[i]; } } // assignment operators sc_bv_base& sc_bv_base::operator = ( const char* a ) { assign_from_string( convert_to_bin( a ) ); return *this; } // ---------------------------------------------------------------------------- // convert formatted string to binary string SC_API const std::string convert_to_bin( const char* s ) { // Beware: logic character strings cannot start with '0x' or '0X', // because this is seen as a hexadecimal encoding prefix! if( s == 0 ) { SC_REPORT_ERROR(sc_core::SC_ID_CANNOT_CONVERT_, "character string is zero" ); return std::string(); } if( *s == 0 ) { SC_REPORT_ERROR(sc_core::SC_ID_CANNOT_CONVERT_, "character string is empty"); return std::string(); } int n = strlen( s ); int i = 0; if( s[0] == '-' || s[0] == '+' ) { ++ i; } if( n > (i + 2) && s[i] == '0' ) { if (s[i+1] == 'b' || s[i+1] == 'B' ) { if ( s[i+2] == '0' || s[i+2] == '1' ) { std::string str( &s[2] ); str += "F"; return str; } } if ( s[i+1] == 'b' || s[i+1] == 'B' || s[i+1] == 'c' || s[i+1] == 'C' || s[i+1] == 'd' || s[i+1] == 'D' || s[i+1] == 'o' || s[i+1] == 'O' || s[i+1] == 'x' || s[i+1] == 'X') { try { // worst case length = n * 4 sc_fix a( s, n * 4, n * 4, SC_TRN, SC_WRAP, 0, SC_ON ); std::string str = a.to_bin(); str += "F"; // mark the string as formatted // get rid of prefix (0b) and redundant leading bits const char* p = str.c_str() + 2; while( p[1] && p[0] == p[1] ) { ++ p; } return std::string( p ); } catch( const sc_core::sc_report & ) { std::stringstream msg; msg << "character string '" << s << "' is not valid"; SC_REPORT_ERROR( sc_core::SC_ID_CANNOT_CONVERT_, msg.str().c_str() ); return std::string(); } } } // bin by default std::string str( s ); str += "U"; // mark the string as unformatted return str; } // convert binary string to formatted string SC_API const std::string convert_to_fmt( const std::string& s, sc_numrep numrep, bool w_prefix ) { int n = s.length(); std::string str("0bus"); // str += "0bus"; str += s; sc_ufix a( str.c_str(), n, n, SC_TRN, SC_WRAP, 0, SC_ON ); return a.to_string( numrep, w_prefix ); } } // namespace sc_dt systemc-2.3.4/src/sysc/datatypes/bit/sc_bit_ids.h0000644000175000017500000000737114342422106021674 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bit_ids.h -- Report ids for the datatypes/bit code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_bit_ids.h,v $ // Revision 1.1.1.1 2006/12/15 20:20:04 acg // SystemC 2.3 // // Revision 1.5 2006/01/25 00:31:15 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.4 2006/01/24 20:50:55 acg // Andy Goodrich: added warnings indicating that sc_bit is deprecated and that // the C bool data type should be used in its place. // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_BIT_IDS_H #define SC_BIT_IDS_H #include "sysc/utils/sc_report.h" // ---------------------------------------------------------------------------- // Report ids (datatypes/bit) // // Report ids in the range of 200-299. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } namespace sc_core { extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; // in sc_report_handler.cpp } #endif SC_DEFINE_MESSAGE( SC_ID_LENGTH_MISMATCH_, 200, "length mismatch in bit/logic vector assignment" ) SC_DEFINE_MESSAGE( SC_ID_INCOMPATIBLE_TYPES_, 201, "incompatible types" ) SC_DEFINE_MESSAGE( SC_ID_CANNOT_CONVERT_, 202, "cannot perform conversion" ) SC_DEFINE_MESSAGE( SC_ID_INCOMPATIBLE_VECTORS_, 203, "incompatible vectors" ) SC_DEFINE_MESSAGE( SC_ID_VALUE_NOT_VALID_, 204, "value is not valid" ) SC_DEFINE_MESSAGE( SC_ID_ZERO_LENGTH_, 205, "zero length" ) SC_DEFINE_MESSAGE( SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 206, "vector contains 4-value logic" ) SC_DEFINE_MESSAGE( SC_ID_SC_BV_CANNOT_CONTAIN_X_AND_Z_, 207, "sc_bv cannot contain values X and Z" ) SC_DEFINE_MESSAGE( SC_ID_VECTOR_TOO_LONG_, 208, "vector is too long: truncated" ) SC_DEFINE_MESSAGE( SC_ID_VECTOR_TOO_SHORT_, 209, "vector is too short: 0-padded" ) SC_DEFINE_MESSAGE( SC_ID_WRONG_VALUE_, 210, "wrong value" ) SC_DEFINE_MESSAGE( SC_ID_LOGIC_Z_TO_BOOL_, 211, "sc_logic value 'Z' cannot be converted to bool" ) SC_DEFINE_MESSAGE( SC_ID_LOGIC_X_TO_BOOL_, 212, "sc_logic value 'X' cannot be converted to bool" ) #endif // Taf! systemc-2.3.4/src/sysc/datatypes/bit/sc_bit_proxies.h0000644000175000017500000026533614342422106022615 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_bit_proxies.h -- Proxy classes for vector data types. Original Author: Gene Bushuyev, Synopsys, Inc. CHANGE LOG AT THE END OF THE FILE *****************************************************************************/ #ifndef SC_BIT_PROXIES_H #define SC_BIT_PROXIES_H #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_proxy.h" #ifdef _MSC_VER // disable false positive warning C4806: // '&': unsafe operation: no value of type 'bool' promoted to type // 'const sc_dt::sc_digit' can equal the given constant // triggered by calling sc_subref::get_cword // TODO: optimize get_cword for bit ranges to avoid check entirely #pragma warning(push) #pragma warning(disable:4806) #endif namespace sc_dt { // classes defined in this module template class sc_bitref_conv_r; template class sc_bitref_r; template class sc_bitref; template class sc_subref_r; template class sc_subref; template class sc_concref_r; template class sc_concref; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref_conv_r // // Proxy class for sc_proxy bit selection (r-value only, boolean conversion). // ---------------------------------------------------------------------------- template class sc_bitref_conv_r { /* empty by default */ }; // specialization for bit-vector based sc_proxy classes template class sc_bitref_conv_r > { public: #if IEEE_1666_CPLUSPLUS >= 201103L // explicit operator needs C++11 // explicit conversion to bool explicit operator bool() const { return static_cast&>(*this).to_bool(); } #endif // explicit (negating) conversion to bool bool operator!() const { return ! static_cast&>(*this).to_bool(); } }; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref_r // // Proxy class for sc_proxy bit selection (r-value only). // ---------------------------------------------------------------------------- template class sc_bitref_r : public sc_bitref_conv_r { friend class sc_bv_base; friend class sc_lv_base; public: // typedefs typedef typename T::traits_type traits_type; typedef typename traits_type::bit_type bit_type; typedef typename traits_type::value_type value_type; // constructor sc_bitref_r( const T& obj_, int index_ ) : m_obj( const_cast( obj_ ) ), m_index( index_ ) {} // copy constructor sc_bitref_r( const sc_bitref_r& a ) : m_obj( a.m_obj ), m_index( a.m_index ) {} // cloning sc_bitref_r* clone() const { return new sc_bitref_r( *this ); } // bitwise operators and functions // bitwise complement bit_type operator ~ () const { return bit_type( sc_logic::not_table[value()] ); } // implicit conversion to bit_type operator bit_type() const { return bit_type( m_obj.get_bit( m_index ) ); } // explicit conversions value_type value() const { return m_obj.get_bit( m_index ); } bool is_01() const { return sc_logic( value() ).is_01(); } bool to_bool() const { return sc_logic( value() ).to_bool(); } char to_char() const { return sc_logic( value() ).to_char(); } // common methods int length() const { return 1; } int size() const { return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); } value_type get_bit( int n ) const; sc_digit get_word( int i ) const; sc_digit get_cword( int i ) const; // other methods void print( ::std::ostream& os = ::std::cout ) const { os << to_char(); } protected: T& m_obj; int m_index; private: // disabled sc_bitref_r(); sc_bitref_r& operator = ( const sc_bitref_r& ); }; // bitwise operators and functions // bitwise and template inline sc_logic operator & ( const sc_bitref_r& a, const sc_bitref_r& b ); // bitwise or template inline sc_logic operator | ( const sc_bitref_r& a, const sc_bitref_r& b ); // bitwise xor template inline sc_logic operator ^ ( const sc_bitref_r& a, const sc_bitref_r& b ); // relational operators and functions template inline bool operator == ( const sc_bitref_r& a, const sc_bitref_r& b ); template inline bool operator != ( const sc_bitref_r& a, const sc_bitref_r& b ); // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref_r, sc_concref_r ); template inline sc_concref_r,T2> operator , ( sc_bitref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref_r, const char* ); template inline sc_concref_r > operator , ( const char*, sc_bitref_r ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref_r, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_bitref_r ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref_r, bool ); template inline sc_concref_r > operator , ( bool, sc_bitref_r ); template inline sc_concref_r,sc_bitref_r > concat( sc_bitref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_bitref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_bitref_r, sc_concref_r ); template inline sc_concref_r,T2> concat( sc_bitref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref_r, const char* ); template inline sc_concref_r > concat( const char*, sc_bitref_r ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref_r, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_bitref_r ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref_r, bool ); template inline sc_concref_r > concat( bool, sc_bitref_r ); #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref, sc_concref_r ); template inline sc_concref_r,T2> operator , ( sc_bitref, const sc_proxy& ); template inline sc_concref_r,T2> operator , ( sc_bitref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref, const char* ); template inline sc_concref_r > operator , ( const char*, sc_bitref ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_bitref ); template inline sc_concref_r,sc_lv_base> operator , ( sc_bitref, bool ); template inline sc_concref_r > operator , ( bool, sc_bitref ); template inline sc_concref_r,sc_bitref_r > concat( sc_bitref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > concat( sc_bitref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_bitref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > concat( sc_bitref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_bitref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > concat( sc_bitref, sc_concref_r ); template inline sc_concref_r,T2> concat( sc_bitref, const sc_proxy& ); template inline sc_concref_r,T2> concat( sc_bitref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref, const char* ); template inline sc_concref_r > concat( const char*, sc_bitref ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_bitref ); template inline sc_concref_r,sc_lv_base> concat( sc_bitref, bool ); template inline sc_concref_r > concat( bool, sc_bitref ); #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref // // Proxy class for sc_proxy bit selection (r-value and l-value). // ---------------------------------------------------------------------------- template class sc_bitref : public sc_bitref_r { friend class sc_bv_base; friend class sc_lv_base; public: typedef typename sc_bitref_r::value_type value_type; // constructor sc_bitref( X& obj_, int index_ ) : sc_bitref_r( obj_, index_ ) {} // copy constructor sc_bitref( const sc_bitref& a ) : sc_bitref_r( a ) {} // cloning sc_bitref* clone() const { return new sc_bitref( *this ); } // assignment operators sc_bitref& operator = ( const sc_bitref_r& a ); sc_bitref& operator = ( const sc_bitref& a ); sc_bitref& operator = ( const sc_logic& a ) { this->m_obj.set_bit( this->m_index, a.value() ); return *this; } sc_bitref& operator = ( sc_logic_value_t v ) { *this = sc_logic( v ); return *this; } sc_bitref& operator = ( bool a ) { *this = sc_logic( a ); return *this; } sc_bitref& operator = ( char a ) { *this = sc_logic( a ); return *this; } sc_bitref& operator = ( int a ) { *this = sc_logic( a ); return *this; } sc_bitref& operator = ( const sc_bit& a ) { *this = sc_logic( a ); return *this; } // bitwise assignment operators sc_bitref& operator &= ( const sc_bitref_r& a ); sc_bitref& operator &= ( const sc_logic& a ); sc_bitref& operator &= ( sc_logic_value_t v ) { *this &= sc_logic( v ); return *this; } sc_bitref& operator &= ( bool a ) { *this &= sc_logic( a ); return *this; } sc_bitref& operator &= ( char a ) { *this &= sc_logic( a ); return *this; } sc_bitref& operator &= ( int a ) { *this &= sc_logic( a ); return *this; } sc_bitref& operator |= ( const sc_bitref_r& a ); sc_bitref& operator |= ( const sc_logic& a ); sc_bitref& operator |= ( sc_logic_value_t v ) { *this |= sc_logic( v ); return *this; } sc_bitref& operator |= ( bool a ) { *this |= sc_logic( a ); return *this; } sc_bitref& operator |= ( char a ) { *this |= sc_logic( a ); return *this; } sc_bitref& operator |= ( int a ) { *this |= sc_logic( a ); return *this; } sc_bitref& operator ^= ( const sc_bitref_r& a ); sc_bitref& operator ^= ( const sc_logic& a ); sc_bitref& operator ^= ( sc_logic_value_t v ) { *this ^= sc_logic( v ); return *this; } sc_bitref& operator ^= ( bool a ) { *this ^= sc_logic( a ); return *this; } sc_bitref& operator ^= ( char a ) { *this ^= sc_logic( a ); return *this; } sc_bitref& operator ^= ( int a ) { *this ^= sc_logic( a ); return *this; } // bitwise operators and functions // bitwise complement sc_bitref& b_not(); // common methods void set_bit( int n, value_type value ); void set_word( int i, sc_digit w ); void set_cword( int i, sc_digit w ); void clean_tail() { this->m_obj.clean_tail(); } // other methods void scan( ::std::istream& is = ::std::cin ); private: // disabled sc_bitref(); }; // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_bitref, sc_bitref ); template inline sc_concref,sc_subref > operator , ( sc_bitref, sc_subref ); template inline sc_concref,sc_concref > operator , ( sc_bitref, sc_concref ); template inline sc_concref,T2> operator , ( sc_bitref, sc_proxy& ); template inline sc_concref,sc_bitref > concat( sc_bitref, sc_bitref ); template inline sc_concref,sc_subref > concat( sc_bitref, sc_subref ); template inline sc_concref,sc_concref > concat( sc_bitref, sc_concref ); template inline sc_concref,T2> concat( sc_bitref, sc_proxy& ); template ::std::istream& operator >> ( ::std::istream&, sc_bitref ); // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref_r // // Proxy class for sc_proxy part selection (r-value only). // ---------------------------------------------------------------------------- template class sc_subref_r : public sc_proxy > { void check_bounds(); public: typedef typename sc_proxy >::value_type value_type; // constructor sc_subref_r( const X& obj_, int hi_, int lo_ ) : m_obj( const_cast( obj_ ) ), m_hi( hi_ ), m_lo( lo_ ), m_len( 0 ) { check_bounds(); } // copy constructor sc_subref_r( const sc_subref_r& a ) : m_obj( a.m_obj ), m_hi( a.m_hi ), m_lo( a.m_lo ), m_len( a.m_len ) {} // cloning sc_subref_r* clone() const { return new sc_subref_r( *this ); } // common methods int length() const { return m_len; } int size() const { return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); } value_type get_bit( int n ) const; void set_bit( int n, value_type value ); sc_digit get_word( int i )const; void set_word( int i, sc_digit w ); sc_digit get_cword( int i ) const; void set_cword( int i, sc_digit w ); void clean_tail() { m_obj.clean_tail(); } // other methods bool is_01() const; bool reversed() const { return m_lo > m_hi; } protected: X& m_obj; int m_hi; int m_lo; int m_len; private: // disabled sc_subref_r(); sc_subref_r& operator = ( const sc_subref_r& ); }; // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_subref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_subref_r, sc_concref_r ); template inline sc_concref_r,T2> operator , ( sc_subref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_subref_r, const char* ); template inline sc_concref_r > operator , ( const char*, sc_subref_r ); template inline sc_concref_r,sc_lv_base> operator , ( sc_subref_r, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_subref_r ); template inline sc_concref_r,sc_bv_base> operator , ( sc_subref_r, bool ); template inline sc_concref_r > operator , ( bool, sc_subref_r ); template inline sc_concref_r,sc_bitref_r > concat( sc_subref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_subref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_subref_r, sc_concref_r ); template inline sc_concref_r,T2> concat( sc_subref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_subref_r, const char* ); template inline sc_concref_r > concat( const char*, sc_subref_r ); template inline sc_concref_r,sc_lv_base> concat( sc_subref_r, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_subref_r ); template inline sc_concref_r,sc_bv_base> concat( sc_subref_r, bool ); template inline sc_concref_r > concat( bool, sc_subref_r ); #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_subref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > operator , ( sc_subref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_subref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > operator , ( sc_subref, sc_concref_r ); template inline sc_concref_r,T2> operator , ( sc_subref, const sc_proxy& ); template inline sc_concref_r,T2> operator , ( sc_subref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_subref, const char* ); template inline sc_concref_r > operator , ( const char*, sc_subref ); template inline sc_concref_r,sc_lv_base> operator , ( sc_subref, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_subref ); template inline sc_concref_r,sc_bv_base> operator , ( sc_subref, bool ); template inline sc_concref_r > operator , ( bool, sc_subref ); template inline sc_concref_r,sc_bitref_r > concat( sc_subref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > concat( sc_subref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_subref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > concat( sc_subref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_subref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > concat( sc_subref, sc_concref_r ); template inline sc_concref_r,T2> concat( sc_subref, const sc_proxy& ); template inline sc_concref_r,T2> concat( sc_subref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_subref, const char* ); template inline sc_concref_r > concat( const char*, sc_subref ); template inline sc_concref_r,sc_lv_base> concat( sc_subref, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_subref ); template inline sc_concref_r,sc_bv_base> concat( sc_subref, bool ); template inline sc_concref_r > concat( bool, sc_subref ); #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref // // Proxy class for sc_proxy part selection (r-value and l-value). // ---------------------------------------------------------------------------- template class sc_subref : public sc_subref_r { public: // typedefs typedef sc_subref_r base_type; // constructor sc_subref( X& obj_, int hi_, int lo_ ) : sc_subref_r( obj_, hi_, lo_ ) {} // copy constructor sc_subref( const sc_subref& a ) : sc_subref_r( a ) {} // cloning sc_subref* clone() const { return new sc_subref( *this ); } // assignment operators template sc_subref& operator = ( const sc_proxy& a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_subref_r& a ); sc_subref& operator = ( const sc_subref& a ); sc_subref& operator = ( const char* a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const bool* a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_logic* a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_unsigned& a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_signed& a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_uint_base& a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( const sc_int_base& a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( unsigned long a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( long a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( unsigned int a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( int a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( uint64 a ) { base_type::assign_( a ); return *this; } sc_subref& operator = ( int64 a ) { base_type::assign_( a ); return *this; } // other methods void scan( ::std::istream& = ::std::cin ); private: // disabled sc_subref(); }; // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_subref, sc_bitref ); template inline sc_concref,sc_subref > operator , ( sc_subref, sc_subref ); template inline sc_concref,sc_concref > operator , ( sc_subref, sc_concref ); template inline sc_concref,T2> operator , ( sc_subref, sc_proxy& ); template inline sc_concref,sc_bitref > concat( sc_subref, sc_bitref ); template inline sc_concref,sc_subref > concat( sc_subref, sc_subref ); template inline sc_concref,sc_concref > concat( sc_subref, sc_concref ); template inline sc_concref,T2> concat( sc_subref, sc_proxy& ); template inline ::std::istream& operator >> ( ::std::istream&, sc_subref ); // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concref_r // // Proxy class for sc_proxy concatenation (r-value only). // ---------------------------------------------------------------------------- template class sc_concref_r : public sc_proxy > { public: typedef typename sc_proxy >::value_type value_type; // constructor sc_concref_r( const X& left_, const Y& right_, int delete_ = 0 ) : m_left( const_cast( left_ ) ), m_right( const_cast( right_ ) ), m_delete( delete_ ), m_refs( *new int( 1 ) ) {} // copy constructor sc_concref_r( const sc_concref_r& a ) : m_left( a.m_left ), m_right( a.m_right ), m_delete( a.m_delete ), m_refs( a.m_refs ) { ++ m_refs; } // destructor virtual ~sc_concref_r(); // cloning sc_concref_r* clone() const { return new sc_concref_r( *this ); } // common methods int length() const { return ( m_left.length() + m_right.length() ); } int size() const { return ( (length() - 1) / SC_DIGIT_SIZE + 1 ); } value_type get_bit( int n ) const; void set_bit( int n, value_type value ); sc_digit get_word( int i ) const; void set_word( int i, sc_digit w ); sc_digit get_cword( int i ) const; void set_cword( int i, sc_digit w ); void clean_tail() { m_left.clean_tail(); m_right.clean_tail(); } // other methods bool is_01() const { return ( m_left.is_01() && m_right.is_01() ); } protected: X& m_left; Y& m_right; mutable int m_delete; int& m_refs; private: // disabled sc_concref_r(); sc_concref_r& operator = ( const sc_concref_r& ); }; // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_concref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_concref_r, sc_concref_r ); template inline sc_concref_r,T3> operator , ( sc_concref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_concref_r, const char* ); template inline sc_concref_r > operator , ( const char*, sc_concref_r ); template inline sc_concref_r,sc_lv_base> operator , ( sc_concref_r, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_concref_r ); template inline sc_concref_r,sc_bv_base> operator , ( sc_concref_r, bool ); template inline sc_concref_r > operator , ( bool, sc_concref_r ); template inline sc_concref_r,sc_bitref_r > concat( sc_concref_r, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_concref_r, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_concref_r, sc_concref_r ); template inline sc_concref_r,T3> concat( sc_concref_r, const sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_concref_r, const char* ); template inline sc_concref_r > concat( const char*, sc_concref_r ); template inline sc_concref_r,sc_lv_base> concat( sc_concref_r, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_concref_r ); template inline sc_concref_r,sc_bv_base> concat( sc_concref_r, bool ); template inline sc_concref_r > concat( bool, sc_concref_r ); #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > operator , ( sc_concref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > operator , ( sc_concref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > operator , ( sc_concref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > operator , ( sc_concref, sc_concref_r ); template inline sc_concref_r,T3> operator , ( sc_concref, const sc_proxy& ); template inline sc_concref_r,T3> operator , ( sc_concref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> operator , ( sc_concref, const char* ); template inline sc_concref_r > operator , ( const char*, sc_concref ); template inline sc_concref_r,sc_lv_base> operator , ( sc_concref, const sc_logic& ); template inline sc_concref_r > operator , ( const sc_logic&, sc_concref ); template inline sc_concref_r,sc_bv_base> operator , ( sc_concref, bool ); template inline sc_concref_r > operator , ( bool, sc_concref ); template inline sc_concref_r,sc_bitref_r > concat( sc_concref_r, sc_bitref ); template inline sc_concref_r,sc_bitref_r > concat( sc_concref, sc_bitref_r ); template inline sc_concref_r,sc_subref_r > concat( sc_concref_r, sc_subref ); template inline sc_concref_r,sc_subref_r > concat( sc_concref, sc_subref_r ); template inline sc_concref_r,sc_concref_r > concat( sc_concref_r, sc_concref ); template inline sc_concref_r,sc_concref_r > concat( sc_concref, sc_concref_r ); template inline sc_concref_r,T3> concat( sc_concref, const sc_proxy& ); template inline sc_concref_r,T3> concat( sc_concref_r, sc_proxy& ); template inline sc_concref_r,sc_lv_base> concat( sc_concref, const char* ); template inline sc_concref_r > concat( const char*, sc_concref ); template inline sc_concref_r,sc_lv_base> concat( sc_concref, const sc_logic& ); template inline sc_concref_r > concat( const sc_logic&, sc_concref ); template inline sc_concref_r,sc_bv_base> concat( sc_concref, bool ); template inline sc_concref_r > concat( bool, sc_concref ); #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concref // // Proxy class for sc_proxy concatenation (r-value and l-value). // ---------------------------------------------------------------------------- template class sc_concref : public sc_concref_r { public: // typedefs typedef sc_concref_r base_type; // constructor sc_concref( X& left_, Y& right_, int delete_ = 0 ) : sc_concref_r( left_, right_, delete_ ) {} // copy constructor sc_concref( const sc_concref& a ) : sc_concref_r( a ) {} // cloning sc_concref* clone() const { return new sc_concref( *this ); } // assignment operators template sc_concref& operator = ( const sc_proxy& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_concref& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const char* a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const bool* a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_logic* a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_unsigned& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_signed& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_uint_base& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( const sc_int_base& a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( unsigned long a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( long a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( unsigned int a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( int a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( uint64 a ) { base_type::assign_( a ); return *this; } sc_concref& operator = ( int64 a ) { base_type::assign_( a ); return *this; } // other methods void scan( ::std::istream& = ::std::cin ); private: // disabled sc_concref(); }; // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_concref, sc_bitref ); template inline sc_concref,sc_subref > operator , ( sc_concref, sc_subref ); template inline sc_concref,sc_concref > operator , ( sc_concref, sc_concref ); template inline sc_concref,T3> operator , ( sc_concref, sc_proxy& ); template inline sc_concref,sc_bitref > concat( sc_concref, sc_bitref ); template inline sc_concref,sc_subref > concat( sc_concref, sc_subref ); template inline sc_concref,sc_concref > concat( sc_concref, sc_concref ); template inline sc_concref,T3> concat( sc_concref, sc_proxy& ); template inline ::std::istream& operator >> ( ::std::istream&, sc_concref ); // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy // // Base class template for bit/logic vector classes. // (Barton/Nackmann implementation) // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r > operator , ( const sc_proxy&, sc_bitref_r ); template inline sc_concref_r > operator , ( const sc_proxy&, sc_subref_r ); template inline sc_concref_r > operator , ( const sc_proxy&, sc_concref_r ); template inline sc_concref_r operator , ( const sc_proxy&, const sc_proxy& ); template inline sc_concref_r operator , ( const sc_proxy&, const char* ); template inline sc_concref_r operator , ( const char*, const sc_proxy& ); template inline sc_concref_r operator , ( const sc_proxy&, const sc_logic& ); template inline sc_concref_r operator , ( const sc_logic&, const sc_proxy& ); template inline sc_concref_r operator , ( const sc_proxy&, bool ); template inline sc_concref_r operator , ( bool, const sc_proxy& ); template inline sc_concref_r > concat( const sc_proxy&, sc_bitref_r ); template inline sc_concref_r > concat( const sc_proxy&, sc_subref_r ); template inline sc_concref_r > concat( const sc_proxy&, sc_concref_r ); template inline sc_concref_r concat( const sc_proxy&, const sc_proxy& ); template inline sc_concref_r concat( const sc_proxy&, const char* ); template inline sc_concref_r concat( const char*, const sc_proxy& ); template inline sc_concref_r concat( const sc_proxy&, const sc_logic& ); template inline sc_concref_r concat( const sc_logic&, const sc_proxy& ); template inline sc_concref_r concat( const sc_proxy&, bool ); template inline sc_concref_r concat( bool, const sc_proxy& ); #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r > operator , ( const sc_proxy&, sc_bitref ); template inline sc_concref_r > operator , ( sc_proxy&, sc_bitref_r ); template inline sc_concref_r > operator , ( const sc_proxy&, sc_subref ); template inline sc_concref_r > operator , ( sc_proxy&, sc_subref_r ); template inline sc_concref_r > operator , ( const sc_proxy&, sc_concref ); template inline sc_concref_r > operator , ( sc_proxy&, sc_concref_r ); template inline sc_concref_r operator , ( const sc_proxy&, sc_proxy& ); template inline sc_concref_r operator , ( sc_proxy&, const sc_proxy& ); template inline sc_concref_r operator , ( sc_proxy&, const char* ); template inline sc_concref_r operator , ( const char*, sc_proxy& ); template inline sc_concref_r operator , ( sc_proxy&, const sc_logic& ); template inline sc_concref_r operator , ( const sc_logic&, sc_proxy& ); template inline sc_concref_r operator , ( sc_proxy&, bool ); template inline sc_concref_r operator , ( bool, sc_proxy& ); template inline sc_concref_r > concat( const sc_proxy&, sc_bitref ); template inline sc_concref_r > concat( sc_proxy&, sc_bitref_r ); template inline sc_concref_r > concat( const sc_proxy&, sc_subref ); template inline sc_concref_r > concat( sc_proxy&, sc_subref_r ); template inline sc_concref_r > concat( const sc_proxy&, sc_concref ); template inline sc_concref_r > concat( sc_proxy&, sc_concref_r ); template inline sc_concref_r concat( const sc_proxy&, sc_proxy& ); template inline sc_concref_r concat( sc_proxy&, const sc_proxy& ); template inline sc_concref_r concat( sc_proxy&, const char* ); template inline sc_concref_r concat( const char*, sc_proxy& ); template inline sc_concref_r concat( sc_proxy&, const sc_logic& ); template inline sc_concref_r concat( const sc_logic&, sc_proxy& ); template inline sc_concref_r concat( sc_proxy&, bool ); template inline sc_concref_r concat( bool, sc_proxy& ); #endif // l-value concatenation operators and functions template inline sc_concref > operator , ( sc_proxy&, sc_bitref ); template inline sc_concref > operator , ( sc_proxy&, sc_subref ); template inline sc_concref > operator , ( sc_proxy&, sc_concref ); template inline sc_concref operator , ( sc_proxy&, sc_proxy& ); template inline sc_concref > concat( sc_proxy&, sc_bitref ); template inline sc_concref > concat( sc_proxy&, sc_subref ); template inline sc_concref > concat( sc_proxy&, sc_concref ); template inline sc_concref concat( sc_proxy&, sc_proxy& ); // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref_r // // Proxy class for sc_proxy bit selection (r-value only). // ---------------------------------------------------------------------------- // bitwise operators and functions // bitwise and template inline sc_logic operator & ( const sc_bitref_r& a, const sc_bitref_r& b ) { return sc_logic( sc_logic::and_table[a.value()][b.value()] ); } // bitwise or template inline sc_logic operator | ( const sc_bitref_r& a, const sc_bitref_r& b ) { return sc_logic( sc_logic::or_table[a.value()][b.value()] ); } // bitwise xor template inline sc_logic operator ^ ( const sc_bitref_r& a, const sc_bitref_r& b ) { return sc_logic( sc_logic::xor_table[a.value()][b.value()] ); } // relational operators and functions template inline bool operator == ( const sc_bitref_r& a, const sc_bitref_r& b ) { return ( (int) a.value() == b.value() ); } template inline bool operator != ( const sc_bitref_r& a, const sc_bitref_r& b ) { return ( (int) a.value() != b.value() ); } // common methods template inline typename sc_bitref_r::value_type sc_bitref_r::get_bit( int n ) const { if( n == 0 ) { return m_obj.get_bit( m_index ); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_ , 0 ); return Log_0; } } template inline sc_digit sc_bitref_r::get_word( int n ) const { if( n == 0 ) { return ( get_bit( n ) & SC_DIGIT_ONE ); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); return 0; } } template inline sc_digit sc_bitref_r::get_cword( int n ) const { if( n == 0 ) { return ( (get_bit( n ) & SC_DIGIT_TWO) >> 1 ); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); return 0; } } // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> operator , ( sc_bitref_r a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_bitref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_bitref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_bitref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> concat( sc_bitref_r a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > operator , ( sc_bitref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_bitref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_bitref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> operator , ( sc_bitref a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T2> operator , ( sc_bitref_r a, sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_bitref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_bitref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_bitref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_bitref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_bitref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_bitref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> concat( sc_bitref a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T2> concat( sc_bitref_r a, sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_bitref // // Proxy class for sc_proxy bit selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators template inline sc_bitref& sc_bitref::operator = ( const sc_bitref_r& a ) { this->m_obj.set_bit( this->m_index, a.value() ); return *this; } template inline sc_bitref& sc_bitref::operator = ( const sc_bitref& a ) { if( &a != this ) { this->m_obj.set_bit( this->m_index, a.value() ); } return *this; } // bitwise assignment operators template inline sc_bitref& sc_bitref::operator &= ( const sc_bitref_r& a ) { if( &a != this ) { this->m_obj.set_bit( this->m_index, sc_logic::and_table[this->value()][a.value()] ); } return *this; } template inline sc_bitref& sc_bitref::operator &= ( const sc_logic& a ) { this->m_obj.set_bit( this->m_index, sc_logic::and_table[this->value()][a.value()] ); return *this; } template inline sc_bitref& sc_bitref::operator |= ( const sc_bitref_r& a ) { if( &a != this ) { this->m_obj.set_bit( this->m_index, sc_logic::or_table[this->value()][a.value()] ); } return *this; } template inline sc_bitref& sc_bitref::operator |= ( const sc_logic& a ) { this->m_obj.set_bit( this->m_index, sc_logic::or_table[this->value()][a.value()] ); return *this; } template inline sc_bitref& sc_bitref::operator ^= ( const sc_bitref_r& a ) { if( &a != this ) { this->m_obj.set_bit( this->m_index, sc_logic::xor_table[this->value()][a.value()] ); } return *this; } template inline sc_bitref& sc_bitref::operator ^= ( const sc_logic& a ) { this->m_obj.set_bit( this->m_index, sc_logic::xor_table[this->value()][a.value()] ); return *this; } // bitwise operators and functions // bitwise complement template inline sc_bitref& sc_bitref::b_not() { this->m_obj.set_bit( this->m_index, sc_logic::not_table[this->value()] ); return *this; } // common methods template inline void sc_bitref::set_bit( int n, value_type value ) { if( n == 0 ) { this->m_obj.set_bit( this->m_index, value ); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } } template inline void sc_bitref::set_word( int n, sc_digit w ) { unsigned int bi = this->m_index % (8*sizeof(sc_digit)); sc_digit temp; unsigned int wi = this->m_index / (8*sizeof(sc_digit)); if( n == 0 ) { temp = this->m_obj.get_word(wi); temp = (temp & ~(1 << bi)) | ((w&1) << bi); this->m_obj.set_word(wi, temp); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } } template inline void sc_bitref::set_cword( int n, sc_digit w ) { unsigned int bi = this->m_index % (8*sizeof(sc_digit)); sc_digit temp; unsigned int wi = this->m_index / (8*sizeof(sc_digit)); if( n == 0 ) { temp = this->m_obj.get_cword(wi); temp = (temp & ~(1 << bi)) | ((w&1) << bi); this->m_obj.set_cword(wi, temp); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } } // other methods template inline void sc_bitref::scan( ::std::istream& is ) { char c; is >> c; *this = c; } // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_bitref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > operator , ( sc_bitref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > operator , ( sc_bitref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T2> operator , ( sc_bitref a, sc_proxy& b ) { return sc_concref,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref,sc_bitref > concat( sc_bitref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > concat( sc_bitref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > concat( sc_bitref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T2> concat( sc_bitref a, sc_proxy& b ) { return sc_concref,T2>( *a.clone(), b.back_cast(), 1 ); } template inline ::std::istream& operator >> ( ::std::istream& is, sc_bitref a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref_r // // Proxy class for sc_proxy part selection (r-value only). // ---------------------------------------------------------------------------- template inline void sc_subref_r::check_bounds() { int len = m_obj.length(); if( m_hi < 0 || m_hi >= len || m_lo < 0 || m_lo >= len ) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); sc_core::sc_abort(); // can't recover from here } if( reversed() ) { m_len = m_lo - m_hi + 1; } else { m_len = m_hi - m_lo + 1; } } // common methods template inline typename sc_subref_r::value_type sc_subref_r::get_bit( int n ) const { if( reversed() ) { return m_obj.get_bit( m_lo - n ); } else { return m_obj.get_bit( m_lo + n ); } } template inline void sc_subref_r::set_bit( int n, value_type value ) { if( reversed() ) { m_obj.set_bit( m_lo - n, value ); } else { m_obj.set_bit( m_lo + n, value ); } } template inline sc_digit sc_subref_r::get_word( int i ) const { int n1 = 0; int n2 = 0; sc_digit result = 0; int k = 0; if( reversed() ) { n1 = m_lo - i * SC_DIGIT_SIZE; n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 ); for( int n = n1; n > n2; n -- ) { result |= (m_obj[n].value() & SC_DIGIT_ONE) << k ++; } } else { n1 = m_lo + i * SC_DIGIT_SIZE; n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 ); for( int n = n1; n < n2; n ++ ) { result |= (m_obj[n].value() & SC_DIGIT_ONE) << k ++; } } return result; } template inline void sc_subref_r::set_word( int i, sc_digit w ) { int n1 = 0; int n2 = 0; int k = 0; if( reversed() ) { n1 = m_lo - i * SC_DIGIT_SIZE; n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 ); for( int n = n1; n > n2; n -- ) { m_obj.set_bit( n, value_type( ( (w >> k ++) & SC_DIGIT_ONE ) | ( m_obj[n].value() & SC_DIGIT_TWO ) ) ); } } else { n1 = m_lo + i * SC_DIGIT_SIZE; n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 ); for( int n = n1; n < n2; n ++ ) { m_obj.set_bit( n, value_type( ( (w >> k ++) & SC_DIGIT_ONE ) | ( m_obj[n].value() & SC_DIGIT_TWO ) ) ); } } } template inline sc_digit sc_subref_r::get_cword( int i ) const { int n1 = 0; int n2 = 0; sc_digit result = 0; int k = 0; if( reversed() ) { n1 = m_lo - i * SC_DIGIT_SIZE; n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 ); for( int n = n1; n > n2; n -- ) { result |= ((m_obj[n].value() & SC_DIGIT_TWO) >> 1) << k ++; } } else { n1 = m_lo + i * SC_DIGIT_SIZE; n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 ); for( int n = n1; n < n2; n ++ ) { result |= ((m_obj[n].value() & SC_DIGIT_TWO) >> 1) << k ++; } } return result; } template inline void sc_subref_r::set_cword( int i, sc_digit w ) { int n1 = 0; int n2 = 0; int k = 0; if( reversed() ) { n1 = m_lo - i * SC_DIGIT_SIZE; n2 = sc_max( n1 - SC_DIGIT_SIZE, m_hi - 1 ); for( int n = n1; n > n2; n -- ) { m_obj.set_bit( n, value_type( ( ((w >> k ++) & SC_DIGIT_ONE) << 1 ) | ( m_obj[n].value() & SC_DIGIT_ONE ) ) ); } } else { n1 = m_lo + i * SC_DIGIT_SIZE; n2 = sc_min( n1 + SC_DIGIT_SIZE, m_hi + 1 ); for( int n = n1; n < n2; n ++ ) { m_obj.set_bit( n, value_type( ( ((w >> k ++) & SC_DIGIT_ONE) << 1 ) | ( m_obj[n].value() & SC_DIGIT_ONE ) ) ); } } } // other methods template inline bool sc_subref_r::is_01() const { int sz = size(); for( int i = 0; i < sz; ++ i ) { if( get_cword( i ) != SC_DIGIT_ZERO ) { return false; } } return true; } // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_subref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_subref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> operator , ( sc_subref_r a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_subref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_subref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_subref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> concat( sc_subref_r a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > operator , ( sc_subref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_subref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_subref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_subref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_subref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> operator , ( sc_subref a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T2> operator , ( sc_subref_r a, sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_subref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_subref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_subref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_subref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_subref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_subref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T2> concat( sc_subref a, const sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T2> concat( sc_subref_r a, sc_proxy& b ) { return sc_concref_r,T2>( *a.clone(), b.back_cast(), 1 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_subref // // Proxy class for sc_proxy part selection (r-value and l-value). // ---------------------------------------------------------------------------- // assignment operators // sc_subref::operator = ( const sc_subref_r& ) in sc_lv_base.h // sc_subref::operator = ( const sc_subref& ) in sc_lv_base.h // other methods template inline void sc_subref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_subref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > operator , ( sc_subref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > operator , ( sc_subref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T2> operator , ( sc_subref a, sc_proxy& b ) { return sc_concref,T2>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref,sc_bitref > concat( sc_subref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > concat( sc_subref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > concat( sc_subref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T2> concat( sc_subref a, sc_proxy& b ) { return sc_concref,T2>( *a.clone(), b.back_cast(), 1 ); } template inline ::std::istream& operator >> ( ::std::istream& is, sc_subref a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concref_r // // Proxy class for sc_proxy concatenation (r-value only). // ---------------------------------------------------------------------------- // destructor template inline sc_concref_r::~sc_concref_r() { if( -- m_refs == 0 ) { delete &m_refs; if( m_delete == 0 ) { return; } if( m_delete & 1 ) { delete &m_left; } if( m_delete & 2 ) { delete &m_right; } } } // common methods template inline typename sc_concref_r::value_type sc_concref_r::get_bit( int n ) const { int r_len = m_right.length(); if( n < r_len ) { return value_type(m_right.get_bit( n )); } else if( n < r_len + m_left.length() ) { return value_type(m_left.get_bit( n - r_len )); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); return Log_0; } } template inline void sc_concref_r::set_bit( int n, value_type v ) { int r_len = m_right.length(); if( n < r_len ) { m_right.set_bit( n, typename Y::value_type(v) ); } else if( n < r_len + m_left.length() ) { m_left.set_bit( n - r_len, typename X::value_type(v) ); } else { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } } template inline sc_digit sc_concref_r::get_word( int i ) const { if( i < 0 || i >= size() ) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } // 0 <= i < size() Y& r = m_right; int r_len = r.length(); int border = r_len / SC_DIGIT_SIZE; if( i < border ) { return r.get_word( i ); } // border <= i < size() X& l = m_left; int shift = r_len % SC_DIGIT_SIZE; int j = i - border; if( shift == 0 ) { return l.get_word( j ); } // border <= i < size() && shift != 0 int nshift = SC_DIGIT_SIZE - shift; if( i == border ) { sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift; return ( (r.get_word( i ) & rl_mask) | (l.get_word( 0 ) << shift) ); } // border < i < size() && shift != 0 if ( j < l.size() ) return ( (l.get_word( j - 1 ) >> nshift) | (l.get_word( j ) << shift) ); else return (l.get_word( j - 1 ) >> nshift); } template inline void sc_concref_r::set_word( int i, sc_digit w ) { if( i < 0 || i >= size() ) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } // 0 <= i < size() Y& r = m_right; int r_len = r.length(); int border = r_len / SC_DIGIT_SIZE; if( i < border ) { r.set_word( i, w ); return; } // border <= i < size() X& l = m_left; int shift = r_len % SC_DIGIT_SIZE; int j = i - border; if( shift == 0 ) { l.set_word( j, w ); return; } // border <= i < size() && shift != 0 int nshift = SC_DIGIT_SIZE - shift; sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift; if( i == border ) { sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift; r.set_word( i, w & rl_mask ); l.set_word( 0, (l.get_word( 0 ) & lh_mask) | (w >> shift) ); return; } // border < i < size() && shift != 0 sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift; l.set_word( j - 1, (l.get_word( j - 1 ) & ll_mask) | (w << nshift) ); if ( j < l.size() ) l.set_word( j, (l.get_word( j ) & lh_mask) | (w >> shift) ); } template inline sc_digit sc_concref_r::get_cword( int i ) const { if( i < 0 || i >= size() ) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } // 0 <= i < size() Y& r = m_right; int r_len = r.length(); int border = r_len / SC_DIGIT_SIZE; if( i < border ) { return r.get_cword( i ); } // border <= i < size() X& l = m_left; int shift = r_len % SC_DIGIT_SIZE; int j = i - border; if( shift == 0 ) { return l.get_cword( j ); } // border <= i < size() && shift != 0 int nshift = SC_DIGIT_SIZE - shift; if( i == border ) { sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift; return ( (r.get_cword( i ) & rl_mask) | (l.get_cword( 0 ) << shift) ); } // border < i < size() && shift != 0 if ( j < l.size() ) return ( (l.get_cword(j - 1) >> nshift) | (l.get_cword(j) << shift) ); else return (l.get_cword( j - 1 ) >> nshift); } template inline void sc_concref_r::set_cword( int i, sc_digit w ) { if( i < 0 || i >= size() ) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, 0 ); } // 0 <= i < size() Y& r = m_right; int r_len = r.length(); int border = r_len / SC_DIGIT_SIZE; if( i < border ) { r.set_cword( i, w ); return; } // border <= i < size() X& l = m_left; int shift = r_len % SC_DIGIT_SIZE; int j = i - border; if( shift == 0 ) { l.set_cword( j, w ); return; } // border <= i < size() && shift != 0 int nshift = SC_DIGIT_SIZE - shift; sc_digit lh_mask = ~SC_DIGIT_ZERO << nshift; if( i == border ) { sc_digit rl_mask = ~SC_DIGIT_ZERO >> nshift; r.set_cword( i, w & rl_mask ); l.set_cword( 0, (l.get_cword( 0 ) & lh_mask) | (w >> shift) ); return; } // border < i < size() && shift != 0 sc_digit ll_mask = ~SC_DIGIT_ZERO >> shift; l.set_cword( j - 1, (l.get_cword( j - 1 ) & ll_mask) | (w << nshift) ); if ( j < l.size() ) l.set_cword( j, (l.get_cword( j ) & lh_mask) | (w >> shift) ); } // r-value concatenation operators and functions template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_concref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_concref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T3> operator , ( sc_concref_r a, const sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_concref_r a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_concref_r a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_concref_r a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T3> concat( sc_concref_r a, const sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > operator , ( sc_concref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_concref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > operator , ( sc_concref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_concref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > operator , ( sc_concref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T3> operator , ( sc_concref a, const sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T3> operator , ( sc_concref_r a, sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_concref_r a, sc_bitref b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_bitref_r > concat( sc_concref a, sc_bitref_r b ) { return sc_concref_r,sc_bitref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_concref_r a, sc_subref b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_subref_r > concat( sc_concref a, sc_subref_r b ) { return sc_concref_r,sc_subref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_concref_r a, sc_concref b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,sc_concref_r > concat( sc_concref a, sc_concref_r b ) { return sc_concref_r,sc_concref_r >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref_r,T3> concat( sc_concref a, const sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref_r,T3> concat( sc_concref_r a, sc_proxy& b ) { return sc_concref_r,T3>( *a.clone(), b.back_cast(), 1 ); } #endif // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concref // // Proxy class for sc_proxy concatenation (r-value and l-value). // ---------------------------------------------------------------------------- // other methods template inline void sc_concref::scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } // l-value concatenation operators and functions template inline sc_concref,sc_bitref > operator , ( sc_concref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > operator , ( sc_concref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > operator , ( sc_concref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T3> operator , ( sc_concref a, sc_proxy& b ) { return sc_concref,T3>( *a.clone(), b.back_cast(), 1 ); } template inline sc_concref,sc_bitref > concat( sc_concref a, sc_bitref b ) { return sc_concref,sc_bitref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_subref > concat( sc_concref a, sc_subref b ) { return sc_concref,sc_subref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,sc_concref > concat( sc_concref a, sc_concref b ) { return sc_concref,sc_concref >( *a.clone(), *b.clone(), 3 ); } template inline sc_concref,T3> concat( sc_concref a, sc_proxy& b ) { return sc_concref,T3>( *a.clone(), b.back_cast(), 1 ); } template inline ::std::istream& operator >> ( ::std::istream& is, sc_concref a ) { a.scan( is ); return is; } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy // // Base class template for bit/logic vector classes. // (Barton/Nackmann implementation) // ---------------------------------------------------------------------------- // r-value concatenation operators and functions template inline sc_concref_r > operator , ( const sc_proxy& a, sc_bitref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( const sc_proxy& a, sc_subref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( const sc_proxy& a, sc_concref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r operator , ( const sc_proxy& a, const sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_bitref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_subref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_concref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r concat( const sc_proxy& a, const sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } #ifdef SC_DT_MIXED_COMMA_OPERATORS template inline sc_concref_r > operator , ( const sc_proxy& a, sc_bitref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( sc_proxy& a, sc_bitref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( const sc_proxy& a, sc_subref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( sc_proxy& a, sc_subref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( const sc_proxy& a, sc_concref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > operator , ( sc_proxy& a, sc_concref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r operator , ( const sc_proxy& a, sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } template inline sc_concref_r operator , ( sc_proxy& a, const sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_bitref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( sc_proxy& a, sc_bitref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_subref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( sc_proxy& a, sc_subref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( const sc_proxy& a, sc_concref b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r > concat( sc_proxy& a, sc_concref_r b ) { return sc_concref_r >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref_r concat( const sc_proxy& a, sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } template inline sc_concref_r concat( sc_proxy& a, const sc_proxy& b ) { return sc_concref_r( a.back_cast(), b.back_cast() ); } #endif // l-value concatenation operators and functions template inline sc_concref > operator , ( sc_proxy& a, sc_bitref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref > operator , ( sc_proxy& a, sc_subref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref > operator , ( sc_proxy& a, sc_concref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref operator , ( sc_proxy& a, sc_proxy& b ) { return sc_concref( a.back_cast(), b.back_cast() ); } template inline sc_concref > concat( sc_proxy& a, sc_bitref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref > concat( sc_proxy& a, sc_subref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref > concat( sc_proxy& a, sc_concref b ) { return sc_concref >( a.back_cast(), *b.clone(), 2 ); } template inline sc_concref concat( sc_proxy& a, sc_proxy& b ) { return sc_concref( a.back_cast(), b.back_cast() ); } } // namespace sc_dt #ifdef _MSC_VER #pragma warning(pop) #endif // $Log: sc_bit_proxies.h,v $ // Revision 1.10 2011/09/05 21:19:53 acg // Philipp A. Hartmann: added parentheses to expressions to eliminate // compiler warnings. // // Revision 1.9 2011/09/01 15:03:42 acg // Philipp A. Hartmann: add parentheses to eliminate compiler warnings. // // Revision 1.8 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.7 2011/08/24 22:05:40 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.6 2010/02/22 14:25:43 acg // Andy Goodrich: removed 'mutable' directive from references, since it // is not a legal C++ construct. // // Revision 1.5 2009/02/28 00:26:14 acg // Andy Goodrich: bug fixes. // // Revision 1.4 2007/03/14 17:48:37 acg // Andy Goodrich: fixed bug. // // Revision 1.3 2007/01/18 19:29:18 acg // Andy Goodrich: fixed bug in concatenations of bit selects on sc_lv and // sc_bv types. The offending code was in sc_bitref::set_word and // sc_bitref::get_word. These methods were not writing the bit they // represented, but rather writing an entire word whose index was the // index of the bit they represented. This not only did not write the // correct bit, but clobbered a word that might not even be in the // variable the reference was for. // // Revision 1.2 2007/01/17 22:45:08 acg // Andy Goodrich: fixed sc_bitref::set_bit(). // // Revision 1.1.1.1 2006/12/15 20:31:36 acg // SystemC 2.2 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #endif systemc-2.3.4/src/sysc/datatypes/bit/sc_proxy.h0000644000175000017500000012056514342422106021441 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_proxy.h -- Proxy base class for vector data types. This class is created for several purposes: 1) hiding operators from the global namespace that would be otherwise found by Koenig lookup 2) avoiding repeating the same operations in every class including proxies that could also be achieved by common base class, but this method allows 3) improve performance by using non-virtual functions Original Author: Gene Bushuyev, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_proxy.h,v $ // Revision 1.3 2010/12/07 20:09:07 acg // Andy Goodrich: Fix for returning enough data // // Revision 1.2 2009/02/28 00:26:14 acg // Andy Goodrich: bug fixes. // // Revision 1.1.1.1 2006/12/15 20:31:36 acg // SystemC 2.2 // // Revision 1.3 2006/01/13 18:53:53 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_PROXY_H #define SC_PROXY_H #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/bit/sc_bit.h" #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/kernel/sc_macros.h" namespace sc_dt { // classes defined in this module template class sc_proxy; // forward class declarations class sc_bv_base; class sc_lv_base; template class sc_bitref_r; template class sc_bitref; template class sc_subref_r; template class sc_subref; template class sc_concref_r; template class sc_concref; const int SC_DIGIT_SIZE = BITS_PER_BYTE * sizeof( sc_digit ); const sc_digit SC_DIGIT_ZERO = (sc_digit)0; const sc_digit SC_DIGIT_ONE = (sc_digit)1; const sc_digit SC_DIGIT_TWO = (sc_digit)2; SC_API void sc_proxy_out_of_bounds(const char* msg = NULL, int64 val = 0); // assignment functions; forward declarations template inline void assign_p_( sc_proxy& px, const sc_proxy& py ); // Vector types that are not derived from sc_proxy must have a length() // function and an operator []. template inline void assign_v_( sc_proxy& px, const T& a ); // other functions; forward declarations SC_API const std::string convert_to_bin( const char* s ); SC_API const std::string convert_to_fmt( const std::string& s, sc_numrep numrep, bool ); // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy_traits // // Template traits helper to select the correct bit/value/vector_types for // sc_proxy-based vector classes. // // All types derived from/based on a bit-vector contain typedef to a plain bool, // all others point to the sc_logic_value_t/sc_logic/sc_lv_base types. // ---------------------------------------------------------------------------- template struct sc_proxy_traits; template<> struct sc_proxy_traits { typedef sc_proxy_traits traits_type; typedef bool value_type; typedef sc_logic bit_type; // sc_logic needed for mixed expressions typedef sc_bv_base vector_type; }; template<> struct sc_proxy_traits { typedef sc_proxy_traits traits_type; typedef sc_logic_value_t value_type; typedef sc_logic bit_type; typedef sc_lv_base vector_type; }; template struct sc_proxy_traits > : sc_proxy_traits {}; template struct sc_proxy_traits > : sc_proxy_traits {}; template struct sc_proxy_traits > : sc_proxy_traits {}; template struct sc_proxy_traits > : sc_proxy_traits {}; template struct sc_proxy_traits > : sc_proxy_traits {}; template< typename X, typename Y > struct sc_mixed_proxy_traits_helper : sc_proxy_traits {}; // logic vector by default template struct sc_mixed_proxy_traits_helper : X {}; template struct sc_proxy_traits< sc_concref_r > : sc_mixed_proxy_traits_helper< typename X::traits_type , typename Y::traits_type > {}; template struct sc_proxy_traits > : sc_mixed_proxy_traits_helper< typename X::traits_type , typename Y::traits_type > {}; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_proxy // // Base class template for bit/logic vector classes. // (Barton/Nackmann implementation) // ---------------------------------------------------------------------------- template class sc_proxy // #### : public sc_value_base { public: typedef typename sc_proxy_traits::traits_type traits_type; typedef typename traits_type::bit_type bit_type; typedef typename traits_type::value_type value_type; // virtual destructor virtual ~sc_proxy() {} // casts X& back_cast() { return static_cast( *this ); } const X& back_cast() const { return static_cast( *this ); } // assignment operators template X& assign_( const sc_proxy& a ) { assign_p_( *this, a ); return back_cast(); } X& assign_( const char* a ); X& assign_( const bool* a ); X& assign_( const sc_logic* a ); X& assign_( const sc_unsigned& a ) { assign_v_( *this, a ); return back_cast(); } X& assign_( const sc_signed& a ) { assign_v_( *this, a ); return back_cast(); } X& assign_( const sc_uint_base& a ) { return assign_( (uint64) a ); } X& assign_( const sc_int_base& a ) { return assign_( (int64) a ); } X& assign_( unsigned int a ); X& assign_( int a ); X& assign_( unsigned long a ); X& assign_( long a ); X& assign_( uint64 a ); X& assign_( int64 a ); // bitwise operators and functions // bitwise complement X& b_not(); const sc_lv_base operator ~ () const; // bitwise and X& operator &= ( const char* b ); X& operator &= ( const bool* b ); X& operator &= ( const sc_logic* b ); X& operator &= ( const sc_unsigned& b ); X& operator &= ( const sc_signed& b ); X& operator &= ( const sc_uint_base& b ) { return operator &= ( (uint64) b ); } X& operator &= ( const sc_int_base& b ) { return operator &= ( (int64) b ); } X& operator &= ( unsigned long b ); X& operator &= ( long b ); X& operator &= ( unsigned int b ) { return operator &= ( (unsigned long) b ); } X& operator &= ( int b ) { return operator &= ( (long) b ); } X& operator &= ( uint64 b ); X& operator &= ( int64 b ); const sc_lv_base operator & ( const char* b ) const; const sc_lv_base operator & ( const bool* b ) const; const sc_lv_base operator & ( const sc_logic* b ) const; const sc_lv_base operator & ( const sc_unsigned& b ) const; const sc_lv_base operator & ( const sc_signed& b ) const; const sc_lv_base operator & ( const sc_uint_base& b ) const; const sc_lv_base operator & ( const sc_int_base& b ) const; const sc_lv_base operator & ( unsigned long b ) const; const sc_lv_base operator & ( long b ) const; const sc_lv_base operator & ( unsigned int b ) const; const sc_lv_base operator & ( int b ) const; const sc_lv_base operator & ( uint64 b ) const; const sc_lv_base operator & ( int64 b ) const; // bitwise or X& operator |= ( const char* b ); X& operator |= ( const bool* b ); X& operator |= ( const sc_logic* b ); X& operator |= ( const sc_unsigned& b ); X& operator |= ( const sc_signed& b ); X& operator |= ( const sc_uint_base& b ) { return operator |= ( (uint64) b ); } X& operator |= ( const sc_int_base& b ) { return operator |= ( (int64) b ); } X& operator |= ( unsigned long b ); X& operator |= ( long b ); X& operator |= ( unsigned int b ) { return operator |= ( (unsigned long) b ); } X& operator |= ( int b ) { return operator |= ( (long) b ); } X& operator |= ( uint64 b ); X& operator |= ( int64 b ); const sc_lv_base operator | ( const char* b ) const; const sc_lv_base operator | ( const bool* b ) const; const sc_lv_base operator | ( const sc_logic* b ) const; const sc_lv_base operator | ( const sc_unsigned& b ) const; const sc_lv_base operator | ( const sc_signed& b ) const; const sc_lv_base operator | ( const sc_uint_base& b ) const; const sc_lv_base operator | ( const sc_int_base& b ) const; const sc_lv_base operator | ( unsigned long b ) const; const sc_lv_base operator | ( long b ) const; const sc_lv_base operator | ( unsigned int b ) const; const sc_lv_base operator | ( int b ) const; const sc_lv_base operator | ( uint64 b ) const; const sc_lv_base operator | ( int64 b ) const; // bitwise xor X& operator ^= ( const char* b ); X& operator ^= ( const bool* b ); X& operator ^= ( const sc_logic* b ); X& operator ^= ( const sc_unsigned& b ); X& operator ^= ( const sc_signed& b ); X& operator ^= ( const sc_uint_base& b ) { return operator ^= ( (uint64) b ); } X& operator ^= ( const sc_int_base& b ) { return operator ^= ( (int64) b ); } X& operator ^= ( unsigned long b ); X& operator ^= ( long b ); X& operator ^= ( unsigned int b ) { return operator ^= ( (unsigned long) b ); } X& operator ^= ( int b ) { return operator ^= ( (long) b ); } X& operator ^= ( uint64 b ); X& operator ^= ( int64 b ); const sc_lv_base operator ^ ( const char* b ) const; const sc_lv_base operator ^ ( const bool* b ) const; const sc_lv_base operator ^ ( const sc_logic* b ) const; const sc_lv_base operator ^ ( const sc_unsigned& b ) const; const sc_lv_base operator ^ ( const sc_signed& b ) const; const sc_lv_base operator ^ ( const sc_uint_base& b ) const; const sc_lv_base operator ^ ( const sc_int_base& b ) const; const sc_lv_base operator ^ ( unsigned long b ) const; const sc_lv_base operator ^ ( long b ) const; const sc_lv_base operator ^ ( unsigned int b ) const; const sc_lv_base operator ^ ( int b ) const; const sc_lv_base operator ^ ( uint64 b ) const; const sc_lv_base operator ^ ( int64 b ) const; // bitwise left shift X& operator <<= ( int n ); const sc_lv_base operator << ( int n ) const; // bitwise right shift X& operator >>= ( int n ); const sc_lv_base operator >> ( int n ) const; // bitwise left rotate X& lrotate( int n ); // bitwise right rotate X& rrotate( int n ); // bitwise reverse X& reverse(); // bit selection sc_bitref operator [] ( int i ) { return sc_bitref( back_cast(), i ); } sc_bitref_r operator [] ( int i ) const { return sc_bitref_r( back_cast(), i ); } sc_bitref bit( int i ) { return sc_bitref( back_cast(), i ); } sc_bitref_r bit( int i ) const { return sc_bitref_r( back_cast(), i ); } // part selection sc_subref operator () ( int hi, int lo ) { return sc_subref( back_cast(), hi, lo ); } sc_subref_r operator () ( int hi, int lo ) const { return sc_subref_r( back_cast(), hi, lo ); } sc_subref range( int hi, int lo ) { return sc_subref( back_cast(), hi, lo ); } sc_subref_r range( int hi, int lo ) const { return sc_subref_r( back_cast(), hi, lo ); } // reduce functions value_type and_reduce() const; value_type nand_reduce() const { return sc_logic::not_table[and_reduce()]; } value_type or_reduce() const; value_type nor_reduce() const { return sc_logic::not_table[or_reduce()]; } value_type xor_reduce() const; value_type xnor_reduce() const { return sc_logic::not_table[xor_reduce()]; } // relational operators bool operator == ( const char* b ) const; bool operator == ( const bool* b ) const; bool operator == ( const sc_logic* b ) const; bool operator == ( const sc_unsigned& b ) const; bool operator == ( const sc_signed& b ) const; bool operator == ( const sc_uint_base& b ) const; bool operator == ( const sc_int_base& b ) const; bool operator == ( unsigned long b ) const; bool operator == ( long b ) const; bool operator == ( unsigned int b ) const; bool operator == ( int b ) const; bool operator == ( uint64 b ) const; bool operator == ( int64 b ) const; // explicit conversions to character string const std::string to_string() const; const std::string to_string( sc_numrep ) const; const std::string to_string( sc_numrep, bool ) const; // explicit conversions inline int64 to_int64() const { return to_anything_signed(); } inline uint64 to_uint64() const; int to_int() const { return (int)to_anything_signed(); } unsigned int to_uint() const { return (unsigned int)to_anything_unsigned(); } long to_long() const { return (long)to_anything_signed(); } unsigned long to_ulong() const { return (unsigned long)to_anything_unsigned(); } #ifdef SC_DT_DEPRECATED int to_signed() const { return to_int(); } sc_digit to_unsigned() const { return to_uint(); } #endif // other methods void print( ::std::ostream& os = ::std::cout ) const { // the test below will force printing in binary if decimal is // specified. if ( sc_io_base(os, SC_DEC) == SC_DEC ) os << to_string(); else os << to_string(sc_io_base(os,SC_BIN),sc_io_show_base(os)); } void scan( ::std::istream& is = ::std::cin ); protected: void check_bounds( int n ) const; // check if bit n accessible void check_wbounds( int n ) const; // check if word n accessible sc_digit to_anything_unsigned() const; int64 to_anything_signed() const; }; // ---------------------------------------------------------------------------- // bitwise operators and functions // bitwise and template inline X& operator &= ( sc_proxy& px, const sc_proxy& py ); template inline const sc_lv_base operator & ( const sc_proxy& px, const sc_proxy& py ); #define DECL_BITWISE_AND_OP_T(tp) \ template \ inline \ const sc_lv_base \ operator & ( tp b, const sc_proxy& px ); DECL_BITWISE_AND_OP_T(const char*) DECL_BITWISE_AND_OP_T(const bool*) DECL_BITWISE_AND_OP_T(const sc_logic*) DECL_BITWISE_AND_OP_T(const sc_unsigned&) DECL_BITWISE_AND_OP_T(const sc_signed&) DECL_BITWISE_AND_OP_T(const sc_uint_base&) DECL_BITWISE_AND_OP_T(const sc_int_base&) DECL_BITWISE_AND_OP_T(unsigned long) DECL_BITWISE_AND_OP_T(long) DECL_BITWISE_AND_OP_T(unsigned int) DECL_BITWISE_AND_OP_T(int) DECL_BITWISE_AND_OP_T(uint64) DECL_BITWISE_AND_OP_T(int64) #undef DECL_BITWISE_AND_OP_T // bitwise or template inline X& operator |= ( sc_proxy& px, const sc_proxy& py ); template inline const sc_lv_base operator | ( const sc_proxy& px, const sc_proxy& py ); #define DECL_BITWISE_OR_OP_T(tp) \ template \ inline \ const sc_lv_base \ operator | ( tp a, const sc_proxy& px ); DECL_BITWISE_OR_OP_T(const char*) DECL_BITWISE_OR_OP_T(const bool*) DECL_BITWISE_OR_OP_T(const sc_logic*) DECL_BITWISE_OR_OP_T(const sc_unsigned&) DECL_BITWISE_OR_OP_T(const sc_signed&) DECL_BITWISE_OR_OP_T(const sc_uint_base&) DECL_BITWISE_OR_OP_T(const sc_int_base&) DECL_BITWISE_OR_OP_T(unsigned long) DECL_BITWISE_OR_OP_T(long) DECL_BITWISE_OR_OP_T(unsigned int) DECL_BITWISE_OR_OP_T(int) DECL_BITWISE_OR_OP_T(uint64) DECL_BITWISE_OR_OP_T(int64) #undef DECL_BITWISE_OR_OP_T // bitwise xor template inline X& operator ^= ( sc_proxy& px, const sc_proxy& py ); template inline const sc_lv_base operator ^ ( const sc_proxy& px, const sc_proxy& py ); #define DECL_BITWISE_XOR_OP_T(tp) \ template \ inline \ const sc_lv_base \ operator ^ ( tp a, const sc_proxy& px ); DECL_BITWISE_XOR_OP_T(const char*) DECL_BITWISE_XOR_OP_T(const bool*) DECL_BITWISE_XOR_OP_T(const sc_logic*) DECL_BITWISE_XOR_OP_T(const sc_unsigned&) DECL_BITWISE_XOR_OP_T(const sc_signed&) DECL_BITWISE_XOR_OP_T(const sc_uint_base&) DECL_BITWISE_XOR_OP_T(const sc_int_base&) DECL_BITWISE_XOR_OP_T(unsigned long) DECL_BITWISE_XOR_OP_T(long) DECL_BITWISE_XOR_OP_T(unsigned int) DECL_BITWISE_XOR_OP_T(int) DECL_BITWISE_XOR_OP_T(uint64) DECL_BITWISE_XOR_OP_T(int64) #undef DECL_BITWISE_XOR_OP_T // relational operators template inline bool operator == ( const sc_proxy& px, const sc_proxy& py ); template inline bool operator != ( const sc_proxy& px, const sc_proxy& py ); #define DECL_REL_OP_T(tp) \ template \ inline \ bool \ operator == ( tp b, const sc_proxy& px ); \ \ template \ inline \ bool \ operator != ( const sc_proxy& px, tp b ); \ \ template \ inline \ bool \ operator != ( tp b, const sc_proxy& px ); DECL_REL_OP_T(const char*) DECL_REL_OP_T(const bool*) DECL_REL_OP_T(const sc_logic*) DECL_REL_OP_T(const sc_unsigned&) DECL_REL_OP_T(const sc_signed&) DECL_REL_OP_T(const sc_uint_base&) DECL_REL_OP_T(const sc_int_base&) DECL_REL_OP_T(unsigned long) DECL_REL_OP_T(long) DECL_REL_OP_T(unsigned int) DECL_REL_OP_T(int) DECL_REL_OP_T(uint64) DECL_REL_OP_T(int64) #undef DECL_REL_OP_T // l-value concatenation // Due to the fact that temporary objects cannot be passed to non-const // references, we have to enumerate, use call by value, and use dynamic // memory allocation (and deallocation). // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII template inline void get_words_( const X& x, int wi, sc_digit& x_dw, sc_digit& x_cw ) { x_dw = x.get_word( wi ); x_cw = x.get_cword( wi ); } template inline void set_words_( X& x, int wi, sc_digit x_dw, sc_digit x_cw ) { x.set_word( wi, x_dw ); x.set_cword( wi, x_cw ); } template inline void extend_sign_w_( X& x, int wi, bool sign ) { int sz = x.size(); unsigned int sgn = (sign ? ~SC_DIGIT_ZERO : SC_DIGIT_ZERO); for( int i = wi; i < sz; ++ i ) { set_words_( x, i, sgn, SC_DIGIT_ZERO ); } } // assignment functions template inline void assign_p_( sc_proxy& px, const sc_proxy& py ) { if( (void*) &px != (void*) &py ) { X& x = px.back_cast(); const Y& y = py.back_cast(); int sz = x.size(); int min_sz = sc_min( sz, y.size() ); int i = 0; for( ; i < min_sz; ++ i ) { set_words_( x, i, y.get_word( i ), y.get_cword( i ) ); } // extend with zeros extend_sign_w_( x, i, false ); x.clean_tail(); } } // Vector types that are not derived from sc_proxy, sc_int_base, // sc_uint_base, sc_signed, or sc_unsigned, must have a length() // function and an operator []. The vector argument type must support // accessing bits that are beyond the msb. The vector argument type // decides what to do there (e.g. sign extension or zero padding). template inline void assign_v_( sc_proxy& px, const T& a ) { X& x = px.back_cast(); int i; int len_x = x.length(); int len_a = a.length(); if ( len_a > len_x ) len_a = len_x; for( i = 0 ; i < len_a; ++ i ) { x.set_bit( i, sc_logic_value_t( (bool) a[i] ) ); } for( ; i < len_x; ++ i ) { x.set_bit( i, sc_logic_value_t( false ) ); } } template inline void assign_v_( sc_proxy& px, const sc_int_base& a ) { X& x = px.back_cast(); int i; bool sign = a < 0; int len_x = x.length(); int len_a = a.length(); if ( len_a > len_x ) len_a = len_x; for( i = 0 ; i < len_a; ++ i ) { x.set_bit( i, sc_logic_value_t( (bool) a[i] ) ); } for( ; i < len_x; ++ i ) { x.set_bit( i, sc_logic_value_t( sign ) ); } } template inline void assign_v_( sc_proxy& px, const sc_signed& a ) { X& x = px.back_cast(); int i; bool sign = a < 0; int len_x = x.length(); int len_a = a.length(); if ( len_a > len_x ) len_a = len_x; for( i = 0 ; i < len_a; ++ i ) { x.set_bit( i, sc_logic_value_t( (bool) a[i] ) ); } for( ; i < len_x; ++ i ) { x.set_bit( i, sc_logic_value_t( sign ) ); } } template inline void assign_v_( sc_proxy& px, const sc_uint_base& a ) { X& x = px.back_cast(); int i; int len_x = x.length(); int len_a = a.length(); if ( len_a > len_x ) len_a = len_x; for( i = 0 ; i < len_a; ++ i ) { x.set_bit( i, sc_logic_value_t( (bool) a[i] ) ); } for( ; i < len_x; ++ i ) { x.set_bit( i, sc_logic_value_t( false ) ); } } template inline void assign_v_( sc_proxy& px, const sc_unsigned& a ) { X& x = px.back_cast(); int i; int len_x = x.length(); int len_a = a.length(); if ( len_a > len_x ) len_a = len_x; for( i = 0 ; i < len_a; ++ i ) { x.set_bit( i, sc_logic_value_t( (bool) a[i] ) ); } for( ; i < len_x; ++ i ) { x.set_bit( i, sc_logic_value_t( false ) ); } } // assignment operators template inline X& sc_proxy::assign_( const char* a ) { X& x = back_cast(); std::string s = convert_to_bin( a ); int len = x.length(); int s_len = s.length() - 1; int min_len = sc_min( len, s_len ); int i = 0; for( ; i < min_len; ++ i ) { char c = s[s_len - i - 1]; x.set_bit( i, sc_logic::char_to_logic[(int)c] ); } // if formatted, fill the rest with sign(s), otherwise fill with zeros sc_logic_value_t fill = (s[s_len] == 'F' ? sc_logic_value_t( s[0] - '0' ) : sc_logic_value_t( 0 )); for( ; i < len; ++ i ) { x.set_bit( i, fill ); } return x; } template inline X& sc_proxy::assign_( const bool* a ) { // the length of 'a' must be larger than or equal to the length of 'this' X& x = back_cast(); int len = x.length(); for( int i = 0; i < len; ++ i ) { x.set_bit( i, sc_logic_value_t( a[i] ) ); } return x; } template inline X& sc_proxy::assign_( const sc_logic* a ) { // the length of 'a' must be larger than or equal to the length of 'this' X& x = back_cast(); int len = x.length(); for( int i = 0; i < len; ++ i ) { x.set_bit( i, a[i].value() ); } return x; } template inline X& sc_proxy::assign_( unsigned int a ) { X& x = back_cast(); set_words_( x, 0, (sc_digit)a, SC_DIGIT_ZERO ); // extend with zeros extend_sign_w_( x, 1, false ); x.clean_tail(); return x; } template inline X& sc_proxy::assign_( int a ) { X& x = back_cast(); set_words_( x, 0, (sc_digit) a, SC_DIGIT_ZERO ); // extend with sign(a) extend_sign_w_( x, 1, (a < 0) ); x.clean_tail(); return x; } #if defined(SC_LONG_64) template inline X& sc_proxy::assign_( unsigned long a ) { X& x = back_cast(); set_words_( x, 0, ((sc_digit) a & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); if( x.size() > 1 ) { set_words_( x, 1, ((sc_digit) (a >> SC_DIGIT_SIZE) & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); // extend with zeros extend_sign_w_( x, 2, false ); } x.clean_tail(); return x; } template inline X& sc_proxy::assign_( long a ) { X& x = back_cast(); set_words_( x, 0, ((sc_digit) a & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); if( x.size() > 1 ) { set_words_( x, 1, ((sc_digit) ((uint64) a >> SC_DIGIT_SIZE) & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); // extend with sign(a) extend_sign_w_( x, 2, (a < 0) ); } x.clean_tail(); return x; } #else template inline X& sc_proxy::assign_( unsigned long a ) { X& x = back_cast(); set_words_( x, 0, (sc_digit)a, SC_DIGIT_ZERO ); // extend with zeros extend_sign_w_( x, 1, false ); x.clean_tail(); return x; } template inline X& sc_proxy::assign_( long a ) { X& x = back_cast(); set_words_( x, 0, (sc_digit) a, SC_DIGIT_ZERO ); // extend with sign(a) extend_sign_w_( x, 1, (a < 0) ); x.clean_tail(); return x; } #endif template inline X& sc_proxy::assign_( uint64 a ) { X& x = back_cast(); set_words_( x, 0, ((sc_digit) a & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); if( x.size() > 1 ) { set_words_( x, 1, ((sc_digit) (a >> SC_DIGIT_SIZE) & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); // extend with zeros extend_sign_w_( x, 2, false ); } x.clean_tail(); return x; } template inline X& sc_proxy::assign_( int64 a ) { X& x = back_cast(); set_words_( x, 0, ((sc_digit) a & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); if( x.size() > 1 ) { set_words_( x, 1, ((sc_digit) ((uint64) a >> SC_DIGIT_SIZE) & ~SC_DIGIT_ZERO), SC_DIGIT_ZERO ); // extend with sign(a) extend_sign_w_( x, 2, (a < 0) ); } x.clean_tail(); return x; } // bitwise operators and functions // bitwise complement template inline X& sc_proxy::b_not() { X& x = back_cast(); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { sc_digit x_dw, x_cw; get_words_( x, i, x_dw, x_cw ); x.set_word( i, x_cw | ~x_dw ); } x.clean_tail(); return x; } // bitwise and template inline X& b_and_assign_( sc_proxy& px, const sc_proxy& py ) { X& x = px.back_cast(); const Y& y = py.back_cast(); sc_assert( x.length() == y.length() ); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { sc_digit x_dw, x_cw, y_dw, y_cw; get_words_( x, i, x_dw, x_cw ); get_words_( y, i, y_dw, y_cw ); sc_digit cw = (x_dw & y_cw) | (x_cw & y_dw) | (x_cw & y_cw); sc_digit dw = cw | (x_dw & y_dw); set_words_( x, i, dw, cw ); } // tail cleaning not needed return x; } // bitwise or template inline X& b_or_assign_( sc_proxy& px, const sc_proxy& py ) { X& x = px.back_cast(); const Y& y = py.back_cast(); sc_assert( x.length() == y.length() ); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { sc_digit x_dw, x_cw, y_dw, y_cw; get_words_( x, i, x_dw, x_cw ); get_words_( y, i, y_dw, y_cw ); sc_digit cw = (x_cw & y_cw) | (x_cw & ~y_dw) | (~x_dw & y_cw); sc_digit dw = cw | x_dw | y_dw; set_words_( x, i, dw, cw ); } // tail cleaning not needed return x; } // bitwise xor template inline X& b_xor_assign_( sc_proxy& a, const sc_proxy& b ) { X& x = a.back_cast(); const Y& y = b.back_cast(); sc_assert( x.length() == y.length() ); int sz = x.size(); for( int i = 0; i < sz; ++ i ) { sc_digit x_dw, x_cw, y_dw, y_cw; get_words_( x, i, x_dw, x_cw ); get_words_( y, i, y_dw, y_cw ); sc_digit cw = x_cw | y_cw; sc_digit dw = cw | (x_dw ^ y_dw); set_words_( x, i, dw, cw ); } // tail cleaning not needed return x; } // bitwise left shift template inline X& sc_proxy::operator <<= ( int n ) { X& x = back_cast(); if( n < 0 ) { sc_proxy_out_of_bounds( "left shift operation is only allowed with " "positive shift values, shift value = ", n ); return x; } if( n >= x.length() ) { extend_sign_w_( x, 0, false ); // no tail cleaning needed return x; } int sz = x.size(); int wn = n / SC_DIGIT_SIZE; int bn = n % SC_DIGIT_SIZE; if( wn != 0 ) { // shift words int i = sz - 1; for( ; i >= wn; -- i ) { set_words_( x, i, x.get_word( i - wn ), x.get_cword( i - wn ) ); } for( ; i >= 0; -- i ) { set_words_( x, i, SC_DIGIT_ZERO, SC_DIGIT_ZERO ); } } if( bn != 0 ) { // shift bits for( int i = sz - 1; i >= 1; -- i ) { sc_digit x_dw, x_cw; get_words_( x, i, x_dw, x_cw ); x_dw <<= bn; x_dw |= x.get_word( i - 1 ) >> (SC_DIGIT_SIZE - bn); x_cw <<= bn; x_cw |= x.get_cword( i - 1 ) >> (SC_DIGIT_SIZE - bn); set_words_( x, i, x_dw, x_cw ); } sc_digit x_dw, x_cw; get_words_( x, 0, x_dw, x_cw ); x_dw <<= bn; x_cw <<= bn; set_words_( x, 0, x_dw, x_cw ); } x.clean_tail(); return x; } // bitwise right shift template inline X& sc_proxy::operator >>= ( int n ) { X& x = back_cast(); if( n < 0 ) { sc_proxy_out_of_bounds( "right shift operation is only allowed with " "positive shift values, shift value = ", n ); return x; } if( n >= x.length() ) { extend_sign_w_( x, 0, false ); // no tail cleaning needed return x; } int sz = x.size(); int wn = n / SC_DIGIT_SIZE; int bn = n % SC_DIGIT_SIZE; if( wn != 0 ) { // shift words int i = 0; for( ; i < (sz - wn); ++ i ) { set_words_( x, i, x.get_word( i + wn ), x.get_cword( i + wn ) ); } for( ; i < sz; ++ i ) { set_words_( x, i, SC_DIGIT_ZERO, SC_DIGIT_ZERO ); } } if( bn != 0 ) { // shift bits for( int i = 0; i < (sz - 1); ++ i ) { sc_digit x_dw, x_cw; get_words_( x, i, x_dw, x_cw ); x_dw >>= bn; x_dw |= x.get_word( i + 1 ) << (SC_DIGIT_SIZE - bn); x_cw >>= bn; x_cw |= x.get_cword( i + 1 ) << (SC_DIGIT_SIZE - bn); set_words_( x, i, x_dw, x_cw ); } sc_digit x_dw, x_cw; get_words_( x, sz - 1, x_dw, x_cw ); x_dw >>= bn; x_cw >>= bn; set_words_( x, sz - 1, x_dw, x_cw ); } x.clean_tail(); return x; } // bitwise left rotate template inline const sc_lv_base lrotate( const sc_proxy& x, int n ); // bitwise right rotate template inline const sc_lv_base rrotate( const sc_proxy& x, int n ); // bitwise reverse template inline X& sc_proxy::reverse() { X& x = back_cast(); int len = x.length(); int half_len = len / 2; for( int i = 0, j = len - 1; i < half_len; ++ i, --j ) { value_type t = x.get_bit( i ); x.set_bit( i, x.get_bit( j ) ); x.set_bit( j, t ); } return x; } template inline const sc_lv_base reverse( const sc_proxy& a ); // reduce functions template inline typename sc_proxy::value_type sc_proxy::and_reduce() const { const X& x = back_cast(); value_type result = value_type( 1 ); int len = x.length(); for( int i = 0; i < len; ++ i ) { result = sc_logic::and_table[result][x.get_bit( i )]; } return result; } template inline typename sc_proxy::value_type sc_proxy::or_reduce() const { const X& x = back_cast(); value_type result = value_type( 0 ); int len = x.length(); for( int i = 0; i < len; ++ i ) { result = sc_logic::or_table[result][x.get_bit( i )]; } return result; } template inline typename sc_proxy::value_type sc_proxy::xor_reduce() const { const X& x = back_cast(); value_type result = value_type( 0 ); int len = x.length(); for( int i = 0; i < len; ++ i ) { result = sc_logic::xor_table[result][x.get_bit( i )]; } return result; } // relational operators template inline bool operator != ( const sc_proxy& px, const sc_proxy& py ) { return !( px == py ); } #define DEFN_REL_OP_T(tp) \ template \ inline \ bool \ operator == ( tp b, const sc_proxy& px ) \ { \ return ( px == b ); \ } \ \ template \ inline \ bool \ operator != ( const sc_proxy& px, tp b ) \ { \ return !( px == b ); \ } \ \ template \ inline \ bool \ operator != ( tp b, const sc_proxy& px ) \ { \ return !( px == b ); \ } DEFN_REL_OP_T(const char*) DEFN_REL_OP_T(const bool*) DEFN_REL_OP_T(const sc_logic*) DEFN_REL_OP_T(const sc_unsigned&) DEFN_REL_OP_T(const sc_signed&) DEFN_REL_OP_T(const sc_uint_base&) DEFN_REL_OP_T(const sc_int_base&) DEFN_REL_OP_T(unsigned long) DEFN_REL_OP_T(long) DEFN_REL_OP_T(unsigned int) DEFN_REL_OP_T(int) DEFN_REL_OP_T(uint64) DEFN_REL_OP_T(int64) #undef DEFN_REL_OP_T // explicit conversions to character string template inline const std::string sc_proxy::to_string() const { const X& x = back_cast(); int len = x.length(); std::string s; // ( len + 1 ); for( int i = 0; i < len; ++ i ) { s += sc_logic::logic_to_char[x.get_bit( len - i - 1 )]; } return s; } template inline const std::string sc_proxy::to_string( sc_numrep numrep ) const { return convert_to_fmt( to_string(), numrep, true ); } template inline const std::string sc_proxy::to_string( sc_numrep numrep, bool w_prefix ) const { return convert_to_fmt( to_string(), numrep, w_prefix ); } // other methods template inline void sc_proxy::scan( ::std::istream& is ) { std::string s; is >> s; back_cast() = s.c_str(); } template inline void sc_proxy::check_bounds( int n ) const // check if bit n accessible { if( n < 0 || n >= back_cast().length() ) { sc_proxy_out_of_bounds(NULL, n); sc_core::sc_abort(); // can't recover from here } } template inline void sc_proxy::check_wbounds( int n ) const // check if word n accessible { if( n < 0 || n >= back_cast().size() ) { sc_proxy_out_of_bounds(NULL, n); sc_core::sc_abort(); // can't recover from here } } template inline sc_digit sc_proxy::to_anything_unsigned() const { // only 0 word is returned // can't convert logic values other than 0 and 1 const X& x = back_cast(); int len = x.length(); if( x.get_cword( 0 ) != SC_DIGIT_ZERO ) { SC_REPORT_WARNING( sc_core::SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 0 ); } sc_digit w = x.get_word( 0 ); if( len >= SC_DIGIT_SIZE ) { return w; } return ( w & (~SC_DIGIT_ZERO >> (SC_DIGIT_SIZE - len)) ); } template inline uint64 sc_proxy::to_uint64() const { // words 1 and 0 returned. // can't convert logic values other than 0 and 1 const X& x = back_cast(); int len = x.length(); if( x.get_cword( 0 ) != SC_DIGIT_ZERO ) { SC_REPORT_WARNING( sc_core::SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 0 ); } uint64 w = x.get_word( 0 ); if( len > SC_DIGIT_SIZE ) { if( x.get_cword( 1 ) != SC_DIGIT_ZERO ) { SC_REPORT_WARNING( sc_core::SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 0 ); } uint64 w1 = x.get_word( 1 ); w = w | (w1 << SC_DIGIT_SIZE); return w; } else if( len == SC_DIGIT_SIZE ) { return w; } else { return ( w & (~SC_DIGIT_ZERO >> (SC_DIGIT_SIZE - len)) ); } } template inline int64 sc_proxy::to_anything_signed() const { const X& x = back_cast(); int len = x.length(); int64 w = 0; if( len > SC_DIGIT_SIZE ) { if( x.get_cword( 1 ) != SC_DIGIT_ZERO ) SC_REPORT_WARNING( sc_core::SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 0 ); w = x.get_word(1); } if( x.get_cword( 0 ) != SC_DIGIT_ZERO ) SC_REPORT_WARNING( sc_core::SC_ID_VECTOR_CONTAINS_LOGIC_VALUE_, 0 ); w = (w << SC_DIGIT_SIZE) | x.get_word( 0 ); if( len >= 64 ) { return w; } uint64 zero = 0; value_type sgn = x.get_bit( len - 1 ); if( sgn == 0 ) { return (int64)( w & (~zero >> (64 - len)) ); } else { return (int64)( w | (~zero << len) ); } } // ---------------------------------------------------------------------------- // functional notation for the reduce methods template inline typename sc_proxy::value_type and_reduce( const sc_proxy& a ) { return a.and_reduce(); } template inline typename sc_proxy::value_type nand_reduce( const sc_proxy& a ) { return a.nand_reduce(); } template inline typename sc_proxy::value_type or_reduce( const sc_proxy& a ) { return a.or_reduce(); } template inline typename sc_proxy::value_type nor_reduce( const sc_proxy& a ) { return a.nor_reduce(); } template inline typename sc_proxy::value_type xor_reduce( const sc_proxy& a ) { return a.xor_reduce(); } template inline typename sc_proxy::value_type xnor_reduce( const sc_proxy& a ) { return a.xnor_reduce(); } // ---------------------------------------------------------------------------- template inline ::std::ostream& operator << ( ::std::ostream& os, const sc_proxy& a ) { a.print( os ); return os; } template inline ::std::istream& operator >> ( ::std::istream& is, sc_proxy& a ) { a.scan( is ); return is; } } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/misc/0000755000175000017500000000000014342422106017566 5ustar carstencarstensystemc-2.3.4/src/sysc/datatypes/misc/sc_value_base.h0000644000175000017500000001056614342422106022542 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_value_base.h -- Base class for SystemC bit values. Original Author: Andy Goodrich, Forte Design Systems *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_value_base.h,v $ // Revision 1.4 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.3 2011/08/24 22:05:48 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/06/28 21:23:04 acg // Andy Goodrich: merging of SCV tree. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:54:01 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_VALUE_BASE_H #define SC_VALUE_BASE_H #include "sysc/datatypes/int/sc_nbdefs.h" namespace sc_dt { class sc_signed; class sc_unsigned; // ---------------------------------------------------------------------------- // CLASS : sc_value_base // // Abstract base class of all SystemC native variables. It provides // support for concatenation operations via a set of virtual methods. // A general description of the methods appear with their default // definitions in sc_object.cpp. // ---------------------------------------------------------------------------- class SC_API sc_value_base { friend class sc_concatref; private: virtual void concat_clear_data( bool to_ones=false ); virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const; virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const; virtual uint64 concat_get_uint64() const; virtual int concat_length(bool* xz_present_p=0) const; virtual void concat_set( int64 src, int low_i ); virtual void concat_set( const sc_signed& src, int low_i ); virtual void concat_set( const sc_unsigned& src, int low_i ); virtual void concat_set( uint64 src, int low_i ); public: virtual ~sc_value_base() {} }; // ---------------------------------------------------------------------------- // CLASS : sc_generic_base // // Proxy class for user-defined value classes and other classes that // are defined outside of SystemC. // The class is utilized as a base class for the arbitrary class: // // class my_class : public sc_generic_base // // The purpose of the class is to allow to_XXXX methods defined within that // class so that assignments and casts from the arbitrary class to native // SystemC types are possible. To interact correctly with the SystemC library // the class derived from sc_generic_base must implement the following // methods: // (1) uint64 to_uint64() const // (2) int64 to_int64() const // (3) void to_sc_unsigned( sc_unsigned& ) const // (4) void to_sc_signed( sc_signed& ) const // ---------------------------------------------------------------------------- template< class T > class sc_generic_base { public: inline const T* operator-> () const { return (const T*)this; } inline T* operator-> () { return (T*)this; } }; } // namespace sc_dt #endif systemc-2.3.4/src/sysc/datatypes/misc/sc_concatref.cpp0000644000175000017500000000435714342422106022734 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_concatref.cpp -- Concatenation support. Original Author: Andy Goodrich, Forte Design Systems, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_concatref.cpp,v $ // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:54:01 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include "sysc/datatypes/misc/sc_concatref.h" #include "sysc/utils/sc_temporary.h" // STORAGE POOLS USED BY sc_concatref: namespace sc_core { template class SC_API sc_vpool; template class SC_API sc_vpool; sc_byte_heap sc_temp_heap(0x300000); } // namespace sc_core namespace sc_dt { sc_core::sc_vpool sc_concat_bool::m_pool(9); sc_core::sc_vpool sc_concatref::m_pool(9); } // namespace sc_dt systemc-2.3.4/src/sysc/datatypes/misc/sc_value_base.cpp0000644000175000017500000001042414342422106023066 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_value_base.cpp -- Base class for all SystemC data values. Original Author: Andy Goodrich, Forte Design Systems *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // $Log: sc_value_base.cpp,v $ // Revision 1.2 2011/08/15 16:43:24 acg // Torsten Maehne: changes to remove unused argument warnings. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:54:01 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #include #include #include #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/datatypes/misc/sc_value_base.h" namespace sc_dt { void sc_value_base::concat_clear_data( bool /* to_ones */ ) { static const char error_message[] = "concat_clear_data method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); } bool sc_value_base::concat_get_ctrl( sc_digit* /*dst_p*/, int /*low_i*/ ) const { static const char error_message[] = "concat_get_ctrl method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); return false; } bool sc_value_base::concat_get_data( sc_digit* /*dst_p*/, int /*low_i*/ ) const { static const char error_message[] = "concat_get_data method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); return false; } sc_dt::uint64 sc_value_base::concat_get_uint64() const { static const char error_message[] = "concat_get_uint64 method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); return 0; } int sc_value_base::concat_length(bool* /*xz_present_p*/) const { static const char error_message[] = "concat_length method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); return 0; } void sc_value_base::concat_set( int64 /*src*/, int /*low_i*/ ) { static const char error_message[] = "concat_set(int64) method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); } void sc_value_base::concat_set( const sc_signed& /*src*/, int /*low_i*/ ) { static const char error_message[] = "concat_set(sc_signed) method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); } void sc_value_base::concat_set( const sc_unsigned& /*src*/, int /*low_i*/ ) { static const char error_message[] = "concat_set(sc_unsigned) method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); } void sc_value_base::concat_set( uint64 /*src*/, int /*low_i*/ ) { static const char error_message[] = "concat_set(uint64) method not supported by this type"; SC_REPORT_ERROR( sc_core::SC_ID_OPERATION_FAILED_, error_message ); } } // namespace sc_dt systemc-2.3.4/src/sysc/datatypes/misc/sc_concatref.h0000644000175000017500000005743014342422106022401 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_concatref.h -- Concatenation support. Original Author: Andy Goodrich, Forte Design, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: Andy Goodrich, Forte Design Systems, 17 Nov 2002 Creation of sc_concatref class by merging the capabilities of sc_int_concref, sc_int_concref, sc_uint_concref, sc_uint_concref, and implementing the capabilities of sc_signed_concref, sc_signed_concref, sc_unsigned_concref, and sc_unsigned_concref. The resultant class allows mixed mode concatenations on the left and right sides of an assignment. *****************************************************************************/ // $Log: sc_concatref.h,v $ // Revision 1.6 2011/08/24 22:05:48 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.5 2009/11/17 19:58:15 acg // Andy Goodrich: fix of shift rhs possibilities to include "int". // // Revision 1.4 2009/02/28 00:26:29 acg // Andy Goodrich: bug fixes. // // Revision 1.3 2008/04/29 20:23:55 acg // Andy Goodrich: fixed the code that assigns the value of a string to // an sc_concatref instance. // // Revision 1.2 2008/02/14 20:57:26 acg // Andy Goodrich: added casts to ~0 instances to keep MSVC compiler happy. // // Revision 1.1.1.1 2006/12/15 20:20:05 acg // SystemC 2.3 // // Revision 1.4 2006/10/23 19:36:59 acg // Andy Goodrich: changed casts for operations on concatenation values to // mirror those of sc_unsigned. For instance, an sc_unsigned minus a value // returns an sc_signed result, whereas an sc_concatref minus a value was // returning an sc_unsigned result. Now both sc_unsigned and sc_concatref // minus a value return an sc_signed result. // // Revision 1.3 2006/01/13 18:54:01 acg // Andy Goodrich: added $Log command so that CVS comments are reproduced in // the source. // #ifndef SC_CONCATREF_H #define SC_CONCATREF_H #include "sysc/kernel/sc_object.h" #include "sysc/datatypes/misc/sc_value_base.h" #include "sysc/utils/sc_temporary.h" #include "sysc/datatypes/bit/sc_bv.h" #include "sysc/datatypes/bit/sc_lv.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" namespace sc_dt { // classes defined in this module class sc_concatref; class sc_concat_bool; } // namespace sc_dt namespace sc_core { extern sc_byte_heap SC_API sc_temp_heap; // Temporary storage. // explicit template instantiations SC_API_TEMPLATE_DECL_ sc_vpool; SC_API_TEMPLATE_DECL_ sc_vpool; } // namespace sc_core namespace sc_dt { // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concatref // // Proxy class for sized bit concatenation. // ---------------------------------------------------------------------------- class SC_API sc_concatref : public sc_generic_base, public sc_value_base { public: friend class sc_core::sc_vpool; inline void initialize( sc_value_base& left, sc_value_base& right ) { bool left_xz; // True if x's and/or z's found in left. bool right_xz; // True if x's and/or z's found in right. m_left_p = (sc_value_base*)&left; m_right_p = (sc_value_base*)&right; m_len_r = right.concat_length(&right_xz); m_len = left.concat_length(&left_xz) + m_len_r; m_flags = ( left_xz || right_xz ) ? cf_xz_present : cf_none; } inline void initialize( const sc_value_base& left, const sc_value_base& right ) { bool left_xz; // True if x's and/or z's found in left. bool right_xz; // True if x's and/or z's found in right. m_left_p = (sc_value_base*)&left; m_right_p = (sc_value_base*)&right; m_len_r = right.concat_length(&right_xz); m_len = left.concat_length(&left_xz) + m_len_r; m_flags = ( left_xz || right_xz ) ? cf_xz_present : cf_none; } // destructor virtual ~sc_concatref() {} // capacity unsigned int length() const { return m_len; } #ifdef SC_DT_DEPRECATED int bitwidth() const { return length(); } #endif // concatenation virtual int concat_length( bool* xz_present_p ) const { if ( xz_present_p ) *xz_present_p = m_flags & cf_xz_present ? true : false; return m_len; } virtual void concat_clear_data( bool to_ones ) { m_left_p->concat_clear_data(to_ones); m_right_p->concat_clear_data(to_ones); } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { bool rnz = m_right_p->concat_get_ctrl( dst_p, low_i ); bool lnz = m_left_p->concat_get_ctrl( dst_p, low_i+m_len_r ); return rnz || lnz; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { bool rnz = m_right_p->concat_get_data( dst_p, low_i ); bool lnz = m_left_p->concat_get_data( dst_p, low_i+m_len_r ); return rnz || lnz; } virtual uint64 concat_get_uint64() const { if ( m_len_r >= 64 ) return m_right_p->concat_get_uint64(); else { return (m_left_p->concat_get_uint64() << m_len_r) | m_right_p->concat_get_uint64(); } } virtual void concat_set( int64 src, int low_i ) { m_right_p->concat_set( src, low_i ); m_left_p->concat_set( src, low_i+m_len_r); } virtual void concat_set( const sc_signed& src, int low_i ) { m_right_p->concat_set( src, low_i ); m_left_p->concat_set( src, low_i+m_len_r); } virtual void concat_set( const sc_unsigned& src, int low_i ) { m_right_p->concat_set( src, low_i ); m_left_p->concat_set( src, low_i+m_len_r); } virtual void concat_set( uint64 src, int low_i ) { m_right_p->concat_set( src, low_i ); m_left_p->concat_set( src, low_i+m_len_r); } // explicit conversions uint64 to_uint64() const { uint64 mask; uint64 result; result = m_right_p->concat_get_uint64(); if ( m_len_r < 64 ) { mask = (uint64)~0; result = (m_left_p->concat_get_uint64() << m_len_r) | (result & ~(mask << m_len_r)); } if ( m_len < 64 ) { mask = (uint64)~0; result = result & ~(mask << m_len); } return result; } const sc_unsigned& value() const { bool left_non_zero; sc_unsigned* result_p = sc_unsigned::m_pool.allocate(); bool right_non_zero; result_p->nbits = result_p->num_bits(m_len); result_p->ndigits = DIV_CEIL(result_p->nbits); result_p->digit = (sc_digit*)sc_core::sc_temp_heap.allocate( sizeof(sc_digit)*result_p->ndigits ); #if defined(_MSC_VER) // workaround spurious initialisation issue on MS Visual C++ memset( result_p->digit, 0, sizeof(sc_digit)*result_p->ndigits ); #else result_p->digit[result_p->ndigits-1] = 0; #endif right_non_zero = m_right_p->concat_get_data( result_p->digit, 0 ); left_non_zero = m_left_p->concat_get_data(result_p->digit, m_len_r); if ( left_non_zero || right_non_zero ) result_p->sgn = SC_POS; else result_p->sgn = SC_ZERO; return *result_p; } int64 to_int64() const { return (int64)to_uint64(); } int to_int() const { return (int)to_int64(); } unsigned int to_uint() const { return (unsigned int)to_uint64(); } long to_long() const { return (long)to_int64(); } unsigned long to_ulong() const { return (unsigned long)to_uint64(); } double to_double() const { return value().to_double(); } void to_sc_signed( sc_signed& target ) const { target = value(); } void to_sc_unsigned( sc_unsigned& target ) const { target = value(); } // implicit conversions: operator uint64 () const { return to_uint64(); } operator const sc_unsigned& () const { return value(); } // unary operators: sc_unsigned operator + () const { return value(); } sc_signed operator - () const { return -value(); } sc_unsigned operator ~ () const { return ~value(); } // explicit conversion to character string const std::string to_string( sc_numrep numrep = SC_DEC ) const { return value().to_string(numrep); } const std::string to_string( sc_numrep numrep, bool w_prefix ) const { return value().to_string(numrep,w_prefix); } // assignments inline const sc_concatref& operator = ( int v ) { m_right_p->concat_set((int64)v, 0); m_left_p->concat_set((int64)v, m_len_r); return *this; } inline const sc_concatref& operator = ( long v ) { m_right_p->concat_set((int64)v, 0); m_left_p->concat_set((int64)v, m_len_r); return *this; } inline const sc_concatref& operator = ( int64 v ) { m_right_p->concat_set(v, 0); m_left_p->concat_set(v, m_len_r); return *this; } inline const sc_concatref& operator = ( unsigned int v ) { m_right_p->concat_set((uint64)v, 0); m_left_p->concat_set((uint64)v, m_len_r); return *this; } inline const sc_concatref& operator = ( unsigned long v ) { m_right_p->concat_set((uint64)v, 0); m_left_p->concat_set((uint64)v, m_len_r); return *this; } inline const sc_concatref& operator = ( uint64 v ) { m_right_p->concat_set(v, 0); m_left_p->concat_set(v, m_len_r); return *this; } const sc_concatref& operator = ( const sc_concatref& v ) { sc_unsigned temp(v.length()); temp = v.value(); m_right_p->concat_set(temp, 0); m_left_p->concat_set(temp, m_len_r); return *this; } const sc_concatref& operator = ( const sc_signed& v ) { m_right_p->concat_set(v, 0); m_left_p->concat_set(v, m_len_r); return *this; } const sc_concatref& operator = ( const sc_unsigned& v ) { m_right_p->concat_set(v, 0); m_left_p->concat_set(v, m_len_r); return *this; } const sc_concatref& operator = ( const char* v_p ) { sc_unsigned v(m_len); v = v_p; m_right_p->concat_set(v, 0); m_left_p->concat_set(v, m_len_r); return *this; } const sc_concatref& operator = ( const sc_bv_base& v ) { sc_unsigned temp(v.length()); temp = v; m_right_p->concat_set(temp, 0); m_left_p->concat_set(temp, m_len_r); return *this; } const sc_concatref& operator = ( const sc_lv_base& v ) { sc_unsigned data(v.length()); data = v; m_right_p->concat_set(data, 0); m_left_p->concat_set(data, m_len_r); return *this; } // reduce methods bool and_reduce() const { return value().and_reduce(); } bool nand_reduce() const { return value().nand_reduce(); } bool or_reduce() const { return value().or_reduce(); } bool nor_reduce() const { return value().nor_reduce(); } bool xor_reduce() const { return value().xor_reduce(); } bool xnor_reduce() const { return value().xnor_reduce(); } // other methods void print( ::std::ostream& os = ::std::cout ) const { os << this->value(); } void scan( ::std::istream& is ) { std::string s; is >> s; *this = s.c_str(); } public: static sc_core::sc_vpool m_pool; // Pool of temporary objects. public: enum concat_flags { cf_none = 0, // Normal value. cf_xz_present = 1 // X and/or Z values present. }; protected: sc_value_base* m_left_p; // Left hand operand of concatenation. sc_value_base* m_right_p; // Right hand operand of concatenation. int m_len; // Length of concatenation. int m_len_r; // Length of m_rightt_p. concat_flags m_flags; // Value is read only. private: sc_concatref(const sc_concatref&); sc_concatref() : m_left_p(0), m_right_p(0), m_len(0), m_len_r(0), m_flags() {} }; // functional notation for the reduce methods inline bool and_reduce( const sc_concatref& a ) { return a.and_reduce(); } inline bool nand_reduce( const sc_concatref& a ) { return a.nand_reduce(); } inline bool or_reduce( const sc_concatref& a ) { return a.or_reduce(); } inline bool nor_reduce( const sc_concatref& a ) { return a.nor_reduce(); } inline bool xor_reduce( const sc_concatref& a ) { return a.xor_reduce(); } inline bool xnor_reduce( const sc_concatref& a ) { return a.xnor_reduce(); } // SHIFT OPERATORS FOR sc_concatref OBJECT INSTANCES: // // Because sc_concatref has implicit casts to both uint64 and sc_unsigned // it is necessary to disambiguate the use of the shift operators. We do // this in favor of sc_unsigned so that precision is not lost. To get an // integer-based result use a cast to uint64 before performing the shift. inline const sc_unsigned operator << (const sc_concatref& target, uint64 shift) { return target.value() << (int)shift; } inline const sc_unsigned operator << (const sc_concatref& target, int64 shift) { return target.value() << (int)shift; } inline const sc_unsigned operator << ( const sc_concatref& target, unsigned long shift ) { return target.value() << (int)shift; } inline const sc_unsigned operator << ( const sc_concatref& target, int shift ) { return target.value() << shift; } inline const sc_unsigned operator << ( const sc_concatref& target, unsigned int shift ) { return target.value() << (int)shift; } inline const sc_unsigned operator << ( const sc_concatref& target, long shift ) { return target.value() << (int)shift; } inline const sc_unsigned operator >> (const sc_concatref& target, uint64 shift) { return target.value() >> (int)shift; } inline const sc_unsigned operator >> (const sc_concatref& target, int64 shift) { return target.value() >> (int)shift; } inline const sc_unsigned operator >> ( const sc_concatref& target, unsigned long shift ) { return target.value() >> (int)shift; } inline const sc_unsigned operator >> ( const sc_concatref& target, int shift ) { return target.value() >> shift; } inline const sc_unsigned operator >> ( const sc_concatref& target, unsigned int shift ) { return target.value() >> (int)shift; } inline const sc_unsigned operator >> ( const sc_concatref& target, long shift ) { return target.value() >> (int)shift; } // STREAM OPERATORS FOR sc_concatref OBJECT INSTANCES: inline ::std::ostream& operator << ( ::std::ostream& os, const sc_concatref& v ) { return os << v.value(); } inline ::std::istream& operator >> ( ::std::istream& is, sc_concatref& a ) { sc_unsigned temp(a.concat_length(0)); temp.scan( is ); a = temp; return is; } // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_concat_bool // // Proxy class for read-only boolean values in concatenations. // ---------------------------------------------------------------------------- class SC_API sc_concat_bool : public sc_value_base { protected: static sc_core::sc_vpool m_pool; // Temporaries pool. bool m_value; // Value for this obj. public: // constructor: sc_concat_bool() : sc_value_base(), m_value() {} // destructor: virtual ~sc_concat_bool() { } // allocation of temporary object: static inline sc_concat_bool* allocate( bool v ) { sc_concat_bool* result_p = m_pool.allocate(); result_p->m_value = v; return result_p; } // concatenation: virtual int concat_length( bool* xz_present_p ) const { if ( xz_present_p ) *xz_present_p = false; return 1; } virtual bool concat_get_ctrl( sc_digit* dst_p, int low_i ) const { int bit = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; dst_p[word_i] &= ~bit; return false; } virtual bool concat_get_data( sc_digit* dst_p, int low_i ) const { int bit = 1 << (low_i % BITS_PER_DIGIT); int word_i = low_i / BITS_PER_DIGIT; if ( m_value ) dst_p[word_i] |= bit; else dst_p[word_i] &= ~bit; return m_value; } virtual uint64 concat_get_uint64() const { return m_value ? 1 : 0; } }; // ---------------------------------------------------------------------------- // ARITHMETIC AND LOGIC OPERATORS FOR sc_concatref // ---------------------------------------------------------------------------- #define SC_CONCAT_OP_TYPE(RESULT,OP,OTHER_TYPE) \ inline RESULT operator OP ( const sc_concatref& a, OTHER_TYPE b ) \ { \ return a.value() OP b; \ } \ inline RESULT operator OP ( OTHER_TYPE a, const sc_concatref& b ) \ { \ return a OP b.value(); \ } #define SC_CONCAT_OP(RESULT,OP) \ inline RESULT operator OP ( const sc_concatref& a, const sc_concatref& b ) \ { \ return a.value() OP b.value(); \ } \ SC_CONCAT_OP_TYPE(const sc_signed,OP,int) \ SC_CONCAT_OP_TYPE(const sc_signed,OP,long) \ SC_CONCAT_OP_TYPE(const sc_signed,OP,int64) \ SC_CONCAT_OP_TYPE(RESULT,OP,unsigned int) \ SC_CONCAT_OP_TYPE(RESULT,OP,unsigned long) \ SC_CONCAT_OP_TYPE(RESULT,OP,uint64) \ SC_CONCAT_OP_TYPE(const sc_signed,OP,const sc_int_base&) \ SC_CONCAT_OP_TYPE(RESULT,OP,const sc_uint_base&) \ SC_CONCAT_OP_TYPE(const sc_signed,OP,const sc_signed&) \ SC_CONCAT_OP_TYPE(RESULT,OP,const sc_unsigned&) \ inline RESULT operator OP ( const sc_concatref& a, bool b ) \ { \ return a.value() OP (int)b; \ } \ inline RESULT operator OP ( bool a, const sc_concatref& b ) \ { \ return (int)a OP b.value(); \ } #define SC_CONCAT_BOOL_OP(OP) \ inline bool operator OP ( const sc_concatref& a, const sc_concatref& b ) \ { \ return a.value() OP b.value(); \ } \ SC_CONCAT_OP_TYPE(bool,OP,int) \ SC_CONCAT_OP_TYPE(bool,OP,long) \ SC_CONCAT_OP_TYPE(bool,OP,int64) \ SC_CONCAT_OP_TYPE(bool,OP,unsigned int) \ SC_CONCAT_OP_TYPE(bool,OP,unsigned long) \ SC_CONCAT_OP_TYPE(bool,OP,uint64) \ SC_CONCAT_OP_TYPE(bool,OP,const sc_int_base&) \ SC_CONCAT_OP_TYPE(bool,OP,const sc_uint_base&) \ SC_CONCAT_OP_TYPE(bool,OP,const sc_signed&) \ SC_CONCAT_OP_TYPE(bool,OP,const sc_unsigned&) \ inline bool operator OP ( const sc_concatref& a, bool b ) \ { \ return a.value() OP (int)b; \ } \ inline bool operator OP ( bool a, const sc_concatref& b ) \ { \ return (int)a OP b.value(); \ } SC_CONCAT_OP(const sc_unsigned,+) SC_CONCAT_OP(const sc_signed,-) SC_CONCAT_OP(const sc_unsigned,*) SC_CONCAT_OP(const sc_unsigned,/) SC_CONCAT_OP(const sc_unsigned,%) SC_CONCAT_OP(const sc_unsigned,&) SC_CONCAT_OP(const sc_unsigned,|) SC_CONCAT_OP(const sc_unsigned,^) SC_CONCAT_BOOL_OP(==) SC_CONCAT_BOOL_OP(<=) SC_CONCAT_BOOL_OP(>=) SC_CONCAT_BOOL_OP(!=) SC_CONCAT_BOOL_OP(>) SC_CONCAT_BOOL_OP(<) #undef SC_CONCAT_OP #undef SC_CONCAT_OP_TYPE // ---------------------------------------------------------------------------- // CONCATENATION FUNCTION AND OPERATOR FOR STANDARD SYSTEM C DATA TYPES: // ---------------------------------------------------------------------------- inline sc_dt::sc_concatref& concat( sc_dt::sc_value_base& a, sc_dt::sc_value_base& b) { sc_dt::sc_concatref* result_p; // Proxy for the concatenation. result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, b ); return *result_p; } inline const sc_dt::sc_concatref& concat( const sc_dt::sc_value_base& a, const sc_dt::sc_value_base& b) { sc_dt::sc_concatref* result_p; // Proxy for the concatenation. result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, b ); return *result_p; } inline const sc_dt::sc_concatref& concat(const sc_dt::sc_value_base& a, bool b) { const sc_dt::sc_concat_bool* b_p; // Proxy for boolean value. sc_dt::sc_concatref* result_p; // Proxy for the concatenation. b_p = sc_dt::sc_concat_bool::allocate(b); result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, *b_p ); return *result_p; } inline const sc_dt::sc_concatref& concat(bool a, const sc_dt::sc_value_base& b) { const sc_dt::sc_concat_bool* a_p; // Proxy for boolean value. sc_dt::sc_concatref* result_p; // Proxy for the concatenation. a_p = sc_dt::sc_concat_bool::allocate(a); result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( *a_p, b ); return *result_p; } inline sc_dt::sc_concatref& operator , ( sc_dt::sc_value_base& a, sc_dt::sc_value_base& b) { sc_dt::sc_concatref* result_p; // Proxy for the concatenation. result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, b ); return *result_p; } inline const sc_dt::sc_concatref& operator , ( const sc_dt::sc_value_base& a, const sc_dt::sc_value_base& b) { sc_dt::sc_concatref* result_p; // Proxy for the concatenation. result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, b ); return *result_p; } inline const sc_dt::sc_concatref& operator , (const sc_dt::sc_value_base& a, bool b) { const sc_dt::sc_concat_bool* b_p; // Proxy for boolean value. sc_dt::sc_concatref* result_p; // Proxy for the concatenation. b_p = sc_dt::sc_concat_bool::allocate(b); result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( a, *b_p ); return *result_p; } inline const sc_dt::sc_concatref& operator , (bool a, const sc_dt::sc_value_base& b) { const sc_dt::sc_concat_bool* a_p; // Proxy for boolean value. sc_dt::sc_concatref* result_p; // Proxy for the concatenation. a_p = sc_dt::sc_concat_bool::allocate(a); result_p = sc_dt::sc_concatref::m_pool.allocate(); result_p->initialize( *a_p, b ); return *result_p; } } // namespace sc_dt #endif // SC_CONCATREF_H systemc-2.3.4/src/sysc/datatypes/files.am0000644000175000017500000001047214342422106020260 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/datatypes/files.am -- ## Included from a Makefile.am to provide directory-specific information ## ## Original Author: Philipp A. Hartmann, Intel, 2015-11-24 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** ## Generic directory setup ## (should be kept in sync among all files.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: datatypes ## %C%: datatypes H_FILES += \ datatypes/bit/sc_bit.h \ datatypes/bit/sc_bit_ids.h \ datatypes/bit/sc_bit_proxies.h \ datatypes/bit/sc_bv.h \ datatypes/bit/sc_bv_base.h \ datatypes/bit/sc_logic.h \ datatypes/bit/sc_lv.h \ datatypes/bit/sc_lv_base.h \ datatypes/bit/sc_proxy.h \ \ datatypes/fx/fx.h \ datatypes/fx/sc_context.h \ datatypes/fx/sc_fix.h \ datatypes/fx/sc_fixed.h \ datatypes/fx/sc_fx_ids.h \ datatypes/fx/sc_fxcast_switch.h \ datatypes/fx/sc_fxdefs.h \ datatypes/fx/sc_fxnum.h \ datatypes/fx/sc_fxnum_observer.h \ datatypes/fx/sc_fxtype_params.h \ datatypes/fx/sc_fxval.h \ datatypes/fx/sc_fxval_observer.h \ datatypes/fx/sc_ufix.h \ datatypes/fx/sc_ufixed.h \ datatypes/fx/scfx_ieee.h \ datatypes/fx/scfx_mant.h \ datatypes/fx/scfx_other_defs.h \ datatypes/fx/scfx_params.h \ datatypes/fx/scfx_rep.h \ datatypes/fx/scfx_string.h \ datatypes/fx/scfx_utils.h \ \ datatypes/int/sc_bigint.h \ datatypes/int/sc_biguint.h \ datatypes/int/sc_int.h \ datatypes/int/sc_int_base.h \ datatypes/int/sc_int_ids.h \ datatypes/int/sc_length_param.h \ datatypes/int/sc_nbdefs.h \ datatypes/int/sc_nbexterns.h \ datatypes/int/sc_nbutils.h \ datatypes/int/sc_signed.h \ datatypes/int/sc_uint.h \ datatypes/int/sc_uint_base.h \ datatypes/int/sc_unsigned.h \ \ datatypes/misc/sc_concatref.h \ datatypes/misc/sc_value_base.h NO_H_FILES += \ datatypes/int/sc_nbcommon.inc \ datatypes/int/sc_nbfriends.inc \ datatypes/int/sc_signed_bitref.inc \ datatypes/int/sc_signed_subref.inc \ datatypes/int/sc_unsigned_bitref.inc \ datatypes/int/sc_unsigned_subref.inc \ \ datatypes/fx/scfx_pow10.h CXX_FILES += \ datatypes/bit/sc_bit.cpp \ datatypes/bit/sc_bv_base.cpp \ datatypes/bit/sc_logic.cpp \ datatypes/bit/sc_lv_base.cpp \ \ datatypes/fx/sc_fxcast_switch.cpp \ datatypes/fx/sc_fxdefs.cpp \ datatypes/fx/sc_fxnum.cpp \ datatypes/fx/sc_fxnum_observer.cpp \ datatypes/fx/sc_fxtype_params.cpp \ datatypes/fx/sc_fxval.cpp \ datatypes/fx/sc_fxval_observer.cpp \ datatypes/fx/scfx_mant.cpp \ datatypes/fx/scfx_pow10.cpp \ datatypes/fx/scfx_rep.cpp \ datatypes/fx/scfx_utils.cpp \ \ datatypes/int/sc_int_base.cpp \ datatypes/int/sc_int_mask.cpp \ datatypes/int/sc_length_param.cpp \ datatypes/int/sc_nbexterns.cpp \ datatypes/int/sc_nbutils.cpp \ datatypes/int/sc_signed.cpp \ datatypes/int/sc_uint_base.cpp \ datatypes/int/sc_unsigned.cpp \ \ datatypes/misc/sc_concatref.cpp \ datatypes/misc/sc_value_base.cpp INCDIRS += \ datatypes/bit \ datatypes/fx \ datatypes/int \ datatypes/misc \ datatypes ## Taf! ## :vim:ft=automake: systemc-2.3.4/src/sysc/tracing/0000755000175000017500000000000014342422106016264 5ustar carstencarstensystemc-2.3.4/src/sysc/tracing/sc_vcd_trace.cpp0000644000175000017500000016451314342422106021421 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_vcd_trace.cpp - Implementation of VCD tracing. Original Author - Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Replaced 'width' of sc_(u)int with their 'bitwidth()'. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #include #include #include #include #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_ver.h" #include "sysc/kernel/sc_event.h" #include "sysc/datatypes/bit/sc_bit.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/fx/fx.h" #include "sysc/tracing/sc_vcd_trace.h" #include "sysc/utils/sc_report.h" // sc_assert #include "sysc/utils/sc_string_view.h" #include #include #include #if defined(_MSC_VER) # pragma warning(disable:4309) // truncation of constant value #endif namespace sc_core { // Forward declarations for functions that come later in the file // Map sc_dt::sc_logic to printable VCD static char map_sc_logic_state_to_vcd_state(char in_char); // Remove name problems associated with [] in vcd names static void remove_vcd_name_problems(vcd_trace const* vcd, std::string& name); const char* vcd_types[] = { "wire", "real", "event", "time" }; // ---------------------------------------------------------------------------- // CLASS : vcd_trace // // Base class for VCD traces. // ---------------------------------------------------------------------------- class vcd_trace { public: vcd_trace(const std::string& name_, const std::string& vcd_name_); // Needs to be pure virtual as has to be defined by the particular // type being traced virtual void write(FILE* f) = 0; virtual void set_width(); static const char* strip_leading_bits(const char* originalbuf); // Comparison function needs to be pure virtual too virtual bool changed() = 0; // Make this virtual as some derived classes may overwrite virtual void print_variable_declaration_line(FILE* f, const char* scoped_name); void compose_data_line(char* rawdata, char* compdata); std::string compose_line(const std::string& data); virtual ~vcd_trace(); const std::string name; const std::string vcd_name; vcd_trace_file::vcd_enum vcd_var_type; int bit_width; }; vcd_trace::vcd_trace(const std::string& name_, const std::string& vcd_name_) : name(name_) , vcd_name(vcd_name_) , vcd_var_type(vcd_trace_file::VCD_WIRE) , bit_width(0) { /* Intentionally blank */ } void vcd_trace::compose_data_line(char* rawdata, char* compdata) { sc_assert(rawdata != compdata); if(bit_width == 0) { compdata[0] = '\0'; } else { if(bit_width == 1) { compdata[0] = rawdata[0]; strcpy(&(compdata[1]), vcd_name.c_str()); } else { const char* effective_begin = strip_leading_bits(rawdata); std::sprintf(compdata, "b%s %s", effective_begin, vcd_name.c_str()); } } } // same as above but not that ugly std::string vcd_trace::compose_line(const std::string& data) { if(bit_width == 0) return ""; if(bit_width == 1) return data + vcd_name; return std::string("b")+strip_leading_bits(data.c_str())+" "+vcd_name; } void vcd_trace::print_variable_declaration_line(FILE* f, const char* scoped_name) { char buf[2000]; if ( bit_width <= 0 ) { std::stringstream ss; ss << "'" << name << "' has 0 bits"; SC_REPORT_ERROR( SC_ID_TRACING_OBJECT_IGNORED_, ss.str().c_str() ); return; } if ( bit_width == 1 ) { std::sprintf(buf, "$var %s % 3d %s %s $end\n", vcd_types[vcd_var_type], bit_width, vcd_name.c_str(), scoped_name); } else { std::sprintf(buf, "$var %s % 3d %s %s [%d:0] $end\n", vcd_types[vcd_var_type], bit_width, vcd_name.c_str(), scoped_name, bit_width-1); } std::fputs(buf, f); } void vcd_trace::set_width() { /* Intentionally Blank, should be defined for each type separately */ } const char* vcd_trace::strip_leading_bits(const char* originalbuf) { //********************************************************************* // - Remove multiple leading 0,z,x, and replace by only one // - For example, // b000z100 -> b0z100 // b00000xxx -> b0xxx // b000 -> b0 // bzzzzz1 -> bz1 // bxxxz10 -> xz10 // - For leading 0's followed by 1, remove all leading 0's // b0000010101 -> b10101 const char* position = originalbuf; if( strlen(originalbuf) < 2 || (originalbuf[0] != 'z' && originalbuf[0] != 'x' && originalbuf[0] != '0' )) return originalbuf; char first_char = *position; while(*position == first_char) { position++; } if(first_char == '0' && *position == '1') return position; // else return position-1; } vcd_trace::~vcd_trace() { /* Intentionally Blank */ } template class vcd_T_trace : public vcd_trace { public: vcd_T_trace( const T& object_, const std::string& name_, const std::string& vcd_name_, vcd_trace_file::vcd_enum type_ ) : vcd_trace( name_, vcd_name_ ), object( object_ ), old_value( object_ ) { sc_assert( type_ < vcd_trace_file::VCD_LAST ); vcd_var_type = type_; } void write( FILE* f ) { std::fprintf( f, "%s", compose_line( object.to_string() ).c_str() ); old_value = object; } bool changed() { return !(object == old_value); } void set_width() { bit_width = object.length(); } protected: const T& object; T old_value; }; typedef vcd_T_trace vcd_sc_bv_trace; typedef vcd_T_trace vcd_sc_lv_trace; // Trace sc_dt::sc_bv_base (sc_dt::sc_bv) void vcd_trace_file::trace( const sc_dt::sc_bv_base& object, const std::string& name) { traceT(object,name); } // Trace sc_dt::sc_lv_base (sc_dt::sc_lv) void vcd_trace_file::trace( const sc_dt::sc_lv_base& object, const std::string& name) { traceT(object,name); } /*****************************************************************************/ class vcd_sc_event_trace : public vcd_trace { public: vcd_sc_event_trace(const sc_dt::uint64& trigger_stamp_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); protected: const sc_dt::uint64& trigger_stamp; sc_dt::uint64 old_trigger_stamp; }; vcd_sc_event_trace::vcd_sc_event_trace(const sc_dt::uint64& trigger_stamp_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_) , trigger_stamp(trigger_stamp_), old_trigger_stamp(trigger_stamp_) { vcd_var_type = vcd_trace_file::VCD_EVENT; bit_width = 1; } bool vcd_sc_event_trace::changed() { return trigger_stamp != old_trigger_stamp; } void vcd_sc_event_trace::write(FILE* f) { if(!changed()) return; std::fprintf(f,"1%s", vcd_name.c_str()); old_trigger_stamp = trigger_stamp; } /*****************************************************************************/ class vcd_bool_trace : public vcd_trace { public: vcd_bool_trace(const bool& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); protected: const bool& object; bool old_value; }; vcd_bool_trace::vcd_bool_trace(const bool& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_) { bit_width = 1; } bool vcd_bool_trace::changed() { return object != old_value; } void vcd_bool_trace::write(FILE* f) { if (object == true) std::fputc('1', f); else std::fputc('0', f); std::fprintf(f,"%s", vcd_name.c_str()); old_value = object; } //***************************************************************************** class vcd_sc_bit_trace : public vcd_trace { public: vcd_sc_bit_trace(const sc_dt::sc_bit& , const std::string& , const std::string& ); void write(FILE* f); bool changed(); protected: const sc_dt::sc_bit& object; sc_dt::sc_bit old_value; }; vcd_sc_bit_trace::vcd_sc_bit_trace( const sc_dt::sc_bit& object_, const std::string& name, const std::string& vcd_name) : vcd_trace(name, vcd_name), object( object_ ), old_value( object_ ) { bit_width = 1; } bool vcd_sc_bit_trace::changed() { return object != old_value; } void vcd_sc_bit_trace::write(FILE* f) { if (object == true) std::fputc('1', f); else std::fputc('0', f); std::fprintf(f,"%s", vcd_name.c_str()); old_value = object; } /*****************************************************************************/ class vcd_sc_logic_trace : public vcd_trace { public: vcd_sc_logic_trace(const sc_dt::sc_logic& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); protected: const sc_dt::sc_logic& object; sc_dt::sc_logic old_value; }; vcd_sc_logic_trace::vcd_sc_logic_trace(const sc_dt::sc_logic& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_) { bit_width = 1; } bool vcd_sc_logic_trace::changed() { return object != old_value; } void vcd_sc_logic_trace::write(FILE* f) { char out_char; out_char = map_sc_logic_state_to_vcd_state(object.to_char()); std::fputc(out_char, f); std::fprintf(f,"%s", vcd_name.c_str()); old_value = object; } /*****************************************************************************/ class vcd_sc_unsigned_trace : public vcd_trace { public: vcd_sc_unsigned_trace(const sc_dt::sc_unsigned& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_unsigned& object; sc_dt::sc_unsigned old_value; }; vcd_sc_unsigned_trace::vcd_sc_unsigned_trace(const sc_dt::sc_unsigned& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_.length()) // The last may look strange, but is correct { old_value = object; } bool vcd_sc_unsigned_trace::changed() { return object != old_value; } void vcd_sc_unsigned_trace::write(FILE* f) { static std::vector compdata(1024), rawdata(1024); typedef std::vector::size_type size_t; if ( compdata.size() <= static_cast(object.length()) ) { // include trailing \0 size_t sz = ( static_cast(object.length()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( compdata ); // resize without copying values std::vector( sz ).swap( rawdata ); } char *rawdata_ptr = &rawdata[0]; for (int bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *rawdata_ptr++ = "01"[object[bitindex].to_bool()]; } *rawdata_ptr = '\0'; compose_data_line(&rawdata[0], &compdata[0]); std::fputs(&compdata[0], f); old_value = object; } void vcd_sc_unsigned_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class vcd_sc_signed_trace : public vcd_trace { public: vcd_sc_signed_trace(const sc_dt::sc_signed& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_signed& object; sc_dt::sc_signed old_value; }; vcd_sc_signed_trace::vcd_sc_signed_trace(const sc_dt::sc_signed& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_.length()) { old_value = object; } bool vcd_sc_signed_trace::changed() { return object != old_value; } void vcd_sc_signed_trace::write(FILE* f) { static std::vector compdata(1024), rawdata(1024); typedef std::vector::size_type size_t; if ( compdata.size() <= static_cast(object.length()) ) { // include trailing \0 size_t sz = ( static_cast(object.length()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( compdata ); // resize without copying values std::vector( sz ).swap( rawdata ); } char *rawdata_ptr = &rawdata[0]; for (int bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *rawdata_ptr++ = "01"[object[bitindex].to_bool()]; } *rawdata_ptr = '\0'; compose_data_line(&rawdata[0], &compdata[0]); std::fputs(&compdata[0], f); old_value = object; } void vcd_sc_signed_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class vcd_sc_uint_base_trace : public vcd_trace { public: vcd_sc_uint_base_trace(const sc_dt::sc_uint_base& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_uint_base& object; sc_dt::sc_uint_base old_value; }; vcd_sc_uint_base_trace::vcd_sc_uint_base_trace( const sc_dt::sc_uint_base& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_.length()) // The last may look strange, but is correct { old_value = object; } bool vcd_sc_uint_base_trace::changed() { return object != old_value; } void vcd_sc_uint_base_trace::write(FILE* f) { char rawdata[1000], *rawdata_ptr = rawdata; char compdata[1000]; int bitindex; for (bitindex = object.length()-1; bitindex >= 0; --bitindex) { *rawdata_ptr++ = "01"[object[bitindex].to_bool()]; } *rawdata_ptr = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } void vcd_sc_uint_base_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class vcd_sc_int_base_trace : public vcd_trace { public: vcd_sc_int_base_trace(const sc_dt::sc_int_base& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_int_base& object; sc_dt::sc_int_base old_value; }; vcd_sc_int_base_trace::vcd_sc_int_base_trace(const sc_dt::sc_int_base& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_.length()) { old_value = object; } bool vcd_sc_int_base_trace::changed() { return object != old_value; } void vcd_sc_int_base_trace::write(FILE* f) { char rawdata[1000], *rawdata_ptr = rawdata; char compdata[1000]; int bitindex; for (bitindex = object.length()-1; bitindex >= 0; --bitindex) { *rawdata_ptr++ = "01"[object[bitindex].to_bool()]; } *rawdata_ptr = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } void vcd_sc_int_base_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class vcd_sc_fxval_trace : public vcd_trace { public: vcd_sc_fxval_trace( const sc_dt::sc_fxval& object_, const std::string& name_, const std::string& vcd_name_ ); void write( FILE* f ); bool changed(); protected: const sc_dt::sc_fxval& object; sc_dt::sc_fxval old_value; }; vcd_sc_fxval_trace::vcd_sc_fxval_trace( const sc_dt::sc_fxval& object_, const std::string& name_, const std::string& vcd_name_ ) : vcd_trace( name_, vcd_name_ ), object( object_ ), old_value( object_ ) { vcd_var_type = vcd_trace_file::VCD_REAL; bit_width = 1; } bool vcd_sc_fxval_trace::changed() { return object != old_value; } void vcd_sc_fxval_trace::write( FILE* f ) { std::fprintf( f, "r%.16g %s", object.to_double(), vcd_name.c_str() ); old_value = object; } /*****************************************************************************/ class vcd_sc_fxval_fast_trace : public vcd_trace { public: vcd_sc_fxval_fast_trace( const sc_dt::sc_fxval_fast& object_, const std::string& name_, const std::string& vcd_name_ ); void write( FILE* f ); bool changed(); protected: const sc_dt::sc_fxval_fast& object; sc_dt::sc_fxval_fast old_value; }; vcd_sc_fxval_fast_trace::vcd_sc_fxval_fast_trace( const sc_dt::sc_fxval_fast& object_, const std::string& name_, const std::string& vcd_name_ ) : vcd_trace( name_, vcd_name_ ), object( object_ ), old_value( object_ ) { vcd_var_type = vcd_trace_file::VCD_REAL; bit_width = 1; } bool vcd_sc_fxval_fast_trace::changed() { return object != old_value; } void vcd_sc_fxval_fast_trace::write( FILE* f ) { std::fprintf( f, "r%.16g %s", object.to_double(), vcd_name.c_str() ); old_value = object; } /*****************************************************************************/ class vcd_sc_fxnum_trace : public vcd_trace { public: vcd_sc_fxnum_trace( const sc_dt::sc_fxnum& object_, const std::string& name_, const std::string& vcd_name_ ); void write( FILE* f ); bool changed(); void set_width(); protected: const sc_dt::sc_fxnum& object; sc_dt::sc_fxnum old_value; }; vcd_sc_fxnum_trace::vcd_sc_fxnum_trace( const sc_dt::sc_fxnum& object_, const std::string& name_, const std::string& vcd_name_ ) : vcd_trace( name_, vcd_name_ ), object( object_ ), old_value( object_.m_params.type_params(), object_.m_params.enc(), object_.m_params.cast_switch(), 0 ) { old_value = object; } bool vcd_sc_fxnum_trace::changed() { return object != old_value; } void vcd_sc_fxnum_trace::write( FILE* f ) { static std::vector compdata(1024), rawdata(1024); typedef std::vector::size_type size_t; if ( compdata.size() <= static_cast(object.wl()) ) { // include trailing \0 size_t sz = ( static_cast(object.wl()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( compdata ); // resize without copying values std::vector( sz ).swap( rawdata ); } char *rawdata_ptr = &rawdata[0]; for(int bitindex = object.wl() - 1; bitindex >= 0; -- bitindex ) { *rawdata_ptr ++ = "01"[object[bitindex]]; } *rawdata_ptr = '\0'; compose_data_line( &rawdata[0], &compdata[0] ); std::fputs( &compdata[0], f ); old_value = object; } void vcd_sc_fxnum_trace::set_width() { bit_width = object.wl(); } /*****************************************************************************/ class vcd_sc_fxnum_fast_trace : public vcd_trace { public: vcd_sc_fxnum_fast_trace( const sc_dt::sc_fxnum_fast& object_, const std::string& name_, const std::string& vcd_name_ ); void write( FILE* f ); bool changed(); void set_width(); protected: const sc_dt::sc_fxnum_fast& object; sc_dt::sc_fxnum_fast old_value; }; vcd_sc_fxnum_fast_trace::vcd_sc_fxnum_fast_trace( const sc_dt::sc_fxnum_fast& object_, const std::string& name_, const std::string& vcd_name_ ) : vcd_trace( name_, vcd_name_ ), object( object_ ), old_value( object_.m_params.type_params(), object_.m_params.enc(), object_.m_params.cast_switch(), 0 ) { old_value = object; } bool vcd_sc_fxnum_fast_trace::changed() { return object != old_value; } void vcd_sc_fxnum_fast_trace::write( FILE* f ) { static std::vector compdata(1024), rawdata(1024); typedef std::vector::size_type size_t; if ( compdata.size() <= static_cast(object.wl()) ) { // include trailing \0 size_t sz = ( static_cast(object.wl()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( compdata ); // resize without copying values std::vector( sz ).swap( rawdata ); } char *rawdata_ptr = &rawdata[0]; for(int bitindex = object.wl() - 1; bitindex >= 0; -- bitindex ) { *rawdata_ptr ++ = "01"[object[bitindex]]; } *rawdata_ptr = '\0'; compose_data_line( &rawdata[0], &compdata[0] ); std::fputs( &compdata[0], f ); old_value = object; } void vcd_sc_fxnum_fast_trace::set_width() { bit_width = object.wl(); } /*****************************************************************************/ class vcd_unsigned_int_trace : public vcd_trace { public: vcd_unsigned_int_trace(const unsigned& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned& object; unsigned old_value; unsigned mask; }; vcd_unsigned_int_trace::vcd_unsigned_int_trace( const unsigned& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value( object_ ), mask(~0U) { bit_width = width_; if (bit_width < 32) mask = ~(~0U << bit_width); } bool vcd_unsigned_int_trace::changed() { return object != old_value; } void vcd_unsigned_int_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++){ rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_unsigned_short_trace : public vcd_trace { public: vcd_unsigned_short_trace(const unsigned short& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned short& object; unsigned short old_value; unsigned short mask; }; vcd_unsigned_short_trace::vcd_unsigned_short_trace( const unsigned short& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), mask(static_cast(~0U)) { bit_width = width_; if (bit_width < 16) mask = static_cast(~(~0U << bit_width)); } bool vcd_unsigned_short_trace::changed() { return object != old_value; } void vcd_unsigned_short_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++){ rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_unsigned_char_trace : public vcd_trace { public: vcd_unsigned_char_trace(const unsigned char& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned char& object; unsigned char old_value; unsigned char mask; }; vcd_unsigned_char_trace::vcd_unsigned_char_trace( const unsigned char& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), mask(static_cast(~0U)) { bit_width = width_; if (bit_width < 8) mask = static_cast(~(~0U << bit_width)); } bool vcd_unsigned_char_trace::changed() { return object != old_value; } void vcd_unsigned_char_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++){ rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_unsigned_long_trace : public vcd_trace { public: vcd_unsigned_long_trace(const unsigned long& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned long& object; unsigned long old_value; unsigned long mask; }; vcd_unsigned_long_trace::vcd_unsigned_long_trace( const unsigned long& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), mask(~0UL) { bit_width = width_; if ( bit_width < static_cast(sizeof(unsigned long)*8) ) mask = ~(~0UL << bit_width); } bool vcd_unsigned_long_trace::changed() { return object != old_value; } void vcd_unsigned_long_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++){ rawdata[bitindex] = 'x'; } } else { unsigned long bit_mask = 1ul << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_signed_int_trace : public vcd_trace { public: vcd_signed_int_trace(const int& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const int& object; int old_value; const unsigned rem_bits; }; vcd_signed_int_trace::vcd_signed_int_trace(const signed& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; } bool vcd_signed_int_trace::changed() { return object != old_value; } void vcd_signed_int_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_signed_short_trace : public vcd_trace { public: vcd_signed_short_trace(const short& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const short& object; short old_value; const unsigned rem_bits; }; vcd_signed_short_trace::vcd_signed_short_trace( const short& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; } bool vcd_signed_short_trace::changed() { return object != old_value; } void vcd_signed_short_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_signed_char_trace : public vcd_trace { public: vcd_signed_char_trace(const char& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const char& object; char old_value; const unsigned rem_bits; }; vcd_signed_char_trace::vcd_signed_char_trace(const char& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; } bool vcd_signed_char_trace::changed() { return object != old_value; } void vcd_signed_char_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_int64_trace : public vcd_trace { public: vcd_int64_trace(const sc_dt::int64& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const sc_dt::int64& object; sc_dt::int64 old_value; const unsigned rem_bits; }; vcd_int64_trace::vcd_int64_trace(const sc_dt::int64& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), rem_bits(64 - width_) { bit_width = width_; } bool vcd_int64_trace::changed() { return object != old_value; } void vcd_int64_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { sc_dt::uint64 bit_mask = 1; bit_mask = bit_mask << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_uint64_trace : public vcd_trace { public: vcd_uint64_trace(const sc_dt::uint64& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const sc_dt::uint64& object; sc_dt::uint64 old_value; sc_dt::uint64 mask; }; vcd_uint64_trace::vcd_uint64_trace( const sc_dt::uint64& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), mask((sc_dt::uint64)-1) { bit_width = width_; if ( bit_width < 64 ) mask = ~(mask << bit_width); } bool vcd_uint64_trace::changed() { return object != old_value; } void vcd_uint64_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { sc_dt::uint64 bit_mask = 1; bit_mask = bit_mask << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_sc_time_trace : public vcd_uint64_trace { public: vcd_sc_time_trace(const sc_time& object_, const std::string& name_, const std::string& vcd_name_); bool changed(); const sc_time& object; sc_dt::uint64 shadow_object; // trace raw value internally }; vcd_sc_time_trace::vcd_sc_time_trace( const sc_time& object_, const std::string& name_, const std::string& vcd_name_ ) // initialize shadow_object before passing its reference to base class : vcd_uint64_trace( (shadow_object = object_.value()), name_, vcd_name_, 64 ) , object(object_) { vcd_var_type = vcd_trace_file::VCD_TIME; } bool vcd_sc_time_trace::changed() { shadow_object = object.value(); return vcd_uint64_trace::changed(); } /*****************************************************************************/ class vcd_signed_long_trace : public vcd_trace { public: vcd_signed_long_trace(const long& object_, const std::string& name_, const std::string& vcd_name_, int width_); void write(FILE* f); bool changed(); protected: const long& object; long old_value; const unsigned rem_bits; }; vcd_signed_long_trace::vcd_signed_long_trace(const long& object_, const std::string& name_, const std::string& vcd_name_, int width_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), rem_bits(std::numeric_limits::digits - width_) { bit_width = width_; } bool vcd_signed_long_trace::changed() { return object != old_value; } void vcd_signed_long_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { unsigned long bit_mask = 1ul << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /*****************************************************************************/ class vcd_float_trace : public vcd_trace { public: vcd_float_trace(const float& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); protected: const float& object; float old_value; }; vcd_float_trace::vcd_float_trace(const float& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_) { vcd_var_type = vcd_trace_file::VCD_REAL; bit_width = 1; old_value = object; } bool vcd_float_trace::changed() { return object != old_value; } void vcd_float_trace::write(FILE* f) { std::fprintf(f, "r%.16g %s", object, vcd_name.c_str()); old_value = object; } /*****************************************************************************/ class vcd_double_trace : public vcd_trace { public: vcd_double_trace(const double& object_, const std::string& name_, const std::string& vcd_name_); void write(FILE* f); bool changed(); protected: const double& object; double old_value; }; vcd_double_trace::vcd_double_trace(const double& object_, const std::string& name_, const std::string& vcd_name_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_) { vcd_var_type = vcd_trace_file::VCD_REAL; bit_width = 1; } bool vcd_double_trace::changed() { return object != old_value; } void vcd_double_trace::write(FILE* f) { std::fprintf(f, "r%.16g %s", object, vcd_name.c_str()); old_value = object; } /*****************************************************************************/ class vcd_enum_trace : public vcd_trace { public: vcd_enum_trace(const unsigned& object_, const std::string& name_, const std::string& vcd_name_, const char** enum_literals); void write(FILE* f); bool changed(); protected: const unsigned& object; unsigned old_value; unsigned mask; const char** literals; unsigned nliterals; }; vcd_enum_trace::vcd_enum_trace(const unsigned& object_, const std::string& name_, const std::string& vcd_name_, const char** enum_literals_) : vcd_trace(name_, vcd_name_), object(object_), old_value(object_), mask(~0U), literals(enum_literals_), nliterals(0) { // find number of bits required to represent enumeration literal - counting loop for (nliterals = 0; enum_literals_[nliterals]; nliterals++) continue; // Figure out number of bits required to represent the number of literals bit_width = 0; unsigned shifted_maxindex = nliterals-1; while(shifted_maxindex != 0){ shifted_maxindex >>= 1; bit_width++; } // Set the mask if (bit_width < 32) { mask = ~(~0U << bit_width); } else { mask = ~0U; } } bool vcd_enum_trace::changed() { return object != old_value; } void vcd_enum_trace::write(FILE* f) { char rawdata[1000]; char compdata[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = 'x'; } } else { unsigned long bit_mask = 1ul << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { rawdata[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } rawdata[bitindex] = '\0'; compose_data_line(rawdata, compdata); std::fputs(compdata, f); old_value = object; } /***************************************************************************** VCD Scopes support *****************************************************************************/ struct vcd_scope { void add_trace(vcd_trace *trace, bool with_scopes); void print(FILE *fp, const char *scope_name = "SystemC"); ~vcd_scope(); private: void add_trace_rec(std::stringstream &ss, const std::string &cur_name, vcd_trace *trace); std::vector > m_traces; std::map m_scopes; }; vcd_scope::~vcd_scope() { for (std::map::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) delete (*it).second; } void vcd_scope::add_trace(vcd_trace *trace, bool with_scopes) { std::string name_copy = trace->name; remove_vcd_name_problems(trace, name_copy); if (with_scopes) { std::stringstream ss(name_copy); std::string first_token; std::getline(ss, first_token, '.'); add_trace_rec(ss, first_token, trace); } else { m_traces.push_back(std::make_pair(name_copy, trace)); } } void vcd_scope::add_trace_rec(std::stringstream &ss, const std::string &cur_name, vcd_trace *trace) { std::string next_token; if (std::getline(ss, next_token, '.')) { vcd_scope*& cur_scope = m_scopes[cur_name]; if (!cur_scope) cur_scope = new vcd_scope; cur_scope->add_trace_rec(ss, next_token, trace); } else { m_traces.push_back(std::make_pair(cur_name, trace)); } } void vcd_scope::print(FILE *fp, const char *scope_name) { fprintf(fp,"$scope module %s $end\n", scope_name); for (std::vector >::iterator it = m_traces.begin(); it != m_traces.end(); ++it) { it->second->set_width(); it->second->print_variable_declaration_line(fp, it->first.c_str()); } for (std::map::iterator it = m_scopes.begin(); it != m_scopes.end(); ++it) it->second->print(fp,it->first.c_str()); fprintf(fp,"$upscope $end\n"); } #ifdef SC_DISABLE_VCD_SCOPES # define VCD_SCOPES_DEFAULT_ false #else # define VCD_SCOPES_DEFAULT_ true #endif void vcd_print_scopes(FILE *fp, std::vector& traces) { vcd_scope top_scope; const char* with_scopes_p = std::getenv("SC_VCD_SCOPES"); sc_string_view with_scopes_s = (with_scopes_p) ? with_scopes_p : ""; bool with_scopes = VCD_SCOPES_DEFAULT_; if (with_scopes_s == "DISABLE") with_scopes = false; if (with_scopes_s == "ENABLE") with_scopes = true; for (std::vector::iterator it = traces.begin(); it != traces.end(); ++it) top_scope.add_trace(*it, with_scopes); top_scope.print(fp); } /***************************************************************************** vcd_trace_file functions *****************************************************************************/ vcd_trace_file::vcd_trace_file(const char *name) : sc_trace_file_base( name, "vcd" ) , vcd_name_index(0) , previous_time_units_low(0) , previous_time_units_high(0) , traces() {} void vcd_trace_file::do_initialize() { //date: std::fprintf(fp, "$date\n %s\n$end\n\n", localtime_string().c_str() ); //version: std::fprintf(fp, "$version\n %s\n$end\n\n", sc_version()); //timescale: std::fprintf(fp,"$timescale\n %s\n$end\n\n", fs_unit_to_str(trace_unit_fs).c_str()); vcd_print_scopes(fp, traces); std::fputs("$enddefinitions $end\n\n", fp); timestamp_in_trace_units(previous_time_units_high, previous_time_units_low); std::stringstream ss; ss << "All initial values are dumped below at time " << sc_time_stamp().to_seconds() <<" sec = "; if(has_low_units()) ss << previous_time_units_high << std::setfill('0') << std::setw(low_units_len()) << previous_time_units_low; else ss << previous_time_units_high; ss << " timescale units."; write_comment(ss.str()); std::fputs("$dumpvars\n",fp); for (int i = 0; i < (int)traces.size(); i++) { traces[i]->write(fp); std::fputc('\n', fp); } std::fputs("$end\n\n", fp); } #if SC_TRACING_PHASE_CALLBACKS_ void vcd_trace_file::trace( sc_trace_file* ) const { SC_REPORT_ERROR( sc_core::SC_ID_INTERNAL_ERROR_ , "invalid call to vcd_trace_file::trace(sc_trace_file*)" ); } #endif // SC_TRACING_PHASE_CALLBACKS_ // ---------------------------------------------------------------------------- #define DEFN_TRACE_METHOD(tp) \ void \ vcd_trace_file::trace(const tp& object_, const std::string& name_) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new vcd_ ## tp ## _trace( extract_ref(object_), \ name_, \ obtain_name() ) ); \ } DEFN_TRACE_METHOD(sc_event) DEFN_TRACE_METHOD(sc_time) DEFN_TRACE_METHOD(bool) DEFN_TRACE_METHOD(float) DEFN_TRACE_METHOD(double) #undef DEFN_TRACE_METHOD #define DEFN_TRACE_METHOD(tp) \ void \ vcd_trace_file::trace(const sc_dt::tp& object_, const std::string& name_) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new vcd_ ## tp ## _trace( object_, \ name_, \ obtain_name() ) ); \ } DEFN_TRACE_METHOD(sc_bit) DEFN_TRACE_METHOD(sc_logic) DEFN_TRACE_METHOD(sc_signed) DEFN_TRACE_METHOD(sc_unsigned) DEFN_TRACE_METHOD(sc_int_base) DEFN_TRACE_METHOD(sc_uint_base) DEFN_TRACE_METHOD(sc_fxval) DEFN_TRACE_METHOD(sc_fxval_fast) DEFN_TRACE_METHOD(sc_fxnum) DEFN_TRACE_METHOD(sc_fxnum_fast) #undef DEFN_TRACE_METHOD #define DEFN_TRACE_METHOD_SIGNED(tp) \ void \ vcd_trace_file::trace( const tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new vcd_signed_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } #define DEFN_TRACE_METHOD_UNSIGNED(tp) \ void \ vcd_trace_file::trace( const unsigned tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new vcd_unsigned_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } DEFN_TRACE_METHOD_SIGNED(char) DEFN_TRACE_METHOD_SIGNED(short) DEFN_TRACE_METHOD_SIGNED(int) DEFN_TRACE_METHOD_SIGNED(long) DEFN_TRACE_METHOD_UNSIGNED(char) DEFN_TRACE_METHOD_UNSIGNED(short) DEFN_TRACE_METHOD_UNSIGNED(int) DEFN_TRACE_METHOD_UNSIGNED(long) #undef DEFN_TRACE_METHOD_SIGNED #undef DEFN_TRACE_METHOD_UNSIGNED #define DEFN_TRACE_METHOD_LONG_LONG(tp) \ void \ vcd_trace_file::trace( const sc_dt::tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new vcd_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } DEFN_TRACE_METHOD_LONG_LONG(int64) DEFN_TRACE_METHOD_LONG_LONG(uint64) #undef DEFN_TRACE_METHOD_LONG_LONG void vcd_trace_file::trace( const unsigned& object_, const std::string& name_, const char** enum_literals_ ) { if( add_trace_check(name_) ) traces.push_back( new vcd_enum_trace( object_, name_, obtain_name(), enum_literals_ ) ); } void vcd_trace_file::write_comment(const std::string& comment) { if(!fp) open_fp(); //no newline in comments allowed, as some viewers may crash std::fputs("$comment\n", fp); std::fputs(comment.c_str(), fp); std::fputs("\n$end\n\n", fp); } void vcd_trace_file::cycle(bool this_is_a_delta_cycle) { // Trace delta cycles only when enabled if (!delta_cycles() && this_is_a_delta_cycle) return; // Check for initialization if( initialize() ) return; unit_type now_units_high, now_units_low; bool time_advanced = get_time_stamp(now_units_high, now_units_low); if (!has_low_units() && (now_units_low != 0)) { std::stringstream ss; ss << "\n\tCurrent kernel time is " << sc_time_stamp(); ss << "\n\tVCD trace time unit is " << fs_unit_to_str(trace_unit_fs); ss << "\n\tUse 'tracefile->set_time_unit(double, sc_time_unit);' to increase the time resolution."; SC_REPORT_WARNING( SC_ID_TRACING_VCD_TIME_RESOLUTION_, ss.str().c_str() ); } if (delta_cycles()) { if(this_is_a_delta_cycle) { static bool warned = false; if(!warned){ SC_REPORT_INFO( SC_ID_TRACING_VCD_DELTA_CYCLE_ , fs_unit_to_str(trace_unit_fs).c_str() ); warned = true; } if (sc_delta_count_at_current_time() == 0) { if(!time_advanced) { std::stringstream ss; ss <<"\n\tThis can occur when delta cycle tracing is activated." <<"\n\tSome delta cycles at " << sc_time_stamp() << " are not shown in vcd." <<"\n\tUse 'tracefile->set_time_unit(double, sc_time_unit);' to increase the time resolution."; SC_REPORT_WARNING( SC_ID_TRACING_REVERSED_TIME_, ss.str().c_str() ); return; } } } if (!this_is_a_delta_cycle) { if (time_advanced) { previous_time_units_high = now_units_high; previous_time_units_low = now_units_low; } // Value updates can't happen during timed notification // so it is safe to skip printing return; } } // Now do the actual printing bool time_printed = false; vcd_trace* const* const l_traces = &traces[0]; for (int i = 0; i < (int)traces.size(); i++) { vcd_trace* t = l_traces[i]; if(t->changed()) { if(!time_printed){ print_time_stamp(now_units_high, now_units_low); time_printed = true; } // Write the variable t->write(fp); std::fputc('\n', fp); } } // Put another newline after all values are printed if(time_printed) std::fputc('\n', fp); } bool vcd_trace_file::get_time_stamp(sc_trace_file_base::unit_type &now_units_high, sc_trace_file_base::unit_type &now_units_low) const { timestamp_in_trace_units(now_units_high, now_units_low); return ( (now_units_low > previous_time_units_low && now_units_high == previous_time_units_high) || now_units_high > previous_time_units_high); } void vcd_trace_file::print_time_stamp(sc_trace_file_base::unit_type now_units_high, sc_trace_file_base::unit_type now_units_low) const { std::stringstream ss; if(has_low_units()) ss << "#" << now_units_high << std::setfill('0') << std::setw(low_units_len()) << now_units_low; else ss << "#" << now_units_high; fputs(ss.str().c_str(), fp); fputc('\n', fp); } // Create a VCD name for a variable std::string vcd_trace_file::obtain_name() { const char first_type_used = 'a'; const int used_types_count = 'z' - 'a' + 1; int result; result = vcd_name_index; char char6 = static_cast(vcd_name_index % used_types_count); result = result / used_types_count; char char5 = static_cast(result % used_types_count); result = result / used_types_count; char char4 = static_cast(result % used_types_count); result = result / used_types_count; char char3 = static_cast(result % used_types_count); result = result / used_types_count; char char2 = static_cast(result % used_types_count); char buf[20]; std::sprintf(buf, "%c%c%c%c%c", char2 + first_type_used, char3 + first_type_used, char4 + first_type_used, char5 + first_type_used, char6 + first_type_used); vcd_name_index++; return std::string(buf); } vcd_trace_file::~vcd_trace_file() { unit_type now_units_high, now_units_low; if (is_initialized() && get_time_stamp(now_units_high,now_units_low)) { print_time_stamp(now_units_high, now_units_low); } for( int i = 0; i < (int)traces.size(); i++ ) { vcd_trace* t = traces[i]; delete t; } } // Functions specific to VCD tracing static char map_sc_logic_state_to_vcd_state(char in_char) { char out_char; switch(in_char){ case 'U': case 'X': case 'W': case 'D': out_char = 'x'; break; case '0': case 'L': out_char = '0'; break; case '1': case 'H': out_char = '1'; break; case 'Z': out_char = 'z'; break; default: out_char = '?'; } return out_char; } static void remove_vcd_name_problems(vcd_trace const* vcd, std::string& name) { static bool warned = false; bool braces_removed = false; for (unsigned int i = 0; i< name.length(); i++) { if (name[i] == '[') { name[i] = '('; braces_removed = true; } else if (name[i] == ']') { name[i] = ')'; braces_removed = true; } } if(braces_removed && !warned){ std::stringstream ss; ss << vcd->name << ":\n" "\tTraced objects found with name containing [], which may be\n" "\tinterpreted by the waveform viewer in unexpected ways.\n" "\tSo the [] is automatically replaced by ()."; SC_REPORT_WARNING( SC_ID_TRACING_OBJECT_NAME_FILTERED_ , ss.str().c_str() ); } } // ---------------------------------------------------------------------------- SC_API sc_trace_file* sc_create_vcd_trace_file(const char * name) { sc_trace_file * tf = new vcd_trace_file(name); return tf; } SC_API void sc_close_vcd_trace_file( sc_trace_file* tf ) { vcd_trace_file* vcd_tf = static_cast(tf); delete vcd_tf; } } // namespace sc_core systemc-2.3.4/src/sysc/tracing/sc_trace_file_base.h0000644000175000017500000001310214342422106022206 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_trace_file_base.h - Shared internal tracing implementation Original Author: Philipp A. Hartmann, OFFIS, 2013-11-15 CHANGE LOG AT END OF FILE *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #ifndef SC_TRACE_FILE_BASE_H_INCLUDED_ #define SC_TRACE_FILE_BASE_H_INCLUDED_ #include // use callback-based tracing implementation #if defined( SC_ENABLE_SIMULATION_PHASE_CALLBACKS_TRACING ) # define SC_TRACING_PHASE_CALLBACKS_ 1 # include "sysc/kernel/sc_object.h" #else # define SC_TRACING_PHASE_CALLBACKS_ 0 #endif #include "sysc/tracing/sc_trace.h" #include "sysc/tracing/sc_tracing_ids.h" #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::string #endif namespace sc_core { // shared implementation of trace files class SC_API sc_trace_file_base : public sc_trace_file #if SC_TRACING_PHASE_CALLBACKS_ , private sc_object // to be used as callback target #endif { public: typedef sc_time::value_type unit_type; const char* filename() const { return filename_.c_str(); } bool delta_cycles() const { return trace_delta_cycles_; } // Also trace transitions between delta cycles if flag is true. virtual void delta_cycles(bool flag); // set a user-define timescale unit for the trace file virtual void set_time_unit( double v, sc_time_unit tu); protected: sc_trace_file_base( const char* name, const char* extension ); // returns true, if trace file is already initialized bool is_initialized() const; // returns true, iff initialization has been performed in this call bool initialize(); // ensure that file has been opened (needed for early write_comment()) void open_fp(); // perform format specific initialization virtual void do_initialize() = 0; // returns true, if new trace objects can still be added // (i.e. trace file is not yet initialized) bool add_trace_check( const std::string& name ) const; // tracefile time unit < kernel unit, extra units will be placed in low part bool has_low_units() const; // number of decimal digits in low units int low_units_len() const; // get current kernel time in trace time units void timestamp_in_trace_units(unit_type &high, unit_type &low) const; // Flush results and close file. virtual ~sc_trace_file_base(); static sc_time::value_type unit_to_fs(sc_time_unit tu); static std::string fs_unit_to_str(sc_trace_file_base::unit_type tu); #if SC_TRACING_PHASE_CALLBACKS_ private: virtual void simulation_phase_callback(); #endif // SC_TRACING_PHASE_CALLBACKS_ protected: FILE* fp; // pointer to the trace file unit_type trace_unit_fs; // tracefile timescale unit in femtoseconds unit_type kernel_unit_fs; // kernel timescale unit in femtoseconds bool timescale_set_by_user; // = true means set by user private: std::string filename_; // name of the file (for reporting) bool initialized_; // tracing started? bool trace_delta_cycles_; // also trace delta transitions? static bool tracing_initialized_; // shared setup of tracing implementation private: // disabled sc_trace_file_base( const sc_trace_file_base& ) /* = delete */; sc_trace_file_base& operator=( const sc_trace_file_base& ) /* = delete */; }; // class sc_trace_file_base // ----------------------------------------------------------------------- // obtain formatted time string SC_API std::string localtime_string(); } // namespace sc_core #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #endif // SC_TRACE_FILE_BASE_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/tracing/sc_wif_trace.cpp0000644000175000017500000014435014342422106021427 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_wif_trace.cpp - Implementation of WIF tracing. Original Author - Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affliation, date and changes you are making here. Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc. Description of Modification: - Replaced 'width' of sc_(u)int with their 'bitwidth()'. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ /***************************************************************************** Instead of creating the binary WIF format, we create the ASCII WIF format which can be converted to the binary format using a2wif (utility that comes with VSS from Synopsys). This way, a user who does not have Synopsys VSS can still create WIF files, but they can only be viewed by users who have VSS. *****************************************************************************/ #include #include #include #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_ver.h" #include "sysc/datatypes/bit/sc_bit.h" #include "sysc/datatypes/bit/sc_logic.h" #include "sysc/datatypes/bit/sc_lv_base.h" #include "sysc/datatypes/int/sc_signed.h" #include "sysc/datatypes/int/sc_unsigned.h" #include "sysc/datatypes/int/sc_int_base.h" #include "sysc/datatypes/int/sc_uint_base.h" #include "sysc/datatypes/fx/fx.h" #include "sysc/tracing/sc_wif_trace.h" #include #include #if defined(_MSC_VER) # pragma warning(disable:4309) // truncation of constant value #endif namespace sc_core { // Forward declarations for functions that come later in the file static char map_sc_logic_state_to_wif_state(char in_char); const char* wif_names[wif_trace_file::WIF_LAST] = {"BIT","MVL","real"}; // ---------------------------------------------------------------------------- // CLASS : wif_trace // // Base class for WIF traces. // ---------------------------------------------------------------------------- class wif_trace { public: wif_trace(const std::string& name_, const std::string& wif_name_); // Needs to be pure virtual as has to be defined by the particular // type being traced virtual void write(FILE* f) = 0; virtual void set_width(); // Comparison function needs to be pure virtual too virtual bool changed() = 0; // Got to declare this virtual as this will be overwritten // by one base class virtual void print_variable_declaration_line(FILE* f); virtual ~wif_trace(); const std::string name; // Name of the variable const std::string wif_name; // Name of the variable in WIF file const char* wif_type; // WIF data type int bit_width; }; wif_trace::wif_trace(const std::string& name_, const std::string& wif_name_) : name(name_), wif_name(wif_name_), wif_type(0), bit_width(-1) { /* Intentionally blank */ } void wif_trace::print_variable_declaration_line( FILE* f ) { if( bit_width < 0 ) { std::stringstream ss; ss << "'" << name << "' has < 0 bits"; SC_REPORT_ERROR( SC_ID_TRACING_OBJECT_IGNORED_ , ss.str().c_str() ); return; } std::fprintf( f, "declare %s \"%s\" %s ", wif_name.c_str(), name.c_str(), wif_type ); if( bit_width > 0 ) { std::fprintf( f, "0 %d ", bit_width - 1 ); } std::fprintf( f, "variable ;\n" ); std::fprintf( f, "start_trace %s ;\n", wif_name.c_str() ); } void wif_trace::set_width() { /* Intentionally Blank, should be defined for each type separately */ } wif_trace::~wif_trace() { /* Intentionally Blank */ } // Classes for tracing individual data types /*****************************************************************************/ class wif_uint64_trace: public wif_trace { public: wif_uint64_trace(const sc_dt::uint64& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const sc_dt::uint64& object; sc_dt::uint64 old_value; sc_dt::uint64 mask; }; wif_uint64_trace::wif_uint64_trace(const sc_dt::uint64& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), mask(static_cast(-1)) { bit_width = width_; if (bit_width < static_cast(sizeof(sc_dt::uint64)*BITS_PER_BYTE)) mask = ~(mask << bit_width); wif_type = "BIT"; } bool wif_uint64_trace::changed() { return object != old_value; } void wif_uint64_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else { sc_dt::uint64 bit_mask = 1; bit_mask = bit_mask << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_int64_trace: public wif_trace { public: wif_int64_trace(const sc_dt::int64& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const sc_dt::int64& object; sc_dt::int64 old_value; const unsigned rem_bits; }; wif_int64_trace::wif_int64_trace(const sc_dt::int64& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), rem_bits(64 - width_) { bit_width = width_; wif_type = "BIT"; } bool wif_int64_trace::changed() { return object != old_value; } void wif_int64_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else { sc_dt::uint64 bit_mask = 1; bit_mask = bit_mask << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_bool_trace : public wif_trace { public: wif_bool_trace( const bool& object_, const std::string& name_, const std::string& wif_name_ ); void write( FILE* f ); bool changed(); protected: const bool& object; bool old_value; }; wif_bool_trace::wif_bool_trace( const bool& object_, const std::string& name_, const std::string& wif_name_ ) : wif_trace( name_, wif_name_ ), object( object_ ), old_value( object_ ) { bit_width = 0; wif_type = "BIT"; } bool wif_bool_trace::changed() { return object != old_value; } void wif_bool_trace::write( FILE* f ) { if( object == true ) { std::fprintf( f, "assign %s \'1\' ;\n", wif_name.c_str() ); } else { std::fprintf( f, "assign %s \'0\' ;\n", wif_name.c_str() ); } old_value = object; } //***************************************************************************** class wif_sc_bit_trace : public wif_trace { public: wif_sc_bit_trace(const sc_dt::sc_bit& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); protected: const sc_dt::sc_bit& object; sc_dt::sc_bit old_value; }; wif_sc_bit_trace::wif_sc_bit_trace(const sc_dt::sc_bit& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_) { bit_width = 0; wif_type = "BIT"; } bool wif_sc_bit_trace::changed() { return object != old_value; } void wif_sc_bit_trace::write(FILE* f) { if (object == true) { std::fprintf(f, "assign %s \'1\' ;\n", wif_name.c_str()); } else { std::fprintf(f, "assign %s \'0\' ;\n", wif_name.c_str()); } old_value = object; } /*****************************************************************************/ class wif_sc_logic_trace: public wif_trace { public: wif_sc_logic_trace(const sc_dt::sc_logic& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); protected: const sc_dt::sc_logic& object; sc_dt::sc_logic old_value; }; wif_sc_logic_trace::wif_sc_logic_trace(const sc_dt::sc_logic& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_) { bit_width = 0; wif_type = "MVL"; } bool wif_sc_logic_trace::changed() { return object != old_value; } void wif_sc_logic_trace::write(FILE* f) { char wif_char; std::fprintf(f, "assign %s \'", wif_name.c_str()); wif_char = map_sc_logic_state_to_wif_state(object.to_char()); std::fputc(wif_char, f); std::fprintf(f,"\' ;\n"); old_value = object; } /*****************************************************************************/ class wif_sc_unsigned_trace: public wif_trace { public: wif_sc_unsigned_trace(const sc_dt::sc_unsigned& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_unsigned& object; sc_dt::sc_unsigned old_value; }; wif_sc_unsigned_trace::wif_sc_unsigned_trace(const sc_dt::sc_unsigned& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_.length()) { old_value = object; wif_type = "BIT"; } bool wif_sc_unsigned_trace::changed() { return object != old_value; } void wif_sc_unsigned_trace::write(FILE* f) { static std::vector buf(1024); typedef std::vector::size_type size_t; if ( buf.size() <= static_cast(object.length()) ) { // include trailing \0 size_t sz = ( static_cast(object.length()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( buf ); // resize without copying values } char *buf_ptr = &buf[0]; for(int bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *buf_ptr++ = "01"[object[bitindex].to_bool()]; } *buf_ptr = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), &buf[0]); old_value = object; } void wif_sc_unsigned_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class wif_sc_signed_trace: public wif_trace { public: wif_sc_signed_trace(const sc_dt::sc_signed& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_signed& object; sc_dt::sc_signed old_value; }; wif_sc_signed_trace::wif_sc_signed_trace(const sc_dt::sc_signed& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_.length()) { old_value = object; wif_type = "BIT"; } bool wif_sc_signed_trace::changed() { return object != old_value; } void wif_sc_signed_trace::write(FILE* f) { static std::vector buf(1024); typedef std::vector::size_type size_t; if ( buf.size() <= static_cast(object.length()) ) { // include trailing \0 size_t sz = ( static_cast(object.length()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( buf ); // resize without copying values } char *buf_ptr = &buf[0]; for(int bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *buf_ptr++ = "01"[object[bitindex].to_bool()]; } *buf_ptr = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), &buf[0]); old_value = object; } void wif_sc_signed_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class wif_sc_uint_base_trace: public wif_trace { public: wif_sc_uint_base_trace(const sc_dt::sc_uint_base& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_uint_base& object; sc_dt::sc_uint_base old_value; }; wif_sc_uint_base_trace::wif_sc_uint_base_trace( const sc_dt::sc_uint_base& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_.length()) { old_value = object; wif_type = "BIT"; } bool wif_sc_uint_base_trace::changed() { return object != old_value; } void wif_sc_uint_base_trace::write(FILE* f) { char buf[1000], *buf_ptr = buf; int bitindex; for(bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *buf_ptr++ = "01"[object[bitindex].to_bool()]; } *buf_ptr = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } void wif_sc_uint_base_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class wif_sc_int_base_trace: public wif_trace { public: wif_sc_int_base_trace(const sc_dt::sc_int_base& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); void set_width(); protected: const sc_dt::sc_int_base& object; sc_dt::sc_int_base old_value; }; wif_sc_int_base_trace::wif_sc_int_base_trace(const sc_dt::sc_int_base& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_.length()) { old_value = object; wif_type = "BIT"; } bool wif_sc_int_base_trace::changed() { return object != old_value; } void wif_sc_int_base_trace::write(FILE* f) { char buf[1000], *buf_ptr = buf; int bitindex; for(bitindex = object.length() - 1; bitindex >= 0; --bitindex) { *buf_ptr++ = "01"[object[bitindex].to_bool()]; } *buf_ptr = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } void wif_sc_int_base_trace::set_width() { bit_width = object.length(); } /*****************************************************************************/ class wif_sc_fxval_trace: public wif_trace { public: wif_sc_fxval_trace( const sc_dt::sc_fxval& object_, const std::string& name_, const std::string& wif_name_ ); void write( FILE* f ); bool changed(); protected: const sc_dt::sc_fxval& object; sc_dt::sc_fxval old_value; }; wif_sc_fxval_trace::wif_sc_fxval_trace( const sc_dt::sc_fxval& object_, const std::string& name_, const std::string& wif_name_ ) : wif_trace( name_, wif_name_ ), object( object_ ), old_value( object_ ) { bit_width = 0; wif_type = "real"; } bool wif_sc_fxval_trace::changed() { return object != old_value; } void wif_sc_fxval_trace::write( FILE* f ) { std::fprintf( f, "assign %s %f ; \n", wif_name.c_str(), object.to_double() ); old_value = object; } /*****************************************************************************/ class wif_sc_fxval_fast_trace: public wif_trace { public: wif_sc_fxval_fast_trace( const sc_dt::sc_fxval_fast& object_, const std::string& name_, const std::string& wif_name_ ); void write( FILE* f ); bool changed(); protected: const sc_dt::sc_fxval_fast& object; sc_dt::sc_fxval_fast old_value; }; wif_sc_fxval_fast_trace::wif_sc_fxval_fast_trace( const sc_dt::sc_fxval_fast& object_, const std::string& name_, const std::string& wif_name_ ) : wif_trace(name_, wif_name_), object( object_ ), old_value( object_ ) { bit_width = 0; wif_type = "real"; } bool wif_sc_fxval_fast_trace::changed() { return object != old_value; } void wif_sc_fxval_fast_trace::write( FILE* f ) { std::fprintf( f, "assign %s %f ; \n", wif_name.c_str(), object.to_double() ); old_value = object; } /*****************************************************************************/ class wif_sc_fxnum_trace: public wif_trace { public: wif_sc_fxnum_trace( const sc_dt::sc_fxnum& object_, const std::string& name_, const std::string& wif_name_ ); void write( FILE* f ); bool changed(); void set_width(); protected: const sc_dt::sc_fxnum& object; sc_dt::sc_fxnum old_value; }; wif_sc_fxnum_trace::wif_sc_fxnum_trace( const sc_dt::sc_fxnum& object_, const std::string& name_, const std::string& wif_name_ ) : wif_trace( name_, wif_name_ ), object( object_ ), old_value( object_.m_params.type_params(), object_.m_params.enc(), object_.m_params.cast_switch(), 0 ) { old_value = object; wif_type = "BIT"; } bool wif_sc_fxnum_trace::changed() { return object != old_value; } void wif_sc_fxnum_trace::write( FILE* f ) { static std::vector buf(1024); typedef std::vector::size_type size_t; if ( buf.size() <= static_cast(object.wl()) ) { // include trailing \0 size_t sz = ( static_cast(object.wl()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( buf ); // resize without copying values } char *buf_ptr = &buf[0]; for(int bitindex = object.wl() - 1; bitindex >= 0; --bitindex) { *buf_ptr ++ = "01"[object[bitindex]]; } *buf_ptr = '\0'; std::fprintf( f, "assign %s \"%s\" ;\n", wif_name.c_str(), &buf[0]); old_value = object; } void wif_sc_fxnum_trace::set_width() { bit_width = object.wl(); } /*****************************************************************************/ class wif_sc_fxnum_fast_trace: public wif_trace { public: wif_sc_fxnum_fast_trace( const sc_dt::sc_fxnum_fast& object_, const std::string& name_, const std::string& wif_name_ ); void write( FILE* f ); bool changed(); void set_width(); protected: const sc_dt::sc_fxnum_fast& object; sc_dt::sc_fxnum_fast old_value; }; wif_sc_fxnum_fast_trace::wif_sc_fxnum_fast_trace( const sc_dt::sc_fxnum_fast& object_, const std::string& name_, const std::string& wif_name_ ) : wif_trace( name_, wif_name_ ), object( object_ ), old_value( object_.m_params.type_params(), object_.m_params.enc(), object_.m_params.cast_switch(), 0 ) { old_value = object; wif_type = "BIT"; } bool wif_sc_fxnum_fast_trace::changed() { return object != old_value; } void wif_sc_fxnum_fast_trace::write( FILE* f ) { static std::vector buf(1024); typedef std::vector::size_type size_t; if ( buf.size() <= static_cast(object.wl()) ) { // include trailing \0 size_t sz = ( static_cast(object.wl()) + 4096 ) & (~static_cast(4096-1)); std::vector( sz ).swap( buf ); // resize without copying values } char *buf_ptr = &buf[0]; for(int bitindex = object.wl() - 1; bitindex >= 0; --bitindex) { *buf_ptr ++ = "01"[object[bitindex]]; } *buf_ptr = '\0'; std::fprintf( f, "assign %s \"%s\" ;\n", wif_name.c_str(), &buf[0]); old_value = object; } void wif_sc_fxnum_fast_trace::set_width() { bit_width = object.wl(); } /*****************************************************************************/ class wif_unsigned_int_trace: public wif_trace { public: wif_unsigned_int_trace(const unsigned& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned& object; unsigned old_value; unsigned mask; }; wif_unsigned_int_trace::wif_unsigned_int_trace(const unsigned& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), mask(~0U) { bit_width = width_; if (bit_width < 32) { mask = ~(~0U << bit_width); } wif_type = "BIT"; } bool wif_unsigned_int_trace::changed() { return object != old_value; } void wif_unsigned_int_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = '0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_unsigned_short_trace: public wif_trace { public: wif_unsigned_short_trace(const unsigned short& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned short& object; unsigned short old_value; unsigned short mask; }; wif_unsigned_short_trace::wif_unsigned_short_trace( const unsigned short& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), mask(static_cast(~0U)) { bit_width = width_; if (bit_width < 16) { mask = static_cast(~(~0U << bit_width)); } wif_type = "BIT"; } bool wif_unsigned_short_trace::changed() { return object != old_value; } void wif_unsigned_short_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_unsigned_char_trace: public wif_trace { public: wif_unsigned_char_trace(const unsigned char& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned char& object; unsigned char old_value; unsigned char mask; }; wif_unsigned_char_trace::wif_unsigned_char_trace(const unsigned char& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), mask(static_cast(~0U)) { bit_width = width_; if (bit_width < 8) { mask = static_cast(~(~0U << bit_width)); } wif_type = "BIT"; } bool wif_unsigned_char_trace::changed() { return object != old_value; } void wif_unsigned_char_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_unsigned_long_trace: public wif_trace { public: wif_unsigned_long_trace(const unsigned long& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const unsigned long& object; unsigned long old_value; unsigned long mask; }; wif_unsigned_long_trace::wif_unsigned_long_trace(const unsigned long& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), mask(~0UL) { bit_width = width_; if (bit_width < static_cast(sizeof(unsigned long)*BITS_PER_BYTE)) { mask = ~(~0UL << bit_width); } wif_type = "BIT"; } bool wif_unsigned_long_trace::changed() { return object != old_value; } void wif_unsigned_long_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if ((object & mask) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned long bit_mask = 1ul << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_signed_int_trace: public wif_trace { public: wif_signed_int_trace(const int& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const int& object; int old_value; const unsigned rem_bits; }; wif_signed_int_trace::wif_signed_int_trace(const signed& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; wif_type = "BIT"; } bool wif_signed_int_trace::changed() { return object != old_value; } void wif_signed_int_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_signed_short_trace: public wif_trace { public: wif_signed_short_trace(const short& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const short& object; short old_value; const unsigned rem_bits; }; wif_signed_short_trace::wif_signed_short_trace(const short& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; wif_type = "BIT"; } bool wif_signed_short_trace::changed() { return object != old_value; } void wif_signed_short_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_signed_char_trace: public wif_trace { public: wif_signed_char_trace(const char& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const char& object; char old_value; const unsigned rem_bits; }; wif_signed_char_trace::wif_signed_char_trace(const char& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), rem_bits(32 - width_) { bit_width = width_; wif_type = "BIT"; } bool wif_signed_char_trace::changed() { return object != old_value; } void wif_signed_char_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else{ unsigned bit_mask = 1 << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_signed_long_trace: public wif_trace { public: wif_signed_long_trace(const long& object_, const std::string& name_, const std::string& wif_name_, int width_); void write(FILE* f); bool changed(); protected: const long& object; long old_value; const unsigned rem_bits; }; wif_signed_long_trace::wif_signed_long_trace(const long& object_, const std::string& name_, const std::string& wif_name_, int width_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), rem_bits(std::numeric_limits::digits - width_) { bit_width = width_; wif_type = "BIT"; } bool wif_signed_long_trace::changed() { return object != old_value; } void wif_signed_long_trace::write(FILE* f) { char buf[1000]; int bitindex; // Check for overflow if (((object << rem_bits) >> rem_bits) != object) { for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex]='0'; } } else { unsigned long bit_mask = 1ul << (bit_width-1); for (bitindex = 0; bitindex < bit_width; bitindex++) { buf[bitindex] = (object & bit_mask)? '1' : '0'; bit_mask = bit_mask >> 1; } } buf[bitindex] = '\0'; std::fprintf(f, "assign %s \"%s\" ;\n", wif_name.c_str(), buf); old_value = object; } /*****************************************************************************/ class wif_float_trace: public wif_trace { public: wif_float_trace(const float& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); protected: const float& object; float old_value; }; wif_float_trace::wif_float_trace(const float& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_) { bit_width = 0; wif_type = "real"; } bool wif_float_trace::changed() { return object != old_value; } void wif_float_trace::write(FILE* f) { std::fprintf(f,"assign %s %f ; \n", wif_name.c_str(), object); old_value = object; } /*****************************************************************************/ class wif_double_trace: public wif_trace { public: wif_double_trace(const double& object_, const std::string& name_, const std::string& wif_name_); void write(FILE* f); bool changed(); protected: const double& object; double old_value; }; wif_double_trace::wif_double_trace(const double& object_, const std::string& name_, const std::string& wif_name_) : wif_trace(name_, wif_name_), object(object_), old_value(object_) { bit_width = 0; wif_type = "real"; } bool wif_double_trace::changed() { return object != old_value; } void wif_double_trace::write(FILE* f) { std::fprintf(f,"assign %s %f ; \n", wif_name.c_str(), object); old_value = object; } /*****************************************************************************/ class wif_enum_trace : public wif_trace { public: wif_enum_trace(const unsigned& object_, const std::string& name_, const std::string& wif_name_, const char** enum_literals); void write(FILE* f); bool changed(); // Hides the definition of the same (virtual) function in wif_trace void print_variable_declaration_line(FILE* f); protected: const unsigned& object; unsigned old_value; const char** literals; unsigned nliterals; std::string type_name; ~wif_enum_trace(); }; wif_enum_trace::wif_enum_trace(const unsigned& object_, const std::string& name_, const std::string& wif_name_, const char** enum_literals_) : wif_trace(name_, wif_name_), object(object_), old_value(object_), literals(enum_literals_), nliterals(0), type_name(name_ + "__type__") { // find number of enumeration literals - counting loop for (nliterals = 0; enum_literals_[nliterals]; nliterals++) continue; bit_width = 0; wif_type = type_name.c_str(); } void wif_enum_trace::print_variable_declaration_line(FILE* f) { std::fprintf(f, "type scalar \"%s\" enum ", wif_type); for (unsigned i = 0; i < nliterals; i++) std::fprintf(f, "\"%s\", ", literals[i]); std::fprintf(f, "\"SC_WIF_UNDEF\" ;\n"); std::fprintf(f, "declare %s \"%s\" \"%s\" ", wif_name.c_str(), name.c_str(), wif_type); std::fprintf(f, "variable ;\n"); std::fprintf(f, "start_trace %s ;\n", wif_name.c_str()); } bool wif_enum_trace::changed() { return object != old_value; } void wif_enum_trace::write(FILE* f) { static bool warning_issued = false; const char* lit; if (object >= nliterals) { // Note unsigned value is always greater than 0 if (!warning_issued) { SC_REPORT_WARNING( SC_ID_TRACING_INVALID_ENUM_VALUE_ , name.c_str() ); warning_issued = true; } lit = "SC_WIF_UNDEF"; } else { lit = literals[object]; } std::fprintf( f, "assign %s \"%s\" ;\n", wif_name.c_str(), lit ); old_value = object; } wif_enum_trace::~wif_enum_trace() { /* Intentionally blank */ } template class wif_T_trace : public wif_trace { public: wif_T_trace( const T& object_, const std::string& name_, const std::string& wif_name_, wif_trace_file::wif_enum type_ ) : wif_trace( name_, wif_name_), object( object_ ), old_value( object_ ) { wif_type = wif_names[type_]; } void write( FILE* f ) { std::fprintf( f, "assign %s \"%s\" ;\n", wif_name.c_str(), object.to_string().c_str() ); old_value = object; } bool changed() { return !(object == old_value); } void set_width() { bit_width = object.length(); } protected: const T& object; T old_value; }; typedef wif_T_trace wif_sc_bv_trace; typedef wif_T_trace wif_sc_lv_trace; //*********************************************************************** // wif_trace_file functions //*********************************************************************** wif_trace_file::wif_trace_file(const char * name) : sc_trace_file_base( name, "awif" ) , wif_name_index(0) , previous_units_low(0) , previous_units_high(0) , traces() {} void wif_trace_file::do_initialize() { char buf[2000]; // init std::fprintf(fp, "init ;\n\n"); //timescale: std::sprintf(buf,"%d", static_cast(log10(static_cast(trace_unit_fs)))); std::fprintf(fp,"header %s \"%s\" ;\n\n", buf, sc_version()); std::fprintf(fp, "comment \"ASCII WIF file produced on date: %s\" ;\n" , localtime_string().c_str()); //version: std::fprintf(fp, "comment \"Created by %s\" ;\n", sc_version()); //conversion info std::fprintf(fp, "comment \"Convert this file to binary WIF format using a2wif\" ;\n\n"); // Define the two types we need to represent bool and sc_logic std::fprintf(fp, "type scalar \"BIT\" enum '0', '1' ;\n"); std::fprintf(fp, "type scalar \"MVL\" enum '0', '1', 'X', 'Z', '?' ;\n"); std::fprintf(fp, "\n"); //variable definitions: int i; for (i = 0; i < (int)traces.size(); i++) { wif_trace* t = traces[i]; t->set_width(); //needed for all vectors t->print_variable_declaration_line(fp); } std::stringstream ss; timestamp_in_trace_units(previous_units_high, previous_units_low); ss << "All initial values are dumped below at time " << sc_time_stamp().to_seconds() <<" sec = "; if(has_low_units()) ss << previous_units_high << std::setfill('0') << std::setw(low_units_len()) << previous_units_low; else ss << previous_units_high; ss << " timescale units."; write_comment(ss.str()); for (i = 0; i < (int)traces.size(); i++) { wif_trace* t = traces[i]; t->write(fp); } std::fprintf(fp, "\n"); } #if SC_TRACING_PHASE_CALLBACKS_ void wif_trace_file::trace( sc_trace_file* ) const { SC_REPORT_ERROR( sc_core::SC_ID_INTERNAL_ERROR_ , "invalid call to wif_trace_file::trace(sc_trace_file*)" ); } #endif // SC_TRACING_PHASE_CALLBACKS_ // ---------------------------------------------------------------------------- void wif_trace_file::trace(const sc_event&, const std::string& name) { std::stringstream msg; msg << "sc_events are not supported by WIF trace: " << name; SC_REPORT_ERROR(SC_ID_TRACING_OBJECT_IGNORED_, msg.str().c_str() ); } void wif_trace_file::trace(const sc_time&, const std::string& name) { std::stringstream msg; msg << "sc_time is not supported by WIF trace: " << name; SC_REPORT_ERROR(SC_ID_TRACING_OBJECT_IGNORED_, msg.str().c_str() ); } #define DEFN_TRACE_METHOD(tp) \ void \ wif_trace_file::trace( const tp& object_, const std::string& name_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new wif_ ## tp ## _trace( object_, \ name_, \ obtain_name() ) ); \ } DEFN_TRACE_METHOD(bool) DEFN_TRACE_METHOD(float) DEFN_TRACE_METHOD(double) #undef DEFN_TRACE_METHOD #define DEFN_TRACE_METHOD(tp) \ void \ wif_trace_file::trace(const sc_dt::tp& object_, const std::string& name_) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new wif_ ## tp ## _trace( object_, \ name_, \ obtain_name() ) ); \ } DEFN_TRACE_METHOD(sc_bit) DEFN_TRACE_METHOD(sc_logic) DEFN_TRACE_METHOD(sc_signed) DEFN_TRACE_METHOD(sc_unsigned) DEFN_TRACE_METHOD(sc_int_base) DEFN_TRACE_METHOD(sc_uint_base) DEFN_TRACE_METHOD(sc_fxval) DEFN_TRACE_METHOD(sc_fxval_fast) DEFN_TRACE_METHOD(sc_fxnum) DEFN_TRACE_METHOD(sc_fxnum_fast) #undef DEFN_TRACE_METHOD #define DEFN_TRACE_METHOD_SIGNED(tp) \ void \ wif_trace_file::trace( const tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new wif_signed_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } #define DEFN_TRACE_METHOD_UNSIGNED(tp) \ void \ wif_trace_file::trace( const unsigned tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new wif_unsigned_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } DEFN_TRACE_METHOD_SIGNED(char) DEFN_TRACE_METHOD_SIGNED(short) DEFN_TRACE_METHOD_SIGNED(int) DEFN_TRACE_METHOD_SIGNED(long) DEFN_TRACE_METHOD_UNSIGNED(char) DEFN_TRACE_METHOD_UNSIGNED(short) DEFN_TRACE_METHOD_UNSIGNED(int) DEFN_TRACE_METHOD_UNSIGNED(long) #undef DEFN_TRACE_METHOD_SIGNED #undef DEFN_TRACE_METHOD_UNSIGNED #define DEFN_TRACE_METHOD_LONG_LONG(tp) \ void \ wif_trace_file::trace( const sc_dt::tp& object_, \ const std::string& name_, \ int width_ ) \ { \ if( add_trace_check(name_) ) \ traces.push_back( new wif_ ## tp ## _trace( object_, \ name_, \ obtain_name(), \ width_ ) ); \ } DEFN_TRACE_METHOD_LONG_LONG(int64) DEFN_TRACE_METHOD_LONG_LONG(uint64) #undef DEFN_TRACE_METHOD_LONG_LONG void wif_trace_file::trace( const unsigned& object_, const std::string& name_, const char** enum_literals_ ) { if( add_trace_check(name_) ) traces.push_back( new wif_enum_trace( object_, name_, obtain_name(), enum_literals_ ) ); } void wif_trace_file::trace( const sc_dt::sc_bv_base& object_, const std::string& name_ ) { traceT( object_, name_, WIF_BIT ); } void wif_trace_file::trace( const sc_dt::sc_lv_base& object_, const std::string& name_ ) { traceT( object_, name_, WIF_MVL ); } void wif_trace_file::write_comment(const std::string& comment) { if(!fp) open_fp(); //no newline in comments allowed std::fprintf(fp, "comment \"%s\" ;\n", comment.c_str()); } void wif_trace_file::cycle(bool this_is_a_delta_cycle) { unit_type now_units_high, now_units_low; // Trace delta cycles only when enabled if (!delta_cycles() && this_is_a_delta_cycle) return; // When delta cycles enabled, value changes happen only during delta cycles if (delta_cycles() && !this_is_a_delta_cycle) return; // Check for initialization if( initialize() ) { return; }; timestamp_in_trace_units(now_units_high, now_units_low); unit_type delta_units_high, delta_units_low; bool time_advanced = true; if (now_units_low < previous_units_low) { unit_type max_low_units = kernel_unit_fs / trace_unit_fs; delta_units_low = max_low_units - previous_units_low + now_units_low; if (now_units_high <= previous_units_high) time_advanced = false; delta_units_high = now_units_high - 1 - previous_units_high; } else { delta_units_low = now_units_low - previous_units_low; if (now_units_high < previous_units_high || ((now_units_high == previous_units_high) && delta_units_low == 0) ) time_advanced = false; delta_units_high = now_units_high - previous_units_high; } if (!time_advanced) { std::stringstream ss; ss <<"\n\tThis can occur when delta cycle tracing is activated." <<"\n\tSome delta cycles at " << sc_time_stamp() << " are not shown in trace file." <<"\n\tUse 'tracefile->set_time_unit(double, sc_time_unit);' to increase the time resolution."; SC_REPORT_WARNING( SC_ID_TRACING_REVERSED_TIME_, ss.str().c_str() ); return; } bool time_printed = false; wif_trace* const* const l_traces = &traces[0]; for (int i = 0; i < (int)traces.size(); i++) { wif_trace* t = l_traces[i]; if(t->changed()){ if(time_printed == false) { std::stringstream ss; if(has_low_units()) ss << "delta_time " << delta_units_high << std::setfill('0') << std::setw(low_units_len()) << delta_units_low << " ;\n"; else ss << "delta_time " << delta_units_high <<" ;\n"; std::fputs(ss.str().c_str(), fp); time_printed = true; } // Write the variable t->write(fp); } } if(time_printed) { std::fprintf(fp, "\n"); // Put another newline // We update previous_time_units only when we print time because // this field stores the previous time that was printed, not the // previous time this function was called previous_units_high = now_units_high; previous_units_low = now_units_low; } } #if 0 void wif_trace_file::create_wif_name(std::string* ptr_to_str) { obtain_name().swap(*ptr_to_str); } #endif // Create a WIF name for a variable std::string wif_trace_file::obtain_name() { char buf[32]; std::sprintf( buf, "O%d", wif_name_index ++ ); return buf; } wif_trace_file::~wif_trace_file() { for( int i = 0; i < (int)traces.size(); i++ ) { wif_trace* t = traces[i]; delete t; } } // Map sc_logic values to values understandable by WIF static char map_sc_logic_state_to_wif_state(char in_char) { char out_char; switch(in_char){ case 'U': case 'X': case 'W': case 'D': out_char = 'X'; break; case '0': case 'L': out_char = '0'; break; case '1': case 'H': out_char = '1'; break; case 'Z': out_char = 'Z'; break; default: out_char = '?'; } return out_char; } // ---------------------------------------------------------------------------- // Create the trace file SC_API sc_trace_file* sc_create_wif_trace_file(const char * name) { sc_trace_file *tf = new wif_trace_file(name); return tf; } SC_API void sc_close_wif_trace_file( sc_trace_file* tf ) { wif_trace_file* wif_tf = static_cast(tf); delete wif_tf; } } // namespace sc_core systemc-2.3.4/src/sysc/tracing/sc_wif_trace.h0000644000175000017500000001702214342422106021067 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_wif_trace.h - Implementation of WIF tracing. Original Author - Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ /***************************************************************************** Instead of creating the binary WIF format, we create the ASCII WIF format which can be converted to the binary format using a2wif (utility that comes with VSS from Synopsys). This way, a user who does not have Synopsys VSS can still create WIF files, but the files can only be viewed by users who have VSS. *****************************************************************************/ #ifndef SC_WIF_TRACE_H #define SC_WIF_TRACE_H #include #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/tracing/sc_trace_file_base.h" namespace sc_core { class wif_trace; // defined in wif_trace.cc template class wif_T_trace; class wif_trace_file : public sc_trace_file_base { public: enum wif_enum {WIF_BIT=0, WIF_MVL=1, WIF_REAL=2, WIF_LAST}; // Create a wif trace file. // `Name' forms the base of the name to which `.awif' is added. explicit wif_trace_file(const char *name); ~wif_trace_file(); protected: // These are all virtual functions in sc_trace_file and // they need to be defined here. // Trace sc_time, sc_event virtual void trace(const sc_time& object, const std::string& name); virtual void trace(const sc_event& object, const std::string& name); // Trace a boolean object (single bit) void trace(const bool& object, const std::string& name); // Trace a sc_bit object (single bit) void trace(const sc_dt::sc_bit& object, const std::string& name); // Trace a sc_logic object (single bit) void trace(const sc_dt::sc_logic& object, const std::string& name); // Trace an unsigned char with the given width void trace(const unsigned char& object, const std::string& name, int width); // Trace an unsigned short with the given width void trace(const unsigned short& object, const std::string& name, int width); // Trace an unsigned int with the given width void trace(const unsigned int& object, const std::string& name, int width); // Trace an unsigned long with the given width void trace(const unsigned long& object, const std::string& name, int width); // Trace a signed char with the given width void trace(const char& object, const std::string& name, int width); // Trace a signed short with the given width void trace(const short& object, const std::string& name, int width); // Trace a signed int with the given width void trace(const int& object, const std::string& name, int width); // Trace a signed long with the given width void trace(const long& object, const std::string& name, int width); // Trace a signed long long with the given width void trace(const sc_dt::int64& object, const std::string& name, int width); // Trace an usigned long long with the given width void trace(const sc_dt::uint64& object, const std::string& name, int width); // Trace a float void trace(const float& object, const std::string& name); // Trace a double void trace(const double& object, const std::string& name); // Trace sc_unsigned void trace (const sc_dt::sc_unsigned& object, const std::string& name); // Trace sc_signed void trace (const sc_dt::sc_signed& object, const std::string& name); // Trace sc_uint_base void trace (const sc_dt::sc_uint_base& object, const std::string& name); // Trace sc_int_base void trace (const sc_dt::sc_int_base& object, const std::string& name); // Trace sc_fxval void trace( const sc_dt::sc_fxval& object, const std::string& name ); // Trace sc_fxval_fast void trace( const sc_dt::sc_fxval_fast& object, const std::string& name ); // Trace sc_fxnum void trace( const sc_dt::sc_fxnum& object, const std::string& name ); // Trace sc_fxnum_fast void trace( const sc_dt::sc_fxnum_fast& object, const std::string& name ); template void traceT(const T& object, const std::string& name, wif_enum type) { if( add_trace_check(name) ) traces.push_back( new wif_T_trace( object, name , obtain_name(),type ) ); } // Trace sc_bv_base (sc_bv) virtual void trace( const sc_dt::sc_bv_base& object, const std::string& name ); // Trace sc_lv_base (sc_lv) virtual void trace( const sc_dt::sc_lv_base& object, const std::string& name ); // Trace an enumerated object - where possible output the enumeration literals // in the trace file. Enum literals is a null terminated array of null // terminated char* literal strings. void trace(const unsigned& object, const std::string& name, const char** enum_literals); // Output a comment to the trace file void write_comment(const std::string& comment); // Write trace info for cycle. void cycle(bool delta_cycle); private: #if SC_TRACING_PHASE_CALLBACKS_ // avoid hidden overload warnings virtual void trace( sc_trace_file* ) const; #endif // SC_TRACING_PHASE_CALLBACKS_ // Initialize the tracing mechanism virtual void do_initialize(); unsigned wif_name_index; // Number of variables traced unit_type previous_units_low; unit_type previous_units_high; public: // Create wif names for each variable std::string obtain_name(); // Array to store the variables traced std::vector traces; }; } // namespace sc_core #endif // SC_WIF_TRACE_H // Taf! systemc-2.3.4/src/sysc/tracing/sc_tracing_ids.h0000644000175000017500000000673614342422106021424 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_tracing_ids.h -- Report ids for the tracing code. Original Author: Philipp A. Hartmann, OFFIS, 2013-11-17 CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_TRACING_IDS_H #define SC_TRACING_IDS_H #include "sysc/kernel/sc_cmnhdr.h" // ---------------------------------------------------------------------------- // Report ids (tracing) // // Report ids in the range of 700-799. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } #endif SC_DEFINE_MESSAGE( SC_ID_TRACING_FOPEN_FAILED_, 701, "cannot open trace file for writing" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_TIMESCALE_DEFAULT_, 702, "default timescale unit used for tracing" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_TIMESCALE_UNIT_, 703, "tracing timescale unit set" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_VCD_DELTA_CYCLE_, 704, "VCD delta cycle tracing with pseudo timesteps (1 unit)" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_INVALID_TIMESCALE_UNIT_, 705, "invalid tracing timescale unit set" ) /* unused IDs 706-709 */ SC_DEFINE_MESSAGE( SC_ID_TRACING_OBJECT_IGNORED_, 710, "object cannot not be traced" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_OBJECT_NAME_FILTERED_, 711, "traced object name filtered" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_INVALID_ENUM_VALUE_, 712, "traced value of enumerated type undefined" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_VCD_TIME_RESOLUTION_, 713, "current kernel time is not representable in VCD time units" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_REVERSED_TIME_, 714, "tracing cycle with duplicate or reversed time detected" ) SC_DEFINE_MESSAGE( SC_ID_TRACING_CLOSE_EMPTY_FILE_, 715, "trace file closed before any cycles were traced, file not written" ) /* unused IDs 716-719 */ SC_DEFINE_MESSAGE( SC_ID_TRACING_ALREADY_INITIALIZED_, 720, "sc_trace_file already initialized" ) /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ #endif // SC_TRACING_IDS_H // Taf! systemc-2.3.4/src/sysc/tracing/sc_trace.h0000644000175000017500000002477014342422106020232 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_trace.h - Functions for tracing signals and variables. Author: Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #ifndef SC_TRACE_H #define SC_TRACE_H #include #include "sysc/datatypes/int/sc_nbdefs.h" #include "sysc/kernel/sc_time.h" // Some forward declarations namespace sc_dt { class sc_bit; class sc_logic; class sc_bv_base; class sc_lv_base; class sc_signed; class sc_unsigned; class sc_int_base; class sc_uint_base; class sc_fxval; class sc_fxval_fast; class sc_fxnum; class sc_fxnum_fast; } namespace sc_core { class sc_event; class sc_time; template class sc_signal_in_if; // Base class for all kinds of trace files. class SC_API sc_trace_file { friend class sc_simcontext; public: // Constructor sc_trace_file(); // All functions are pure virtual because they need to be defined by the // particular tracing mechanism #define DECL_TRACE_METHOD_A(tp) \ virtual void trace( const tp& object, \ const std::string& name ) = 0; #define DECL_TRACE_METHOD_B(tp) \ virtual void trace( const tp& object, \ const std::string& name, \ int width ) = 0; DECL_TRACE_METHOD_A( sc_event ) DECL_TRACE_METHOD_A( sc_time ) DECL_TRACE_METHOD_A( bool ) DECL_TRACE_METHOD_A( sc_dt::sc_bit ) DECL_TRACE_METHOD_A( sc_dt::sc_logic ) DECL_TRACE_METHOD_B( unsigned char ) DECL_TRACE_METHOD_B( unsigned short ) DECL_TRACE_METHOD_B( unsigned int ) DECL_TRACE_METHOD_B( unsigned long ) DECL_TRACE_METHOD_B( char ) DECL_TRACE_METHOD_B( short ) DECL_TRACE_METHOD_B( int ) DECL_TRACE_METHOD_B( long ) DECL_TRACE_METHOD_B( sc_dt::int64 ) DECL_TRACE_METHOD_B( sc_dt::uint64 ) DECL_TRACE_METHOD_A( float ) DECL_TRACE_METHOD_A( double ) DECL_TRACE_METHOD_A( sc_dt::sc_int_base ) DECL_TRACE_METHOD_A( sc_dt::sc_uint_base ) DECL_TRACE_METHOD_A( sc_dt::sc_signed ) DECL_TRACE_METHOD_A( sc_dt::sc_unsigned ) DECL_TRACE_METHOD_A( sc_dt::sc_fxval ) DECL_TRACE_METHOD_A( sc_dt::sc_fxval_fast ) DECL_TRACE_METHOD_A( sc_dt::sc_fxnum ) DECL_TRACE_METHOD_A( sc_dt::sc_fxnum_fast ) DECL_TRACE_METHOD_A( sc_dt::sc_bv_base ) DECL_TRACE_METHOD_A( sc_dt::sc_lv_base ) #undef DECL_TRACE_METHOD_A #undef DECL_TRACE_METHOD_B // Trace an enumerated object - where possible output the enumeration // literals in the trace file. Enum literals is a null terminated array // of null terminated char* literal strings. virtual void trace( const unsigned int& object, const std::string& name, const char** enum_literals ) = 0; // Output a comment to the trace file virtual void write_comment( const std::string& comment ) = 0; // Set the amount of space before next column // (For most formats this does nothing) virtual void space( int n ); // Also trace transitions between delta cycles if flag is true. virtual void delta_cycles( bool flag ); // Set time unit. virtual void set_time_unit( double v, sc_time_unit tu )=0; protected: // Write trace info for cycle virtual void cycle( bool delta_cycle ) = 0; // Helper for event tracing const sc_dt::uint64& event_trigger_stamp( const sc_event& event ) const; // Flush results and close file virtual ~sc_trace_file() { /* Intentionally blank */ } }; /*****************************************************************************/ // Now comes all the SystemC defined tracing functions. // We define two sc_trace() versions for scalar types; one where the object to // be traced is passed as a reference and the other where a pointer to the // tracing object is passed. #define DECL_TRACE_FUNC_REF_A(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, \ const tp& object, \ const std::string& name ); #define DECL_TRACE_FUNC_PTR_A(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, \ const tp* object, \ const std::string& name ); \ #define DECL_TRACE_FUNC_A(tp) \ DECL_TRACE_FUNC_REF_A(tp) \ DECL_TRACE_FUNC_PTR_A(tp) #define DECL_TRACE_FUNC_REF_B(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp& object, const std::string& name, \ int width = 8 * sizeof( tp ) ); #define DECL_TRACE_FUNC_PTR_B(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp* object, const std::string& name, \ int width = 8 * sizeof( tp ) ); #define DECL_TRACE_FUNC_B(tp) \ DECL_TRACE_FUNC_REF_B(tp) \ DECL_TRACE_FUNC_PTR_B(tp) DECL_TRACE_FUNC_A( sc_event ) DECL_TRACE_FUNC_A( sc_time ) DECL_TRACE_FUNC_A( bool ) DECL_TRACE_FUNC_A( float ) DECL_TRACE_FUNC_A( double ) DECL_TRACE_FUNC_B( unsigned char ) DECL_TRACE_FUNC_B( unsigned short ) DECL_TRACE_FUNC_B( unsigned int ) DECL_TRACE_FUNC_B( unsigned long ) DECL_TRACE_FUNC_B( char ) DECL_TRACE_FUNC_B( short ) DECL_TRACE_FUNC_B( int ) DECL_TRACE_FUNC_B( long ) DECL_TRACE_FUNC_B( sc_dt::int64 ) DECL_TRACE_FUNC_B( sc_dt::uint64 ) DECL_TRACE_FUNC_A( sc_dt::sc_bit ) DECL_TRACE_FUNC_A( sc_dt::sc_logic ) DECL_TRACE_FUNC_A( sc_dt::sc_int_base ) DECL_TRACE_FUNC_A( sc_dt::sc_uint_base ) DECL_TRACE_FUNC_A( sc_dt::sc_signed ) DECL_TRACE_FUNC_A( sc_dt::sc_unsigned ) DECL_TRACE_FUNC_A( sc_dt::sc_bv_base ) DECL_TRACE_FUNC_A( sc_dt::sc_lv_base ) DECL_TRACE_FUNC_A( sc_dt::sc_fxval ) DECL_TRACE_FUNC_A( sc_dt::sc_fxval_fast ) DECL_TRACE_FUNC_A( sc_dt::sc_fxnum ) DECL_TRACE_FUNC_A( sc_dt::sc_fxnum_fast ) #undef DECL_TRACE_FUNC_REF_A #undef DECL_TRACE_FUNC_PTR_A #undef DECL_TRACE_FUNC_A #undef DECL_TRACE_FUNC_REF_B #undef DECL_TRACE_FUNC_PTR_B #undef DECL_TRACE_FUNC_B template inline void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name ) { sc_trace( tf, object.read(), name ); } template< class T > inline void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const char* name ) { sc_trace( tf, object.read(), name ); } // specializations for signals of type char, short, int, long SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ); SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ); SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ); SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ); // 1. non-template function is better than template // 2. more-specialized template is better than less-specialized // 3. no partial specialization for template functions // Trace an enumerated object - where possible output the enumeration literals // in the trace file. Enum literals is a null terminated array of null // terminated char* literal strings. SC_API void sc_trace( sc_trace_file* tf, const unsigned int& object, const std::string& name, const char** enum_literals ); // Dummy function for arbitrary types of value, does nothing extern SC_API void sc_trace( sc_trace_file* tf, const void* object, const std::string& name ); // Turn on/off delta cycle tracing on trace file `tf'. // Default is to turn on delta cycle tracing. inline SC_API void sc_trace_delta_cycles( sc_trace_file* tf, bool on = true ) { if( tf ) tf->delta_cycles( on ); } // Output a comment to the trace file inline SC_API void sc_write_comment( sc_trace_file* tf, const std::string& comment ) { if( tf ) tf->write_comment( comment ); } // Equivalent of std::fprintf for trace files! SC_API void tprintf( sc_trace_file* tf, const char* format, ... ); // ---------------------------------------------------------------------------- // Create VCD file extern SC_API sc_trace_file *sc_create_vcd_trace_file(const char* name); extern SC_API void sc_close_vcd_trace_file( sc_trace_file* tf ); // ---------------------------------------------------------------------------- // Create WIF file extern SC_API sc_trace_file *sc_create_wif_trace_file(const char *name); extern SC_API void sc_close_wif_trace_file( sc_trace_file* tf ); } // namespace sc_core #endif // SC_TRACE_H // Taf systemc-2.3.4/src/sysc/tracing/sc_trace.cpp0000644000175000017500000002025414342422106020556 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_trace.cpp - Functions for tracing signals and variables. Original Author: Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #include #include #include "sysc/tracing/sc_trace.h" #include "sysc/tracing/sc_tracing_ids.h" #include "sysc/communication/sc_signal_ifs.h" #include "sysc/kernel/sc_event.h" #include "sysc/utils/sc_report.h" #include "sysc/utils/sc_utils_ids.h" namespace sc_core { // Trace file common functions. sc_trace_file::sc_trace_file() { /* Intentionally blank */ } void SC_API tprintf(sc_trace_file* tf, const char* format, ...) { static char buffer[4096]; va_list ap; va_start(ap, format); (void) vsprintf(buffer, format, ap); va_end(ap); if (tf) tf->write_comment(buffer); } void sc_trace_file::space(int) { /* Intentionally blank */ } void sc_trace_file::delta_cycles(bool) { /* Intentionally blank */ } const sc_dt::uint64& sc_trace_file::event_trigger_stamp(const sc_event& ev) const { return ev.m_trigger_stamp; } SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ) { if( tf ) { tf->trace( object.read(), name, width ); } } SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ) { if( tf ) { tf->trace( object.read(), name, width ); } } SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ) { if( tf ) { tf->trace( object.read(), name, width ); } } SC_API void sc_trace( sc_trace_file* tf, const sc_signal_in_if& object, const std::string& name, int width ) { if( tf ) { tf->trace( object.read(), name, width ); } } SC_API void sc_trace(sc_trace_file* /* not used */, const void* /* not used */, const std::string& name) { SC_REPORT_WARNING( SC_ID_TRACING_OBJECT_IGNORED_, name.c_str() ); } // ---------------------------------------------------------------------------- #define DEFN_TRACE_FUNC_REF_A(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp& object, const std::string& name ) \ { \ if( tf ) { \ tf->trace( object, name ); \ } \ } #define DEFN_TRACE_FUNC_PTR_A(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp* object, const std::string& name ) \ { \ if( tf ) { \ tf->trace( *object, name ); \ } \ } #define DEFN_TRACE_FUNC_A(tp) \ DEFN_TRACE_FUNC_REF_A(tp) \ DEFN_TRACE_FUNC_PTR_A(tp) #define DEFN_TRACE_FUNC_REF_B(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp& object, const std::string& name, \ int width) \ { \ if( tf ) { \ tf->trace( object, name, width ); \ } \ } #define DEFN_TRACE_FUNC_PTR_B(tp) \ SC_API void \ sc_trace( sc_trace_file* tf, const tp* object, const std::string& name, \ int width) \ { \ if( tf ) { \ tf->trace( *object, name, width ); \ } \ } #define DEFN_TRACE_FUNC_B(tp) \ DEFN_TRACE_FUNC_REF_B(tp) \ DEFN_TRACE_FUNC_PTR_B(tp) DEFN_TRACE_FUNC_A( sc_event ) DEFN_TRACE_FUNC_A( sc_time ) DEFN_TRACE_FUNC_A( bool ) DEFN_TRACE_FUNC_A( float ) DEFN_TRACE_FUNC_A( double ) DEFN_TRACE_FUNC_B( unsigned char ) DEFN_TRACE_FUNC_B( unsigned short ) DEFN_TRACE_FUNC_B( unsigned int ) DEFN_TRACE_FUNC_B( unsigned long ) DEFN_TRACE_FUNC_B( char ) DEFN_TRACE_FUNC_B( short ) DEFN_TRACE_FUNC_B( int ) DEFN_TRACE_FUNC_B( long ) DEFN_TRACE_FUNC_B( sc_dt::int64 ) DEFN_TRACE_FUNC_B( sc_dt::uint64 ) DEFN_TRACE_FUNC_A( sc_dt::sc_bit ) DEFN_TRACE_FUNC_A( sc_dt::sc_logic ) DEFN_TRACE_FUNC_A( sc_dt::sc_int_base ) DEFN_TRACE_FUNC_A( sc_dt::sc_uint_base ) DEFN_TRACE_FUNC_A( sc_dt::sc_signed ) DEFN_TRACE_FUNC_A( sc_dt::sc_unsigned ) DEFN_TRACE_FUNC_A( sc_dt::sc_bv_base ) DEFN_TRACE_FUNC_A( sc_dt::sc_lv_base ) #ifdef SC_INCLUDE_FX DEFN_TRACE_FUNC_A( sc_dt::sc_fxval ) DEFN_TRACE_FUNC_A( sc_dt::sc_fxval_fast ) DEFN_TRACE_FUNC_A( sc_dt::sc_fxnum ) DEFN_TRACE_FUNC_A( sc_dt::sc_fxnum_fast ) #endif // SC_INCLUDE_FX #undef DEFN_TRACE_FUNC_REF_A #undef DEFN_TRACE_FUNC_PTR_A #undef DEFN_TRACE_FUNC_A #undef DEFN_TRACE_FUNC_REF_B #undef DEFN_TRACE_FUNC_PTR_B #undef DEFN_TRACE_FUNC_B SC_API void sc_trace( sc_trace_file* tf, const unsigned int& object, const std::string& name, const char** enum_literals ) { static bool warn_sc_trace_literals=true; if ( warn_sc_trace_literals ) { warn_sc_trace_literals=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, "tracing of enumerated literals is deprecated" ); } if( tf ) tf->trace( object, name, enum_literals ); } } // namespace sc_core // Taf! systemc-2.3.4/src/sysc/tracing/sc_trace_file_base.cpp0000644000175000017500000002502514342422106022550 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_trace_file_base.cpp - Shared internal tracing implementation Original Author: Philipp A. Hartmann, OFFIS, 2013-11-15 CHANGE LOG AT END OF FILE *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #include #include #include "sysc/tracing/sc_trace_file_base.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_simcontext_int.h" #if SC_TRACING_PHASE_CALLBACKS_ # include "sysc/kernel/sc_object_int.h" #endif #ifndef UINT64_C #if defined(_WIN32) && !defined(__MINGW32__) # define UINT64_C(v) v ## ui64 #else # define UINT64_C(v) v ## ULL #endif #endif // UINT64_C namespace sc_core { bool sc_trace_file_base::tracing_initialized_ = false; sc_trace_file_base::sc_trace_file_base( const char* name, const char* extension ) : sc_trace_file() #if SC_TRACING_PHASE_CALLBACKS_ , sc_object( sc_gen_unique_name("$$$$kernel_tracefile$$$$") ) #endif , fp(0) , trace_unit_fs() , kernel_unit_fs() , timescale_set_by_user(false) , filename_() , initialized_(false) , trace_delta_cycles_(false) { if( !name || !*name ) { SC_REPORT_ERROR( SC_ID_TRACING_FOPEN_FAILED_, "no name given" ); return; } else { std::stringstream ss; ss << name << "." << extension; ss.str().swap( filename_ ); } #if SC_TRACING_PHASE_CALLBACKS_ == 1 // remove from hierarchy sc_object::detach(); // register regular (non-delta) callbacks sc_object::register_simulation_phase_callback( SC_BEFORE_TIMESTEP ); #else // explicitly register with simcontext sc_get_curr_simcontext()->add_trace_file( this ); #endif } sc_trace_file_base::~sc_trace_file_base() { if( !is_initialized() ) SC_REPORT_WARNING( SC_ID_TRACING_CLOSE_EMPTY_FILE_, filename() ); if( fp ) fclose(fp); #if SC_TRACING_PHASE_CALLBACKS_ == 0 // unregister from simcontext sc_get_curr_simcontext()->remove_trace_file( this ); #endif } /*****************************************************************************/ // simulation phase callback based trigger // // The tracing updates are triggered // (- at the end of the initialization phase [disabled for now]) // - before an update of the simulation time // - before returning to sc_start (via sc_pause() or sc_stop()) // - after an update phase (if delta cycles need to be traced) // #if SC_TRACING_PHASE_CALLBACKS_ void sc_trace_file_base::simulation_phase_callback() { // delta cycle is traced at the end of an update phase cycle( simcontext()->get_status() == SC_END_OF_UPDATE ); } #endif // SC_TRACING_PHASE_CALLBACKS_ /*****************************************************************************/ bool sc_trace_file_base::is_initialized() const { return initialized_; } bool sc_trace_file_base::initialize() { if( initialized_ ) return false; initialized_ = true; if( !tracing_initialized_ ) { tracing_initialized_ = true; bool running_regression = ( getenv( "SYSTEMC_REGRESSION" ) != NULL ); // hide some messages during regression if( running_regression ) { sc_report_handler::set_actions( SC_ID_TRACING_TIMESCALE_DEFAULT_ , SC_INFO, SC_DO_NOTHING ); } } // open trace file if(!fp) open_fp(); sc_time_tuple kernel_res_tuple = sc_time_tuple(sc_get_time_resolution()); kernel_unit_fs = kernel_res_tuple.value() * unit_to_fs(kernel_res_tuple.unit()); // setup timescale if( !timescale_set_by_user ) { trace_unit_fs = kernel_unit_fs; std::stringstream ss; ss << sc_get_time_resolution() << " (" << filename_ << ")"; SC_REPORT_INFO( SC_ID_TRACING_TIMESCALE_DEFAULT_ , ss.str().c_str() ); } // initialize derived tracing implementation class (VCD/WIF) do_initialize(); return initialized_; } void sc_trace_file_base::open_fp() { sc_assert( !fp && filename() ); fp = fopen( filename(), "w" ); if( !fp ) { SC_REPORT_ERROR( SC_ID_TRACING_FOPEN_FAILED_, filename() ); sc_abort(); // can't recover from here } } void sc_trace_file_base::delta_cycles( bool flag ) { trace_delta_cycles_ = flag; #if SC_TRACING_PHASE_CALLBACKS_ if( trace_delta_cycles_ ) { sc_object::register_simulation_phase_callback( SC_END_OF_UPDATE ); } else { sc_object::unregister_simulation_phase_callback( SC_END_OF_UPDATE ); } #endif } void sc_trace_file_base::set_time_unit( double v, sc_time_unit tu ) { if( initialized_ ) { std::stringstream ss; ss << filename_ << "\n" "\tTimescale unit cannot be changed once tracing has begun.\n" "\tTo change the scale, create a new trace file."; SC_REPORT_ERROR( SC_ID_TRACING_ALREADY_INITIALIZED_ , ss.str().c_str() ); return; } timescale_set_by_user = true; trace_unit_fs = static_cast(v * unit_to_fs(tu)); // EMIT ADVISORY MESSAGE ABOUT CHANGE IN TIME SCALE: { std::stringstream ss; ss << fs_unit_to_str(trace_unit_fs) << " (" << filename_ << ")"; SC_REPORT_INFO( SC_ID_TRACING_TIMESCALE_UNIT_, ss.str().c_str() ); } } bool sc_trace_file_base::add_trace_check( const std::string & name ) const { if( !initialized_ ) return true; std::stringstream ss; ss << "sc_trace() failed:\n" "\tNo traces can be added to " "'" << filename_ << "'" " once trace recording has started.\n" "\tTo add tracing of '" << name << "', create a new trace file."; SC_REPORT_ERROR( SC_ID_TRACING_ALREADY_INITIALIZED_ , ss.str().c_str() ); return false; } bool sc_trace_file_base::has_low_units() const { return kernel_unit_fs > trace_unit_fs; } int sc_trace_file_base::low_units_len() const { sc_assert(has_low_units()); double max_low_units = static_cast(kernel_unit_fs / trace_unit_fs); return static_cast(log10(max_low_units)); } void sc_trace_file_base::timestamp_in_trace_units(unit_type &high, unit_type &low) const { unit_type time_now = sc_time_stamp().value(); unit_type delta_now = sc_delta_count_at_current_time(); if (has_low_units()) { unit_type max_low_units = kernel_unit_fs / trace_unit_fs; low = 0; high = time_now; if (delta_cycles()) { low += delta_now % max_low_units; high += delta_now / max_low_units; } } else { unit_type unit_divisor = trace_unit_fs / kernel_unit_fs; low = time_now % unit_divisor; high = time_now / unit_divisor; if (delta_cycles()) high += delta_now; } } sc_time::value_type sc_trace_file_base::unit_to_fs(sc_time_unit tu) { switch ( tu ) { case SC_FS: return UINT64_C(1); case SC_PS: return UINT64_C(1000); case SC_NS: return UINT64_C(1000000); case SC_US: return UINT64_C(1000000000); case SC_MS: return UINT64_C(1000000000000); case SC_SEC:return UINT64_C(1000000000000000); default: SC_REPORT_ERROR( SC_ID_TRACING_INVALID_TIMESCALE_UNIT_, "unknown unit value" ); return 0; } } std::string sc_trace_file_base::fs_unit_to_str(sc_trace_file_base::unit_type tu) { switch (tu) { case UINT64_C(1): return "1 fs"; case UINT64_C(10): return "10 fs"; case UINT64_C(100): return "100 fs"; case UINT64_C(1000): return "1 ps"; case UINT64_C(10000): return "10 ps"; case UINT64_C(100000): return "100 ps"; case UINT64_C(1000000): return "1 ns"; case UINT64_C(10000000): return "10 ns"; case UINT64_C(100000000): return "100 ns"; case UINT64_C(1000000000): return "1 us"; case UINT64_C(10000000000): return "10 us"; case UINT64_C(100000000000): return "100 us"; case UINT64_C(1000000000000): return "1 ms"; case UINT64_C(10000000000000): return "10 ms"; case UINT64_C(100000000000000): return "100 ms"; case UINT64_C(1000000000000000): return "1 sec"; case UINT64_C(10000000000000000): return "10 sec"; case UINT64_C(100000000000000000): return "100 sec"; default: /* fail below */ (void)0; } std::stringstream ss; ss << "not a power of ten: " << tu << " fs"; SC_REPORT_ERROR( SC_ID_TRACING_INVALID_TIMESCALE_UNIT_, ss.str().c_str() ); return ""; } // obtain formatted time string SC_API std::string localtime_string() { char buf[200]; time_t long_time; time(&long_time); struct tm* p_tm = localtime(&long_time); strftime(buf, 199, "%b %d, %Y %H:%M:%S", p_tm); return buf; } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ // Taf! systemc-2.3.4/src/sysc/tracing/files.am0000644000175000017500000000415614342422106017713 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/tracing/files.am -- ## Included from a Makefile.am to provide directory-specific information ## ## Original Author: Philipp A. Hartmann, Intel, 2015-11-24 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** ## Generic directory setup ## (should be kept in sync among all files.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: tracing ## %C%: tracing H_FILES += \ tracing/sc_trace.h \ tracing/sc_tracing_ids.h NO_H_FILES += \ tracing/sc_trace_file_base.h \ tracing/sc_vcd_trace.h \ tracing/sc_wif_trace.h CXX_FILES += \ tracing/sc_trace.cpp \ tracing/sc_trace_file_base.cpp \ tracing/sc_vcd_trace.cpp \ tracing/sc_wif_trace.cpp INCDIRS += \ tracing ## Taf! ## :vim:ft=automake: systemc-2.3.4/src/sysc/tracing/sc_vcd_trace.h0000644000175000017500000001753014342422106021062 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_vcd_trace.h - Implementation of VCD tracing. Original Author - Abhijit Ghosh, Synopsys, Inc. *****************************************************************************/ /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: *****************************************************************************/ /***************************************************************************** Acknowledgement: The tracing mechanism is based on the tracing mechanism developed at Infineon (formerly Siemens HL). Though this code is somewhat different, and significantly enhanced, the basics are identical to what was originally contributed by Infineon. The contribution of Infineon in the development of this tracing technology is hereby acknowledged. *****************************************************************************/ #ifndef SC_VCD_TRACE_H #define SC_VCD_TRACE_H #include "sysc/tracing/sc_trace_file_base.h" namespace sc_core { class sc_time; class vcd_trace; // defined in sc_vcd_trace.cpp template class vcd_T_trace; // ---------------------------------------------------------------------------- // CLASS : vcd_trace_file // // ... // ---------------------------------------------------------------------------- class vcd_trace_file : public sc_trace_file_base { public: enum vcd_enum {VCD_WIRE=0, VCD_REAL, VCD_EVENT, VCD_TIME, VCD_LAST}; // sc_set_vcd_time_unit is deprecated. #if 0 // deprecated inline void sc_set_vcd_time_unit(int exponent10_seconds) { set_time_unit(exponent10_seconds); } #endif // Create a Vcd trace file. // `Name' forms the base of the name to which `.vcd' is added. vcd_trace_file(const char *name); // Flush results and close file. ~vcd_trace_file(); protected: // These are all virtual functions in sc_trace_file and // they need to be defined here. // Trace sc_time, sc_event virtual void trace(const sc_time& object, const std::string& name); virtual void trace(const sc_event& object, const std::string& name); // Trace a boolean object (single bit) void trace(const bool& object, const std::string& name); // Trace a sc_bit object (single bit) virtual void trace( const sc_dt::sc_bit& object, const std::string& name); // Trace a sc_logic object (single bit) void trace(const sc_dt::sc_logic& object, const std::string& name); // Trace an unsigned char with the given width void trace(const unsigned char& object, const std::string& name, int width); // Trace an unsigned short with the given width void trace(const unsigned short& object, const std::string& name, int width); // Trace an unsigned int with the given width void trace(const unsigned int& object, const std::string& name, int width); // Trace an unsigned long with the given width void trace(const unsigned long& object, const std::string& name, int width); // Trace a signed char with the given width void trace(const char& object, const std::string& name, int width); // Trace a signed short with the given width void trace(const short& object, const std::string& name, int width); // Trace a signed int with the given width void trace(const int& object, const std::string& name, int width); // Trace a signed long with the given width void trace(const long& object, const std::string& name, int width); // Trace an int64 with a given width void trace(const sc_dt::int64& object, const std::string& name, int width); // Trace a uint64 with a given width void trace(const sc_dt::uint64& object, const std::string& name, int width); // Trace a float void trace(const float& object, const std::string& name); // Trace a double void trace(const double& object, const std::string& name); // Trace sc_dt::sc_uint_base void trace (const sc_dt::sc_uint_base& object, const std::string& name); // Trace sc_dt::sc_int_base void trace (const sc_dt::sc_int_base& object, const std::string& name); // Trace sc_dt::sc_unsigned void trace (const sc_dt::sc_unsigned& object, const std::string& name); // Trace sc_dt::sc_signed void trace (const sc_dt::sc_signed& object, const std::string& name); // Trace sc_dt::sc_fxval void trace( const sc_dt::sc_fxval& object, const std::string& name ); // Trace sc_dt::sc_fxval_fast void trace( const sc_dt::sc_fxval_fast& object, const std::string& name ); // Trace sc_dt::sc_fxnum void trace( const sc_dt::sc_fxnum& object, const std::string& name ); // Trace sc_dt::sc_fxnum_fast void trace( const sc_dt::sc_fxnum_fast& object, const std::string& name ); template void traceT(const T& object, const std::string& name, vcd_enum type=VCD_WIRE) { if( add_trace_check(name) ) traces.push_back(new vcd_T_trace( object, name , obtain_name(),type) ); } // Trace sc_dt::sc_bv_base (sc_dt::sc_bv) virtual void trace(const sc_dt::sc_bv_base& object, const std::string& name); // Trace sc_dt::sc_lv_base (sc_dt::sc_lv) virtual void trace(const sc_dt::sc_lv_base& object, const std::string& name); // Trace an enumerated object - where possible output the enumeration literals // in the trace file. Enum literals is a null terminated array of null // terminated char* literal strings. void trace(const unsigned& object, const std::string& name, const char** enum_literals); // Output a comment to the trace file void write_comment(const std::string& comment); // Write trace info for cycle. void cycle(bool delta_cycle); private: template const T& extract_ref(const T& object) const { return object; } const sc_dt::uint64& extract_ref(const sc_event& object) const { return event_trigger_stamp(object); } #if SC_TRACING_PHASE_CALLBACKS_ // avoid hidden overload warnings virtual void trace( sc_trace_file* ) const; #endif // SC_TRACING_PHASE_CALLBACKS_ // Initialize the VCD tracing virtual void do_initialize(); void print_time_stamp(unit_type now_units_high, unit_type now_units_low) const; bool get_time_stamp(unit_type &now_units_high, unit_type &now_units_low) const; unsigned vcd_name_index; // Number of variables traced unit_type previous_time_units_low; unit_type previous_time_units_high; public: // Array to store the variables traced std::vector traces; // Create VCD names for each variable std::string obtain_name(); }; } // namespace sc_core #endif // SC_VCD_TRACE_H // Taf! systemc-2.3.4/src/sysc/utils/0000755000175000017500000000000014342422106015775 5ustar carstencarstensystemc-2.3.4/src/sysc/utils/sc_machine.h0000644000175000017500000000530014342422106020235 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_machine.h -- Machine-dependent Environment Settings Original Author: Andy Goodrich, Forte Design Systems, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_MACHINE_H #define SC_MACHINE_H #include #include "sysc/packages/boost/detail/endian.hpp" // ---------------------------------------------------------------------------- // Little or big endian machine? // ---------------------------------------------------------------------------- #if defined( SC_BOOST_LITTLE_ENDIAN ) # define SC_LITTLE_ENDIAN #elif defined( SC_BOOST_BIG_ENDIAN ) # define SC_BIG_ENDIAN #else # error "Could not detect the endianness of the CPU." #endif // ---------------------------------------------------------------------------- // Are long data types 32-bit or 64-bit? // ---------------------------------------------------------------------------- #if ULONG_MAX > 0xffffffffUL # define SC_LONG_64 #endif // $Log: sc_machine.h,v $ // Revision 1.5 2011/08/26 22:58:23 acg // Torsten Maehne: changes for endian detection. // // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.2 2010/09/06 16:35:09 acg // Andy Goodrich: changed i386 to __i386__ in ifdef. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif // !defined(SC_MACHINE_H) systemc-2.3.4/src/sysc/utils/sc_list.cpp0000644000175000017500000001503414342422106020144 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_list.cpp -- Simple implementation of a doubly linked list. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #include #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/utils/sc_list.h" #include "sysc/utils/sc_mempool.h" #include "sysc/utils/sc_report.h" #include "sysc/utils/sc_utils_ids.h" namespace sc_core { class SC_API sc_plist_elem { friend class sc_plist_base_iter; friend class sc_plist_base; private: sc_plist_elem() : data(0), prev(0), next(0) {} sc_plist_elem( void* d, sc_plist_elem* p, sc_plist_elem* n ) : data(d), prev(p), next(n) {} ~sc_plist_elem() {} static void* operator new(std::size_t sz) { return sc_mempool::allocate(sz); } static void operator delete(void* p, std::size_t sz) { sc_mempool::release(p, sz); } void* data; sc_plist_elem* prev; sc_plist_elem* next; }; sc_plist_base::sc_plist_base() : head(0), tail(0) {} sc_plist_base::~sc_plist_base() { handle_t p; for( handle_t h = head; h != 0; h = p ) { p = h->next; delete h; } } void sc_plist_base::erase_all() { handle_t p; for( handle_t h = head; h != 0; h = p ) { p = h->next; delete h; } head = 0; tail = 0; } int sc_plist_base::size() const { int n = 0; for( handle_t h = head; h != 0; h = h->next ) { n++; } return n; } sc_plist_base::handle_t sc_plist_base::push_back( void* d ) { handle_t q = new sc_plist_elem( d, tail, 0 ); if (tail) { tail->next = q; tail = q; } else { head = tail = q; } return q; } sc_plist_base::handle_t sc_plist_base::push_front( void* d ) { handle_t q = new sc_plist_elem( d, (sc_plist_elem*) 0, head ); if (head) { head->prev = q; head = q; } else { head = tail = q; } return q; } void* sc_plist_base::pop_back() { handle_t q = tail; void* d = q->data; tail = tail->prev; delete q; if (tail != 0) { tail->next = 0; } else { head = 0; } return d; } void* sc_plist_base::pop_front() { handle_t q = head; void* d = q->data; head = head->next; delete q; if (head != 0) { head->prev = 0; } else { tail = 0; } return d; } sc_plist_base::handle_t sc_plist_base::insert_before( handle_t h, void* d ) { if (h == 0) { return push_back(d); } else { handle_t q = new sc_plist_elem( d, h->prev, h ); h->prev->next = q; h->prev = q; return q; } } sc_plist_base::handle_t sc_plist_base::insert_after( handle_t h, void* d ) { if (h == 0) { return push_front(d); } else { handle_t q = new sc_plist_elem( d, h, h->next ); h->next->prev = q; h->next = q; return q; } } void* sc_plist_base::remove( handle_t h ) { if (h == head) return pop_front(); else if (h == tail) return pop_back(); else { void* d = h->data; h->prev->next = h->next; h->next->prev = h->prev; delete h; return d; } } void* sc_plist_base::get( handle_t h ) const { return h->data; } void sc_plist_base::set( handle_t h, void* d ) { h->data = d; } void sc_plist_base::mapcar( sc_plist_map_fn f, void* arg ) { for (handle_t h = head; h != 0; h = h->next) { f( h->data, arg ); } } void* sc_plist_base::front() const { if (head) { return head->data; } else { SC_REPORT_ERROR( SC_ID_FRONT_ON_EMPTY_LIST_ , 0 ); // never reached return 0; } } void* sc_plist_base::back() const { if (tail) { return tail->data; } else { SC_REPORT_ERROR( SC_ID_BACK_ON_EMPTY_LIST_, 0 ); // never reached return 0; } } sc_plist_base_iter::sc_plist_base_iter( sc_plist_base* l, bool from_tail ) : lst(l), ptr( from_tail ? l->tail : l->head ) { } void sc_plist_base_iter::reset( sc_plist_base* l, bool from_tail ) { lst = l; if (from_tail) { ptr = l->tail; } else { ptr = l->head; } } sc_plist_base_iter::~sc_plist_base_iter() { } bool sc_plist_base_iter::empty() const { return ptr == 0; } void sc_plist_base_iter::operator++(int) { ptr = ptr->next; } void sc_plist_base_iter::operator--(int) { ptr = ptr->prev; } void* sc_plist_base_iter::get() const { return ptr->data; } void sc_plist_base_iter::set( void* d ) { ptr->data = d; } void sc_plist_base_iter::remove() { sc_plist_base::handle_t nptr = ptr->next; lst->remove(ptr); ptr = nptr; } void sc_plist_base_iter::remove(int direction) { sc_plist_base::handle_t nptr = (direction == 1) ? ptr->next : ptr->prev; lst->remove(ptr); ptr = nptr; } void sc_plist_base_iter::set_handle( sc_plist_elem* h ) { ptr = h; } } // namespace sc_core // $Log: sc_list.cpp,v $ // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:43 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/utils/sc_string.cpp0000644000175000017500000003403714342422106020503 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_string.cpp -- Implementation of a simple string class. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #include #include #include #include #include "sysc/utils/sc_string.h" #include "sysc/utils/sc_report.h" // sc_assert #include "sysc/utils/sc_utils_ids.h" #include "sysc/utils/sc_report.h" using std::isspace; using std::strcmp; using std::strcpy; using std::strlen; using std::strncpy; namespace sc_dt { inline static int sc_roundup( int n, int m ) { return ((n - 1) / m + 1) * m; } // ---------------------------------------------------------------------------- // CLASS : sc_string_rep // // Reference counting string implementation class. // ---------------------------------------------------------------------------- class SC_API sc_string_rep { friend class sc_string_old; friend ::std::ostream& operator<<( ::std::ostream&, const sc_string_old& ); friend ::std::istream& operator>>( ::std::istream&, sc_string_old& ); friend sc_string_old operator+( const char*, const sc_string_old& ); sc_string_rep( int size = 16 ) : ref_count(1), alloc( sc_roundup( size, 16 ) ), str( new char[alloc] ) { *str = '\0'; } sc_string_rep( const char* s ) : ref_count(1), alloc(0), str(0) { if (s) { alloc = 1 + strlen(s); str = strcpy( new char[alloc], s ); } else { alloc = 16; str = strcpy( new char[alloc], "" ); } } sc_string_rep( const char* s, int n); // get first n chars from the string ~sc_string_rep() { sc_assert( ref_count == 0 ); delete[] str; } void resize( int new_size ); void set_string( const char* s ); int ref_count; int alloc; char* str; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII sc_string_rep::sc_string_rep( const char* s, int n) : ref_count(1), alloc(0), str(0) { if (s && n>0) { alloc = 1 + n; str = strncpy( new char[alloc], s,n ); str[n] = 00; } else { alloc = 16; str = strcpy( new char[alloc], "" ); } } void sc_string_rep::resize( int new_size ) { if (new_size <= alloc) return; alloc = sc_roundup( new_size, 16 ); char* new_str = strcpy( new char[alloc], str ); delete[] str; str = new_str; } void sc_string_rep::set_string( const char* s ) { int len = strlen(s); resize( len + 1 ); strcpy( str, s ); } // ---------------------------------------------------------------------------- // CLASS : sc_string_old // // String class (yet another). // ---------------------------------------------------------------------------- // constructors sc_string_old::sc_string_old( int size ) : rep( new sc_string_rep(size) ) { } sc_string_old::sc_string_old( const char* s ) : rep( new sc_string_rep(s) ) { } sc_string_old::sc_string_old( const char* s, int n ) : rep( new sc_string_rep( s, n ) ) { } sc_string_old::sc_string_old( const sc_string_old& s ) : rep( s.rep ) { rep->ref_count ++; } sc_string_old::sc_string_old( sc_string_rep* r ) : rep(r) { } // destructor sc_string_old::~sc_string_old() { if( -- (rep->ref_count) == 0 ) { delete rep; } } int sc_string_old::length() const { return strlen(rep->str); } sc_string_old sc_string_old::operator+( const char* s ) const { int len = length(); sc_string_rep* r = new sc_string_rep( len + strlen(s) + 1 ); strcpy( r->str, rep->str ); strcpy( r->str + len, s ); return sc_string_old(r); } sc_string_old sc_string_old::operator+(char c) const { int len = length(); sc_string_rep* r = new sc_string_rep( len + 2 ); strcpy( r->str, rep->str ); r->str[len] = c; r->str[len+1] = 00; return sc_string_old(r); } sc_string_old operator+( const char* s, const sc_string_old& t ) { int len = strlen(s); sc_string_rep* r = new sc_string_rep( len + t.length() + 1 ); strcpy( r->str, s ); strcpy( r->str + len, t ); return sc_string_old(r); } sc_string_old sc_string_old::operator+( const sc_string_old& s ) const { int len = length(); sc_string_rep* r = new sc_string_rep( len + s.length() + 1 ); strcpy( r->str, rep->str ); strcpy( r->str + len, s.rep->str ); return sc_string_old(r); } sc_string_old& sc_string_old::operator=( const char* s ) { if (rep->ref_count > 1) { --rep->ref_count; rep = new sc_string_rep(s); } else { rep->set_string(s); } return *this; } sc_string_old& sc_string_old::operator=( const sc_string_old& s ) { if (&s == this) return *this; if (--(rep->ref_count) == 0) delete rep; rep = s.rep; rep->ref_count++; return *this; } sc_string_old& sc_string_old::operator+=( const char* s ) { int oldlen = length(); int slen = strlen(s); if (rep->ref_count > 1) { sc_string_rep* oldrep = rep; --rep->ref_count; rep = new sc_string_rep( oldlen + slen + 1 ); strcpy( rep->str, oldrep->str ); strcpy( rep->str + oldlen, s ); } else { rep->resize( oldlen + slen + 1 ); strcpy( rep->str + oldlen, s ); } return *this; } sc_string_old& sc_string_old::operator+=(char c) { int oldlen = length(); if (rep->ref_count > 1) { sc_string_rep* oldrep = rep; --rep->ref_count; rep = new sc_string_rep( oldlen + 2 ); strcpy( rep->str, oldrep->str ); rep->str[oldlen]=c; rep->str[oldlen+1]=00; } else { rep->resize( oldlen + 2 ); rep->str[oldlen]=c; rep->str[oldlen+1]=00; } return *this; } sc_string_old& sc_string_old::operator+=( const sc_string_old& s ) { return this->operator+=( s.rep->str ); } int sc_string_old::cmp( const char* s ) const { return strcmp( rep->str, s ); } int sc_string_old::cmp( const sc_string_old& s ) const { return strcmp( rep->str, s.rep->str ); } const char* sc_string_old::c_str() const { return rep->str; } // get substring sc_string_old sc_string_old::substr(int first,int last) const { if(first<0 || last<0 || first>last || first>=length() || last>=length()) return ""; return sc_string_old(rep->str+first, last-first+1); } sc_string_old sc_string_old::make_str(long n) // convert integer to string { char buf[32]; ::std::sprintf(buf,"%ld",n); return sc_string_old(buf); } #define DEFINE_RELOP(op) \ bool sc_string_old::operator op( const char* s ) const \ { \ return strcmp( rep->str, s ) op 0; \ } \ bool sc_string_old::operator op( const sc_string_old& s ) const \ { \ return strcmp( rep->str, s.rep->str ) op 0; \ } DEFINE_RELOP(==) DEFINE_RELOP(!=) DEFINE_RELOP(<) DEFINE_RELOP(<=) DEFINE_RELOP(>) DEFINE_RELOP(>=) sc_string_old::operator const char*() const { return rep->str; } char sc_string_old::operator[]( int i ) const { return rep->str[i]; } char& sc_string_old::operator[]( int i ) { if (rep->ref_count > 1) { rep->ref_count--; rep = new sc_string_rep(rep->str); } return rep->str[i]; } void sc_string_old::set( int i, char c ) { if (rep->ref_count > 1) { rep->ref_count--; rep = new sc_string_rep(rep->str); } rep->str[i] = c; } #if defined(_MSC_VER) // Windows provides safer implementation # define sc_vsnprintf _vsnprintf #else # define sc_vsnprintf vsnprintf #endif sc_string_old sc_string_old::to_string(const char* format, ...) { std::va_list argptr; sc_string_old result; char buffer[1024]; // static string buffer buffer[1023]=000; va_start(argptr, format); int cnt = sc_vsnprintf(buffer, 1024, format, argptr); if(cnt>1023) // string too long { int buf_size = 1024; const int max_size = 65000; char* buf = 0; // dynamic string buffer do { delete[] buf; buf_size*=2; buf = new char[buf_size]; cnt = sc_vsnprintf(buf, buf_size, format, argptr); } while( buf_size=buf_size); if(cnt>=buf_size) { // string is longer the the maximum buffer size (max_size) SC_REPORT_WARNING( sc_core::SC_ID_STRING_TOO_LONG_, "truncated" ); buf[buf_size-1] = 000; } result = buf; delete[] buf; } else result = buffer; va_end(argptr); return result; } void sc_string_old::print( ::std::ostream& os ) const { os << rep->str; } void sc_string_old::test(int position)const { if(position<0 || position>=length()) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, "sc_string_old::test" ); sc_core::sc_abort(); // can't recover from here } } // TODO: conveniece formatting functions for common types // e.g. sc_string_old("a=%d, s is %s").fmt(1).fmt("string") // should produce a=1, s is string // it should be safe: if less arguments specified // it should print %specifier; extra arguments should be ignored // if the type of the argument is incompatible with format // specifier it should be ignored // unsigned sc_string_old::fmt_length()const { unsigned result=0; if((*this)[0]!='%') return 0; else result++; if(is_delimiter("-+0 #",result)) // flags result++; while(is_delimiter("0123456789*",result)) // width result++; if(rep->str[result]=='.') // precision { result++; unsigned old_result = result; while(is_delimiter("0123456789*",result)) result++; if(old_result == result) //error in format return 0; } if(is_delimiter("hlL",result)) result++; // I64 is not supported if(is_delimiter("cCdiouxXeEfgGnpsS",result)) result++; else // error in format return 0; return result; } sc_string_old& sc_string_old::fmt(const sc_string_old& s) { return fmt(s.c_str()); } int sc_string_old::pos( const sc_string_old& sub_string ) const { int sub_len = sub_string.length(); if( sub_len == 0 ) { return 0; // empty string always matches } int ind = 0; int len = length(); bool found = false; while( ind < len && ! found ) { found = ( sub_string == substr( ind, ind + sub_len - 1 ) ); ++ ind; } if( found ) { return -- ind; } else { return -1; } } sc_string_old& sc_string_old::remove(unsigned index, unsigned length) { test((int)index); if(length!=0) (*this) = substr(0,index-1) + substr(index+length,this->length()-1); return *this; } sc_string_old& sc_string_old::insert(const sc_string_old& sub_string, unsigned index) { if(index>(unsigned)length()) { SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, "sc_string_old::insert" ); return *this; } return (*this) = substr(0,index-1)+sub_string+substr(index,length()-1); } bool sc_string_old::is_delimiter(const sc_string_old& str, unsigned index)const { test((int)index); return str.contains(rep->str[index]); } bool sc_string_old::contains(char c)const { int len = length(); int i=0; bool found = false; while(!found && istr[i++]==c; return found; } sc_string_old sc_string_old::uppercase()const { int len = length(); sc_string_old temp(*this); for(int i=0; istr[i]; if(c>='a' && c<='z') temp.rep->str[i] = static_cast( c-32 ); } return temp; } sc_string_old sc_string_old::lowercase()const { int len = length(); sc_string_old temp(*this); for(int i=0; istr[i]; if(c>='A' && c<='Z') temp.rep->str[i] = static_cast( c+32 ); } return temp; } // ---------------------------------------------------------------------------- ::std::istream& operator >> ( ::std::istream& is, sc_string_old& s ) { if( s.rep->ref_count > 1 ) { -- s.rep->ref_count; s.rep = new sc_string_rep; } int i = 0; char* p = s.rep->str; char c; // skip white spaces while( is.get( c ) && isspace( c ) ) ; for( ; is.good() && ! isspace( c ); is.get( c ) ) { if( i > s.rep->alloc - 2 ) { s.rep->str[i] = '\0'; s.rep->resize( (int) (s.rep->alloc * 1.5) ); p = s.rep->str + i; } *p ++ = c; i ++; } *p = '\0'; return is; } } // namespace sc_dt // $Log: sc_string.cpp,v $ // Revision 1.6 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.5 2011/08/26 22:49:42 acg // Torsten Maehne: remove redudant assignment. // // Revision 1.4 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/utils/sc_utils_ids.h0000644000175000017500000001022214342422106020627 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_utils_ids.h -- Report ids for the utils code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_UTILS_IDS_H #define SC_UTILS_IDS_H // ---------------------------------------------------------------------------- // Report ids (utils) // // Report ids in the range of 800-899. // ---------------------------------------------------------------------------- #ifndef SC_DEFINE_MESSAGE #define SC_DEFINE_MESSAGE(id,unused1,unused2) \ namespace sc_core { extern SC_API const char id[]; } namespace sc_core { extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; // in sc_report_handler.cpp } #endif SC_DEFINE_MESSAGE(SC_ID_STRING_TOO_LONG_, 801, "string is too long") SC_DEFINE_MESSAGE(SC_ID_FRONT_ON_EMPTY_LIST_, 802, "attempt to take front() on an empty list") SC_DEFINE_MESSAGE(SC_ID_BACK_ON_EMPTY_LIST_, 803, "attempt to take back() on an empty list") SC_DEFINE_MESSAGE(SC_ID_IEEE_1666_DEPRECATION_, 804, "/IEEE_Std_1666/deprecated" ) SC_DEFINE_MESSAGE(SC_ID_VECTOR_INIT_CALLED_TWICE_, 805, "sc_vector::init has already been called" ) // available message number 806 SC_DEFINE_MESSAGE(SC_ID_VECTOR_BIND_EMPTY_, 807, "sc_vector::bind called with empty range" ) SC_DEFINE_MESSAGE(SC_ID_VECTOR_NONOBJECT_ELEMENTS_, 808, "sc_vector::get_elements called for element type " "not derived from sc_object" ) /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: Alex Riesen, Synopsys, Inc., 2003-02-02 ported to SystemC 2.1 exception reporting. *****************************************************************************/ // $Log: sc_utils_ids.h,v $ // Revision 1.5 2011/08/26 20:46:20 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.3 2011/02/14 17:54:25 acg // Andy Goodrich: Philipp's addition of early bind checks. // // Revision 1.2 2010/12/07 20:10:19 acg // Andy Goodrich: messages for new sc_vector class. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.6 2006/01/25 00:31:27 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.5 2006/01/24 22:01:35 acg // Andy Goodrich: consolidated all IEEE 1666 compliance messages to use the // SC_ID_IEEE_1666_DEPRECATION_ message type. // // Revision 1.4 2006/01/24 20:53:41 acg // Andy Goodrich: added warnings indicating that use of integer ids in reports // is deprecated. Added tracing/sc_trace_ids.h to message list. // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif // Taf! systemc-2.3.4/src/sysc/utils/sc_string_view.h0000644000175000017500000000652414342422106021202 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_string_view.h -- Non-owning, constant reference to a character string Original Author: Philipp A Hartmann, Intel Intended to follow C++ Library Fundamentals TS http://open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html#string.view NOTE: The types sc_string_view and sc_zstring_view are implementation- defined and should not be used within user models. After C++17 is fully adopted, all uses shall be replaced by std::string_view. *****************************************************************************/ #ifndef SYSC_UTILS_STRING_VIEW_H_INCLUDED_ #define SYSC_UTILS_STRING_VIEW_H_INCLUDED_ #include #if SC_CPLUSPLUS >= 201402L && defined(__has_include) # if SC_CPLUSPLUS > 201402L && __has_include() /* since C++17 */ # define SC_STRING_VIEW_NS_ std # include /* available in Library Fundamentals, ISO/IEC TS 19568:2015 */ # elif __has_include() # define SC_STRING_VIEW_NS_ std::experimental # include # endif #else // TODO: other ways to detect availability of std::(experimental::)string_view? #endif #ifndef SC_STRING_VIEW_NS_ // fallback to (mostly compatible) implementation from Boost # include # define SC_STRING_VIEW_NS_ sc_boost #endif // Boost fallback namespace sc_core { /// non-owning, constant reference to a string (implementation-defined) typedef SC_STRING_VIEW_NS_::string_view sc_string_view; // TODO: add ABI guard against inconsistent configurations /// non-owning, const-ref to null-terminated string (implementation-defined) class sc_zstring_view : public sc_string_view { public: /* constexpr */ sc_zstring_view() /* noexcept */ : sc_string_view() {} /* constexpr */ sc_zstring_view(const char* s) /* noexcept */ : sc_string_view(s) {} sc_zstring_view(const std::string& s) /* noexcept */ : sc_string_view(s) {} /* constexpr */ void swap(sc_zstring_view& s) /* noexcept */ { sc_string_view::swap(s); } /* constexpr */ const char* c_str() const /* noexcept */ { return data(); } private: // Hide invariant-breaking function using sc_string_view::remove_suffix; }; // class sc_zstring_view } // namespace sc_core #undef SC_STRING_VIEW_NS_ #endif // SYSC_UTILS_STRING_VIEW_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/utils/sc_temporary.h0000644000175000017500000001734014342422106020662 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_temporary.h -- Temporary value pool classes. Original Author: Andy Goodrich, Forte Design Systems, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_TEMPORARY_H #define SC_TEMPORARY_H #include "sysc/kernel/sc_cmnhdr.h" #include // std::size_t #include // for memset namespace sc_core { //------------------------------------------------------------------------------ // sc_byte_heap - CLASS MANAGING A TEMPORARY HEAP OF BYTES // // This facility implements a heap of temporary byte allocations. Once an // request has been allocated it is not freed. However the entire heap // wraps and the storage is reused. This means that no allocations should // be assumed as permanent. Allocations are double-word aligned. This is // raw storage, so objects which contain virtual methods cannot be allocated // with this object. See the sc_vpool object for that type of storage // allocation. // // char* allocate( int size ) // This method returns a pointer to block of size bytes. The block // returned is the next available one in the heap. If the current heap // cannot fullfil the request it will be rewound and storage allocated from // its start. All allocations start on an 8-byte boundary. // size = number of bytes to be allocated. // // void initialize( int heap_size=0x100000 ) // This method allocates the storage to be managed. If there is already // a block of storage under management it is freed. If no argument is // provided for the heap size, a megabyte will be allocated. // heap_size = number of bytes to allocate for the heap. // // unsigned int length() // This method returns the size of this object's heap in bytes. // // sc_byte_heap() // This is the non-initialized object instance constructor. It does not // allocate the heap storage, that is done by the initialize() method. // // sc_byte_heap(int) // This is the initializing object instance constructor. It does allocates // a heap of the specified number of bytes. // heap_size = number of bytes to allocate for the heap. //------------------------------------------------------------------------------ class SC_API sc_byte_heap { public: char* m_bgn_p; // Beginning of heap storage. char* m_end_p; // End of heap storage. char* m_next_p; // Next heap location to be allocated. inline char* allocate( std::size_t bytes_n ) { char* result_p; bytes_n = (bytes_n + 7) & ((std::size_t)(-8)); result_p = m_next_p; m_next_p += bytes_n; if ( m_next_p >= m_end_p ) { result_p = m_bgn_p; m_next_p = m_bgn_p + bytes_n; } return result_p; } inline void initialize( std::size_t heap_size=0x100000 ) { delete [] m_bgn_p; m_bgn_p = new char[heap_size]; std::memset(m_bgn_p, 0, heap_size); m_end_p = &m_bgn_p[heap_size]; m_next_p = m_bgn_p; } inline std::size_t length() { return (std::size_t)(m_end_p - m_bgn_p); } inline sc_byte_heap() : m_bgn_p(0), m_end_p(0), m_next_p(0) { } inline sc_byte_heap( std::size_t heap_size ) : m_bgn_p(0), m_end_p(0), m_next_p(0) { initialize( heap_size ); } inline ~sc_byte_heap() { delete [] m_bgn_p; } }; //------------------------------------------------------------------------------ // sc_vpool - CLASS MANAGING A TEMPORARY VECTOR OF CLASS T INSTANCES // // This class implements a fixed pool of objects contained in a vector. These // objects are allocated via the allocate() method. An index, m_pool_i, // indicates the next object to be allocated. The vector is a power of 2 in // size, and this fact is used to wrap the list when m_pool_i reaches the // end of the vector. // // sc_vpool( int log2, T* pool_p=0 ) // This is the object instance constructor for this class. It configures // the object to manage a vector of 2**log2 entries. If a vector is // not supplied one will be allocated. // log2 = the log base two of the size of the vector. // pool_p -> vector of 2**log2 entries to be managed or 0. // // ~sc_vpool() // This is the object instance destructor for this class. It frees the // block of storage which was being managed. // // T* allocate() // This method returns the address of the next entry in the vector, m_pool_p, // pointed to by the index, m_pool_i, and updates that index. The index // update consists of adding 1 to m_pool_i and masking it by m_wrap. // // void reset() // This method resets the allocation index, m_pool_i, to point to the start // of the vector of objects under management. This call is not usually made // since there are a fixed number of entries and the index wraps. However, // for diagnostics tests it is convenient to be able to reset to the start // of the vector. // // int size() // This method returns the number of object instances contained in the // vector being managed by this object instance. //------------------------------------------------------------------------------ template class sc_vpool { protected: std::size_t m_pool_i; // Index of next entry to m_pool_m to provide. T* m_pool_p; // Vector of temporaries. std::size_t m_wrap; // Mask to wrap vector index. public: inline sc_vpool( int log2, T* pool_p=0 ); inline ~sc_vpool(); inline T* allocate(); inline void reset(); inline std::size_t size(); }; template sc_vpool::sc_vpool( int log2, T* pool_p ) : m_pool_i( 0 ) , m_pool_p( pool_p ? pool_p : new T[static_cast(1) << log2] ) , m_wrap( ~(static_cast(-1) << log2) ) { // if ( log2 > 32 ) SC_REPORT_ERROR(SC_ID_POOL_SIZE_, ""); } template sc_vpool::~sc_vpool() { // delete [] m_pool_p; } template T* sc_vpool::allocate() { T* result_p; // Entry to return. result_p = &m_pool_p[m_pool_i]; m_pool_i = (m_pool_i + 1) & m_wrap; return result_p; } template void sc_vpool::reset() { m_pool_i = 0; } template std::size_t sc_vpool::size() { return m_wrap + 1; } } // namespace sc_core // $Log: sc_temporary.h,v $ // Revision 1.4 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif // SC_TEMPORARY_H systemc-2.3.4/src/sysc/utils/sc_pq.h0000644000175000017500000001000414342422106017246 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_pq.h -- A simple priority queue (which can be used to model multiple clocks). From Cormen-Leiserson-Rivest, Ch.7. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_PQ_H #define SC_PQ_H #include "sysc/kernel/sc_cmnhdr.h" namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_ppq_base // // Priority queue base class. // ---------------------------------------------------------------------------- class SC_API sc_ppq_base { public: typedef int (*compare_fn_t)( const void*, const void* ); sc_ppq_base( int sz, compare_fn_t cmp ); ~sc_ppq_base(); void* top() const { return m_heap[1]; } void* extract_top(); void insert( void* elem ); int size() const { return m_heap_size; } bool empty() const { return (m_heap_size == 0); } protected: int parent( int i ) const { return i >> 1; } int left( int i ) const { return i << 1; } int right( int i ) const { return (i << 1) + 1; } void heapify( int i ); private: void** m_heap; int m_size_alloc; int m_heap_size; compare_fn_t m_compar; }; // ---------------------------------------------------------------------------- // CLASS TEMPLATE : sc_ppq // // This class is a simple implementation of a priority queue based on // binary heaps. The class is templatized on its data type. A comparison // function needs to be supplied. // ---------------------------------------------------------------------------- template class sc_ppq : public sc_ppq_base { public: // constructor - specify the maximum size of the queue and // give a comparison function. sc_ppq( int sz, compare_fn_t cmp ) : sc_ppq_base( sz, cmp ) {} ~sc_ppq() {} // returns the value of the top element in the priority queue. T top() const { return (T) sc_ppq_base::top(); } // pops the first element of the priority queue. T extract_top() { return (T) sc_ppq_base::extract_top(); } // insert a new element to the priority queue. void insert( T elem ) { sc_ppq_base::insert( (void*) elem ); } // size() and empty() are inherited. }; } // namespace sc_core // $Log: sc_pq.h,v $ // Revision 1.5 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif systemc-2.3.4/src/sysc/utils/sc_report_handler.cpp0000644000175000017500000005222514342422106022204 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_report_handler.cpp - Original Author: Alex Riesen, Synopsys, Inc. see also sc_report.cpp CHANGE LOG AT END OF FILE *****************************************************************************/ #include #include #include #include #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext_int.h" #include "sysc/utils/sc_stop_here.h" #include "sysc/utils/sc_report_handler.h" #include "sysc/utils/sc_report.h" namespace std {} namespace sc_core { int sc_report_handler::verbosity_level = SC_MEDIUM; // not documented, but available const std::string sc_report_compose_message(const sc_report& rep) { static const char * severity_names[] = { "Info", "Warning", "Error", "Fatal" }; std::string str; str += severity_names[rep.get_severity()]; str += ": "; if ( rep.get_id() >= 0 ) // backward compatibility with 2.0+ { char idstr[64]; std::sprintf(idstr, "(%c%d) ", "IWEF"[rep.get_severity()], rep.get_id()); str += idstr; } str += rep.get_msg_type(); if( *rep.get_msg() ) { str += ": "; str += rep.get_msg(); } if( rep.get_severity() > SC_INFO ) { char line_number_str[16]; str += "\nIn file: "; str += rep.get_file_name(); str += ":"; std::sprintf(line_number_str, "%d", rep.get_line_number()); str += line_number_str; sc_simcontext* simc = sc_get_curr_simcontext(); if( simc && sc_is_running() ) { const char* proc_name = rep.get_process_name(); if( proc_name ) { str += "\nIn process: "; str += proc_name; str += " @ "; str += rep.get_time().to_string(); } } } return str; } // // Private class to handle log files // class sc_log_file_handle { protected: // not CopyConstructible sc_log_file_handle(sc_log_file_handle const &); // not CopyAssignable void operator=(sc_log_file_handle const &); public: sc_log_file_handle(); sc_log_file_handle(const char *); void update_file_name(const char *); bool release(); ::std::ofstream& operator*(); private: std::string log_file_name; ::std::ofstream log_stream; }; sc_log_file_handle::sc_log_file_handle() {} sc_log_file_handle::sc_log_file_handle(const char * fname) : log_file_name(fname) , log_stream(fname) {} void sc_log_file_handle::update_file_name(const char * fname) { if (!fname) { release(); } else //fname != NULL { if (log_file_name.empty()) { if (log_stream.is_open()) //should be closed already log_stream.close(); log_file_name = fname; log_stream.open(fname); } else // log_file_name not empty { // filename changed? if (log_file_name != fname) { // new filename release(); log_file_name = fname; log_stream.open(fname); } else { // nothing to do } } } } bool sc_log_file_handle::release() { if (log_stream.is_open()) { log_stream.close(); log_file_name.clear(); return false; } return true; } ::std::ofstream& sc_log_file_handle::operator*() { return log_stream; } static sc_log_file_handle log_stream; // // The official handler of the exception reporting // void sc_report_handler::default_handler(const sc_report& rep, const sc_actions& actions) { if ( actions & SC_DISPLAY ) ::std::cout << ::std::endl << sc_report_compose_message(rep) << ::std::endl; if ( (actions & SC_LOG) && get_log_file_name() ) { log_stream.update_file_name(get_log_file_name()); *log_stream << rep.get_time() << ": " << sc_report_compose_message(rep) << ::std::endl; } if ( actions & SC_STOP ) { sc_stop_here(rep.get_msg_type(), rep.get_severity()); sc_stop(); } if ( actions & SC_INTERRUPT ) sc_interrupt_here(rep.get_msg_type(), rep.get_severity()); if ( actions & SC_ABORT ) sc_abort(); if ( actions & SC_THROW ) { sc_process_b* proc_p = sc_get_current_process_b(); if( proc_p && proc_p->is_unwinding() ) proc_p->clear_unwinding(); throw rep; } } // not documented, but available bool sc_report_close_default_log() { bool ret = log_stream.release(); sc_report_handler::set_log_file_name(NULL); return ret; } int sc_report_handler::get_count(sc_severity severity_) { return sev_call_count[severity_]; } int sc_report_handler::get_count(const char* msg_type_) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); return md->call_count; } int sc_report_handler::get_count(const char* msg_type_, sc_severity severity_) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); return md->sev_call_count[severity_]; } // // CLASS: sc_report_handler // implementation // sc_msg_def * sc_report_handler::mdlookup(const char * msg_type_) { if( !msg_type_ ) // if msg_type is NULL, report unknown error msg_type_ = SC_ID_UNKNOWN_ERROR_; for ( msg_def_items * item = messages; item; item = item->next ) { for ( int i = 0; i < item->count; ++i ) if ( !strcmp(msg_type_, item->md[i].msg_type) ) return item->md + i; } return 0; } // The calculation of actions to be executed sc_actions sc_report_handler::execute(sc_msg_def* md, sc_severity severity_) { sc_actions actions = md->sev_actions[severity_]; // high prio if ( SC_UNSPECIFIED == actions ) // middle prio actions = md->actions; if ( SC_UNSPECIFIED == actions ) // the lowest prio actions = sev_actions[severity_]; actions &= ~suppress_mask; // higher than the high prio actions |= force_mask; // higher than above, and the limit is the highest unsigned * limit = 0; unsigned * call_count = 0; // just increment counters and check for overflow if ( md->sev_call_count[severity_] < UINT_MAX ) md->sev_call_count[severity_]++; if ( md->call_count < UINT_MAX ) md->call_count++; if ( sev_call_count[severity_] < UINT_MAX ) sev_call_count[severity_]++; if ( md->limit_mask & (1 << (severity_ + 1)) ) { limit = md->sev_limit + severity_; call_count = md->sev_call_count + severity_; } if ( !limit && (md->limit_mask & 1) ) { limit = &md->limit; call_count = &md->call_count; } if ( !limit ) { limit = sev_limit + severity_; call_count = sev_call_count + severity_; } if ( *limit == 0 ) { // stop limit disabled } else if ( *limit != UINT_MAX ) { if ( *call_count >= *limit ) actions |= SC_STOP; // force sc_stop() } return actions; } void sc_report_handler::report( sc_severity severity_, const char* msg_type_, const char* msg_, int verbosity_, const char* file_, int line_ ) { sc_msg_def * md = mdlookup(msg_type_); // If the severity of the report is SC_INFO and the specified verbosity // level is greater than the maximum verbosity level of the simulator then // return without any action. if ( (severity_ == SC_INFO) && (verbosity_ > verbosity_level) ) return; // Process the report: if ( !md ) md = add_msg_type(msg_type_); sc_actions actions = execute(md, severity_); sc_report rep(severity_, md, msg_, file_, line_, verbosity_); if ( actions & SC_CACHE_REPORT ) cache_report(rep); handler(rep, actions); } void sc_report_handler::report(sc_severity severity_, const char * msg_type_, const char * msg_, const char * file_, int line_) { sc_msg_def * md = mdlookup(msg_type_); // If the severity of the report is SC_INFO and the maximum verbosity // level is less than SC_MEDIUM return without any action. if ( (severity_ == SC_INFO) && (SC_MEDIUM > verbosity_level) ) return; // Process the report: if ( !md ) md = add_msg_type(msg_type_); sc_actions actions = execute(md, severity_); sc_report rep(severity_, md, msg_, file_, line_); if ( actions & SC_CACHE_REPORT ) cache_report(rep); handler(rep, actions); } // The following method is never called by the simulator. void sc_report_handler::initialize() { #if 0 // actually, i do not know whether we have to reset these. suppress(); force(); set_actions(SC_INFO, SC_DEFAULT_INFO_ACTIONS); set_actions(SC_WARNING, SC_DEFAULT_WARNING_ACTIONS); set_actions(SC_ERROR, SC_DEFAULT_ERROR_ACTIONS); set_actions(SC_FATAL, SC_DEFAULT_FATAL_ACTIONS); #endif sev_call_count[SC_INFO] = 0; sev_call_count[SC_WARNING] = 0; sev_call_count[SC_ERROR] = 0; sev_call_count[SC_FATAL] = 0; msg_def_items * items = messages; while ( items != &msg_terminator ) { for ( int i = 0; i < items->count; ++i ) { items->md[i].call_count = 0; items->md[i].sev_call_count[SC_INFO] = 0; items->md[i].sev_call_count[SC_WARNING] = 0; items->md[i].sev_call_count[SC_ERROR] = 0; items->md[i].sev_call_count[SC_FATAL] = 0; } items = items->next; } // PROCESS ANY ENVIRONMENTAL OVERRIDES: const char* deprecation_warn = std::getenv("SC_DEPRECATION_WARNINGS"); if ( (deprecation_warn!=0) && !strcmp(deprecation_warn,"DISABLE") ) { set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); } } // free the sc_msg_def's allocated by add_msg_type // (or implicit msg_type registration: set_actions, abort_after) // clear last_global_report. void sc_report_handler::release() { delete last_global_report; last_global_report = 0; sc_report_close_default_log(); msg_def_items * items = messages, * newitems = &msg_terminator; messages = &msg_terminator; while ( items != &msg_terminator ) { for ( int i = 0; i < items->count; ++i ) if ( items->md[i].msg_type == items->md[i].msg_type_data ) free(items->md[i].msg_type_data); msg_def_items * prev = items; items = items->next; if ( prev->allocated ) { delete [] prev->md; delete prev; } else { prev->next = newitems; newitems = prev; } } messages = newitems; } sc_msg_def * sc_report_handler::add_msg_type(const char * msg_type_) { sc_msg_def * md = mdlookup(msg_type_); int msg_type_len; if ( md ) return md; msg_def_items * items = new msg_def_items; if ( !items ) return 0; items->count = 1; items->md = new sc_msg_def[items->count]; if ( !items->md ) { delete items; return 0; } memset(items->md, 0, sizeof(sc_msg_def) * items->count); msg_type_len = strlen(msg_type_); if ( msg_type_len > 0 ) { items->md->msg_type_data = (char*) malloc(msg_type_len+1); strcpy( items->md->msg_type_data, msg_type_ ); items->md->id = -1; // backward compatibility with 2.0+ } else { delete [] items->md; delete items; return 0; } items->md->msg_type = items->md->msg_type_data; add_static_msg_types(items); items->allocated = true; return items->md; } void sc_report_handler::add_static_msg_types(msg_def_items * items) { items->allocated = false; items->next = messages; messages = items; } sc_actions sc_report_handler::set_actions(sc_severity severity_, sc_actions actions_) { sc_actions old = sev_actions[severity_]; sev_actions[severity_] = actions_; return old; } sc_actions sc_report_handler::set_actions(const char * msg_type_, sc_actions actions_) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); sc_actions old = md->actions; md->actions = actions_; return old; } sc_actions sc_report_handler::set_actions(const char * msg_type_, sc_severity severity_, sc_actions actions_) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); sc_actions old = md->sev_actions[severity_]; md->sev_actions[severity_] = actions_; return old; } int sc_report_handler::stop_after(sc_severity severity_, int limit) { int old = sev_limit[severity_]; sev_limit[severity_] = limit < 0 ? UINT_MAX: (unsigned) limit; return old; } int sc_report_handler::stop_after(const char * msg_type_, int limit) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); int old = md->limit_mask & 1 ? md->limit: UINT_MAX; if ( limit < 0 ) md->limit_mask &= ~1; else { md->limit_mask |= 1; md->limit = limit; } return old; } int sc_report_handler::stop_after(const char * msg_type_, sc_severity severity_, int limit) { sc_msg_def * md = mdlookup(msg_type_); if ( !md ) md = add_msg_type(msg_type_); int mask = 1 << (severity_ + 1); int old = md->limit_mask & mask ? md->sev_limit[severity_]: UINT_MAX; if ( limit < 0 ) md->limit_mask &= ~mask; else { md->limit_mask |= mask; md->sev_limit[severity_] = limit; } return old; } sc_actions sc_report_handler::suppress(sc_actions mask) { sc_actions old = suppress_mask; suppress_mask = mask; return old; } sc_actions sc_report_handler::suppress() { return suppress(0); } sc_actions sc_report_handler::force(sc_actions mask) { sc_actions old = force_mask; force_mask = mask; return old; } sc_actions sc_report_handler::force() { return force(0); } sc_report_handler_proc sc_report_handler::set_handler(sc_report_handler_proc handler_) { sc_report_handler_proc old = handler; handler = handler_ ? handler_: &sc_report_handler::default_handler; return old; } sc_report_handler_proc sc_report_handler::get_handler() { return handler; } sc_report* sc_report_handler::get_cached_report() { sc_process_b * proc = sc_get_current_process_b(); if ( proc ) return proc->get_last_report(); return last_global_report; } void sc_report_handler::clear_cached_report() { sc_process_b * proc = sc_get_current_process_b(); if ( proc ) proc->set_last_report(0); else { delete last_global_report; last_global_report = 0; } } sc_actions sc_report_handler::get_new_action_id() { for ( sc_actions p = 1; p; p <<= 1 ) { if ( !(p & available_actions) ) // free { available_actions |= p; return p; } } return SC_UNSPECIFIED; } bool sc_report_handler::set_log_file_name(const char* name_) { if ( !name_ ) { free(log_file_name); log_file_name = 0; return false; } if ( log_file_name ) return false; log_file_name = (char*)malloc(strlen(name_)+1); strcpy(log_file_name, name_); return true; } const char * sc_report_handler::get_log_file_name() { return log_file_name; } void sc_report_handler::cache_report(const sc_report& rep) { sc_process_b * proc = sc_get_current_process_b(); if ( proc ) proc->set_last_report(new sc_report(rep)); else { delete last_global_report; last_global_report = new sc_report(rep); } } // // backward compatibility with 2.0+ // sc_msg_def * sc_report_handler::mdlookup(int id) { for ( msg_def_items * item = messages; item; item = item->next ) { for ( int i = 0; i < item->count; ++i ) if ( id == item->md[i].id ) return item->md + i; } return 0; } int sc_report_handler::get_verbosity_level() { return verbosity_level; } int sc_report_handler::set_verbosity_level( int level ) { int result = verbosity_level; verbosity_level = level; return result; } // // CLASS: sc_report_handler // static variables // sc_actions sc_report_handler::suppress_mask = 0; sc_actions sc_report_handler::force_mask = 0; sc_actions sc_report_handler::sev_actions[SC_MAX_SEVERITY] = { /* info */ SC_DEFAULT_INFO_ACTIONS, /* warn */ SC_DEFAULT_WARNING_ACTIONS, /* error */ SC_DEFAULT_ERROR_ACTIONS, /* fatal */ SC_DEFAULT_FATAL_ACTIONS }; // Note that SC_FATAL has a limit of 1 by default sc_actions sc_report_handler::sev_limit[SC_MAX_SEVERITY] = { UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX }; sc_actions sc_report_handler::sev_call_count[SC_MAX_SEVERITY] = { 0, 0, 0, 0 }; sc_report* sc_report_handler::last_global_report = NULL; sc_actions sc_report_handler::available_actions = SC_DO_NOTHING | SC_THROW | SC_LOG | SC_DISPLAY | SC_CACHE_REPORT | SC_INTERRUPT | SC_STOP | SC_ABORT; sc_report_handler_proc sc_report_handler::handler = &sc_report_handler::default_handler; char * sc_report_handler::log_file_name = 0; sc_report_handler::msg_def_items * sc_report_handler::messages = &sc_report_handler::msg_terminator; sc_actions sc_report_handler::catch_actions = SC_DEFAULT_CATCH_ACTIONS; sc_actions sc_report_handler::set_catch_actions(sc_actions act) { //sc_assert( !(act | SC_THROW) ); // allow SC_THROW? sc_actions old = catch_actions; catch_actions = act; return old; } sc_actions sc_report_handler::get_catch_actions() { return catch_actions; } // // predefined messages // SC_API const char SC_ID_REGISTER_ID_FAILED_[] = "register_id failed"; SC_API const char SC_ID_UNKNOWN_ERROR_[] = "unknown error"; SC_API const char SC_ID_WITHOUT_MESSAGE_[] = ""; SC_API const char SC_ID_NOT_IMPLEMENTED_[] = "not implemented"; SC_API const char SC_ID_INTERNAL_ERROR_[] = "internal error"; SC_API const char SC_ID_ASSERTION_FAILED_[] = "assertion failed"; SC_API const char SC_ID_OUT_OF_BOUNDS_[] = "out of bounds"; SC_API const char SC_ID_ABORT_[] = "simulation aborted"; #define DEFINE_MSG(id,n) \ { \ (id), \ 0u, {0u}, /* actions */ \ 0u, {0u}, 0u, /* limits */ \ 0u, {0u}, NULL, /* call counters */ \ n \ } static sc_msg_def default_msgs[] = { DEFINE_MSG(SC_ID_REGISTER_ID_FAILED_, 800), DEFINE_MSG(SC_ID_UNKNOWN_ERROR_, 0), DEFINE_MSG(SC_ID_WITHOUT_MESSAGE_, 1), DEFINE_MSG(SC_ID_NOT_IMPLEMENTED_, 2), DEFINE_MSG(SC_ID_INTERNAL_ERROR_, 3), DEFINE_MSG(SC_ID_ASSERTION_FAILED_, 4), DEFINE_MSG(SC_ID_OUT_OF_BOUNDS_, 5), DEFINE_MSG(SC_ID_ABORT_, 99) }; sc_report_handler::msg_def_items sc_report_handler::msg_terminator = { default_msgs, sizeof(default_msgs)/sizeof(*default_msgs), false, NULL }; void sc_abort() { SC_REPORT_INFO(SC_ID_ABORT_, 0); abort(); } void sc_assertion_failed(const char* msg, const char* file, int line) { sc_report_handler::report( SC_FATAL, SC_ID_ASSERTION_FAILED_ , msg, file, line ); sc_abort(); } } // namespace sc_core // $Log: sc_report_handler.cpp,v $ // Revision 1.9 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.8 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.7 2011/08/07 19:08:08 acg // Andy Goodrich: moved logs to end of file so line number synching works // better between versions. // // Revision 1.6 2011/08/07 18:56:03 acg // Philipp A. Hartmann: added cast to ? : to eliminate clang warning message. // // Revision 1.5 2011/03/23 16:16:49 acg // Andy Goodrich: finish message verbosity support. // // Revision 1.4 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.3 2011/02/11 13:25:55 acg // Andy Goodrich: Philipp's changes for sc_unwind_exception. // // Revision 1.2 2011/02/01 23:02:05 acg // Andy Goodrich: IEEE 1666 2011 changes. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.7 2006/05/26 20:35:52 acg // Andy Goodrich: removed debug message that should not have been left in. // // Revision 1.6 2006/03/21 00:00:37 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // // Revision 1.5 2006/01/31 21:42:07 acg // Andy Goodrich: Added checks for SC_DEPRECATED_WARNINGS being defined as // DISABLED. If so, we turn off the /IEEE_Std_1666/deprecated message group. // // Revision 1.4 2006/01/26 21:08:17 acg // Andy Goodrich: conversion to use sc_is_running instead of deprecated // sc_simcontext::is_running() // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // Taf! systemc-2.3.4/src/sysc/utils/sc_stop_here.cpp0000644000175000017500000000735714342422106021172 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_stop_here.cpp -- Function provided for debugging purposes. This file is always compiled in debug mode, such that setting a breakpoint at this function can help locate the cause of a SystemC error or warning. Original Author: Martin Janssen, Synopsys, Inc., 2001-11-14 CHANGE LOG AT END OF FILE *****************************************************************************/ #include "sysc/utils/sc_stop_here.h" namespace sc_core { static const char* info_id = 0; static const char* warning_id = 0; static const char* error_id = 0; static const char* fatal_id = 0; // ---------------------------------------------------------------------------- // FUNCTION : sc_interrupt_here // // Debugging aid for warning, error, and fatal reports. // This function *cannot* be inlined. // ---------------------------------------------------------------------------- void sc_interrupt_here( const char* id, sc_severity severity ) { // you can set a breakpoint at some of the lines below, either to // interrupt with any severity, or to interrupt with a specific severity switch( severity ) { case SC_INFO: info_id = id; break; case SC_WARNING: warning_id = id; break; case SC_ERROR: error_id = id; break; default: case SC_FATAL: fatal_id = id; break; } } // ---------------------------------------------------------------------------- // FUNCTION : sc_stop_here // // Debugging aid for warning, error, and fatal reports. // This function *cannot* be inlined. // ---------------------------------------------------------------------------- void sc_stop_here( const char* id, sc_severity severity ) { // you can set a breakpoint at some of the lines below, either to // stop with any severity, or to stop with a specific severity switch( severity ) { case SC_INFO: info_id = id; break; case SC_WARNING: warning_id = id; break; case SC_ERROR: error_id = id; break; default: case SC_FATAL: fatal_id = id; break; } } } // namespace sc_core // $Log: sc_stop_here.cpp,v $ // Revision 1.4 2011/08/26 21:49:08 acg // Philipp A. Hartmann: eliminate compiler warning by moving static variables // out of functions. // // Revision 1.3 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // Taf! systemc-2.3.4/src/sysc/utils/sc_vector.cpp0000644000175000017500000001212314342422106020467 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_vector.cpp - A vector of named (SystemC) objects (modules, ports, channels) Original Author: Philipp A. Hartmann, OFFIS CHANGE LOG AT END OF FILE *****************************************************************************/ #include "sc_vector.h" #include "sysc/utils/sc_utils_ids.h" #include "sysc/kernel/sc_simcontext.h" #include "sysc/kernel/sc_simcontext_int.h" #include "sysc/kernel/sc_object_manager.h" #include namespace sc_core { sc_vector_base::sc_vector_base() : sc_object( sc_gen_unique_name("vector") ) , vec_() , objs_vec_() {} std::vector< sc_object* > const & sc_vector_base::get_elements() const { if( !objs_vec_ ) objs_vec_ = new std::vector< sc_object* >; if( objs_vec_->size() || !size() ) return *objs_vec_; objs_vec_->reserve( size() ); for( const_iterator it=begin(); it != end(); ++it ) if( sc_object* obj = object_cast(*it) ) objs_vec_->push_back( obj ); return *objs_vec_; } sc_object* sc_vector_base::implicit_cast( ... ) const { SC_REPORT_ERROR( SC_ID_VECTOR_NONOBJECT_ELEMENTS_, name() ); return NULL; } void sc_vector_base::check_index( size_type i ) const { if( i>=size() ) { std::stringstream str; str << name() << "[" << i << "] >= size() = " << size(); SC_REPORT_ERROR( SC_ID_OUT_OF_BOUNDS_, str.str().c_str() ); sc_abort(); // can't recover from here } } bool sc_vector_base::check_init( size_type n ) const { if ( !n ) return false; if( size() ) // already filled { std::stringstream str; str << name() << ", size=" << size() << ", requested size=" << n; SC_REPORT_ERROR( SC_ID_VECTOR_INIT_CALLED_TWICE_ , str.str().c_str() ); return false; } return true; } void sc_vector_base::report_empty_bind( const char* kind_, bool dst_empty_ ) const { std::stringstream str; str << "target `" << name() << "' " << "(" << kind_ << ") "; if( !size() ) { str << "not initialised yet"; } else if ( dst_empty_ ) { str << "empty range given"; } else { str << "empty destination range given"; } SC_REPORT_WARNING( SC_ID_VECTOR_BIND_EMPTY_, str.str().c_str() ); } std::string sc_vector_base::make_name( const char* prefix, size_type /* idx */ ) { // TODO: How to handle name clashes due to interleaved vector // creation and init()? // sc_vector< foo > v1, v2; // v1.name() == "vector", v2.name() == "vector_0" // v1.init( 1 ); -> v1[0].name() == "vector_0" -> clash return sc_gen_unique_name( prefix ); } sc_vector_base::context_scope::context_scope( sc_vector_base* owner ) : owner_(NULL) { sc_simcontext* simc = owner->simcontext(); sc_assert( simc == sc_get_curr_simcontext() ); sc_object* parent = owner->get_parent_object(); sc_object* active = simc->active_object(); if (parent != active) // override object creation context { owner_ = owner; owner->simcontext()->get_object_manager() ->hierarchy_push( owner_->get_parent_object() ); } } sc_vector_base::context_scope::~context_scope() { if (owner_) // restore current object context { sc_object* obj = owner_->simcontext()->get_object_manager()->hierarchy_pop(); sc_assert( obj == owner_->get_parent_object() ); } } } // namespace sc_core // $Log: sc_vector.cpp,v $ // Revision 1.6 2011/08/26 20:46:20 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.5 2011/04/01 22:35:19 acg // Andy Goodrich: spelling fix. // // Revision 1.4 2011/03/28 13:03:09 acg // Andy Goodrich: Philipp's latest update. // // Revision 1.3 2011/03/23 16:16:28 acg // Philipp A. Hartmann: rebase implementation on void* // - supports virtual inheritance from sc_object again // - build up get_elements result on demand // - still requires element type to be derived from sc_object // // Revision 1.2 2011/02/14 17:54:25 acg // Andy Goodrich: Philipp's addition of early bind checks. // // Revision 1.1 2011/02/13 21:54:14 acg // Andy Goodrich: turn on embedding of cvs log records. // Taf! systemc-2.3.4/src/sysc/utils/sc_typeindex.h0000644000175000017500000000523014342422106020644 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_typeindex.h -- Wrapper around std::typeinfo to allow usage in containers Original Author: Philipp A. Hartmann, Intel Corporation NOTE: The type sc_type_index is implementation-defined and should not be used within user models. After C++11 is fully adopted, all uses shall be replaced by std::type_index. *****************************************************************************/ #ifndef SYSC_UTILS_SC_TYPEINDEX_H_INCLUDED_ #define SYSC_UTILS_SC_TYPEINDEX_H_INCLUDED_ #include "sysc/kernel/sc_cmnhdr.h" // SC_CPLUSPLUS #include #if SC_CPLUSPLUS >= 201103L #include // C++11 has std::typeindex to serve our needs namespace sc_core { typedef std::type_index sc_type_index; } // namespace sc_core #else // C++03 implementation namespace sc_core { class sc_type_index { public: sc_type_index(const std::type_info& ti) : info_(&ti) {} bool operator==( const sc_type_index& rhs ) const { return *info_ == *rhs.info_; } bool operator!=( const sc_type_index& rhs ) const { return *info_ != *rhs.info_; } bool operator< ( const sc_type_index& rhs ) const { return info_->before( *rhs.info_ ); } bool operator<=( const sc_type_index& rhs ) const { return !(*this > rhs); } bool operator> ( const sc_type_index& rhs ) const { return rhs.info_->before( *info_ ); } bool operator>=( const sc_type_index& rhs ) const { return !(*this < rhs); } const char* name() const { return info_->name(); } private: std::type_info const* info_; }; // class sc_type_index } // namespace sc_core #endif // SC_CPLUSPLUS < 201103L #endif // SYSC_UTILS_SC_TYPEINDEX_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/utils/sc_hash.h0000644000175000017500000003757214342422106017574 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_hash.cpp -- Implementation of a chained hash table with MTF (move-to-front). Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_HASH_H #define SC_HASH_H #include "sysc/kernel/sc_simcontext.h" namespace sc_core { extern SC_API unsigned default_int_hash_fn(const void*); extern SC_API unsigned default_ptr_hash_fn(const void*); extern SC_API unsigned default_str_hash_fn(const void*); class sc_phash_elem; class sc_phash_base_iter; template //template class class sc_pdhash_iter; //decl. -- Amit const int PHASH_DEFAULT_MAX_DENSITY = 5; const int PHASH_DEFAULT_INIT_TABLE_SIZE = 11; extern SC_API const double PHASH_DEFAULT_GROW_FACTOR; const bool PHASH_DEFAULT_REORDER_FLAG = true; class SC_API sc_phash_base { friend class sc_phash_base_iter; typedef sc_phash_base_iter iterator; public: typedef unsigned (*hash_fn_t)(const void*); typedef int (*cmpr_fn_t)(const void*, const void*); protected: void* default_value; int num_bins; int num_entries; int max_density; int reorder_flag; double grow_factor; sc_phash_elem** bins; hash_fn_t hash; cmpr_fn_t cmpr; void rehash(); unsigned do_hash(const void* key) const { return (*hash)(key) % num_bins; } sc_phash_elem* add_direct(void* key, void* contents, unsigned hash_val); sc_phash_elem* find_entry_c(unsigned hv, const void* k, sc_phash_elem*** plast); sc_phash_elem* find_entry_q(unsigned hv, const void* k, sc_phash_elem*** plast); sc_phash_elem* find_entry(unsigned hv, const void* k, sc_phash_elem*** plast=0) const { /* Got rid of member func. pointer and replaced with if-else */ /* Amit (5/14/99) */ if( cmpr == 0 ) return ((sc_phash_base*)this)->find_entry_q( hv, k, plast ); else return ((sc_phash_base*)this)->find_entry_c( hv, k, plast ); } public: sc_phash_base( void* def = 0, int size = PHASH_DEFAULT_INIT_TABLE_SIZE, int density = PHASH_DEFAULT_MAX_DENSITY, double grow = PHASH_DEFAULT_GROW_FACTOR, bool reorder = PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn = default_ptr_hash_fn, cmpr_fn_t cmpr_fn = 0 ); ~sc_phash_base(); void set_cmpr_fn(cmpr_fn_t); void set_hash_fn(hash_fn_t); bool empty() const { return (num_entries == 0); } unsigned count() const { return num_entries; } void erase(); void erase(void (*kfree)(void*)); void copy( const sc_phash_base* ); void copy( const sc_phash_base& b ) { copy(&b); } void copy( const sc_phash_base& b, void* (*kdup)(const void*), void (*kfree)(void*)); int insert( void* k, void* c ); int insert( void* k ) { return insert(k, default_value); } int insert( void* k, void* c, void* (*kdup)(const void*) ); int insert_if_not_exists(void* k, void* c); int insert_if_not_exists(void* k) { return insert_if_not_exists(k, default_value); } int insert_if_not_exists(void* k, void* c, void* (*kdup)(const void*)); int remove(const void* k); int remove(const void* k, void** pk, void** pc); int remove(const void* k, void (*kfree)(void*)); int remove_by_contents(const void* c); int remove_by_contents(bool (*predicate)(const void*, void*), void* arg); int remove_by_contents(const void* c, void (*kfree)(void*)); int remove_by_contents(bool (*predicate)(const void*, void*), void* arg, void (*kfree)(void*)); int lookup(const void* k, void** pc) const; bool contains(const void* k) const { return (lookup(k, 0) != 0); } void* operator[](const void* key) const; }; class SC_API sc_phash_base_iter { protected: sc_phash_base* table; sc_phash_elem* entry; sc_phash_elem* next; sc_phash_elem** last; int index; public: void reset(sc_phash_base* t); void reset(sc_phash_base& t) { reset(&t); } sc_phash_base_iter(sc_phash_base* t) : table(t), entry(0), next(0), last(0), index(0) { reset(t); } sc_phash_base_iter(sc_phash_base& t) : table(&t), entry(0), next(0), last(0), index(0) { reset(t); } ~sc_phash_base_iter() { } bool empty() const; void step(); void operator++(int) { step(); } void remove(); void remove(void (*kfree)(void*)); void* key() const; void* contents() const; void* set_contents(void* c); }; template< class K, class C > class sc_phash_iter; template< class K, class C > class sc_phash : public sc_phash_base { friend class sc_phash_iter; public: typedef sc_phash_iter iterator; sc_phash( C def = (C) 0, int size = PHASH_DEFAULT_INIT_TABLE_SIZE, int density = PHASH_DEFAULT_MAX_DENSITY, double grow = PHASH_DEFAULT_GROW_FACTOR, bool reorder = PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn = default_ptr_hash_fn, cmpr_fn_t cmpr_fn = 0 ) : sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { } ~sc_phash() { } void copy(const sc_phash* b) { sc_phash_base::copy(b); } void copy(const sc_phash& b) { sc_phash_base::copy(b); } void copy(const sc_phash& b, void* (*kdup)(const void*), void (*kfree)(void*)) { sc_phash_base::copy(b, kdup, kfree); } int insert(K k, C c) { return sc_phash_base::insert((void*) k, (void*) c); } int insert(K k) { return sc_phash_base::insert((void*) k, default_value); } int insert(K k, C c, void* (*kdup)(const void*)) { return sc_phash_base::insert((void*) k, (void*) c, kdup); } int insert_if_not_exists(K k, C c) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c); } int insert_if_not_exists(K k) { return sc_phash_base::insert_if_not_exists((void*) k, default_value); } int insert_if_not_exists(K k, C c, void* (*kdup)(const void*)) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c, kdup); } int remove(K k) { return sc_phash_base::remove((const void*) k); } int remove(K k, K* pk, C* pc) { return sc_phash_base::remove((const void*) k, (void**) pk, (void**) pc); } int remove(K k, void (*kfree)(void*)) { return sc_phash_base::remove((const void*) k, kfree); } int remove_by_contents(C c) { return sc_phash_base::remove_by_contents((const void*) c); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg) { return sc_phash_base::remove_by_contents(predicate, arg); } int remove_by_contents(const void* c, void (*kfree)(void*)) { return sc_phash_base::remove_by_contents(c, kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg, void (*kfree)(void*)) { return sc_phash_base::remove_by_contents(predicate, arg, kfree); } int lookup(K k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void**) pc); } bool contains(K k) const { return sc_phash_base::contains((const void*) k); } C operator[](K k) const { return (C) sc_phash_base::operator[]((const void*) k); } }; template< class K, class C > class sc_phash_iter : public sc_phash_base_iter { public: sc_phash_iter(sc_phash* t) : sc_phash_base_iter(t) { } sc_phash_iter(sc_phash& t) : sc_phash_base_iter(t) { } ~sc_phash_iter() { } void reset(sc_phash* t) { sc_phash_base_iter::reset(t); } void reset(sc_phash& t) { sc_phash_base_iter::reset(t); } K key() const { return (K) sc_phash_base_iter::key(); } C contents() const { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); } }; template< class K, class C > class sc_pdhash : public sc_phash_base { friend class sc_pdhash_iter; private: void* (*kdup)(const void*); //eliminated braces around void* -- Amit void (*kfree)(void*); public: typedef sc_pdhash_iter iterator; sc_pdhash( C def = (C) 0, int size = PHASH_DEFAULT_INIT_TABLE_SIZE, int density = PHASH_DEFAULT_MAX_DENSITY, double grow = PHASH_DEFAULT_GROW_FACTOR, bool reorder = PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn = (hash_fn_t) 0, // defaults added -- cmpr_fn_t cmpr_fn = (cmpr_fn_t) 0, // Amit void* (*kdup_fn)(const void*) = 0, void (*kfree_fn)(void*) = 0 ) : sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { kdup = kdup_fn; kfree = kfree_fn; } ~sc_pdhash() { erase(); } void erase() { sc_phash_base::erase(kfree); } void copy(const sc_pdhash& b) { sc_phash_base::copy(b, kdup, kfree); } int insert(K k, C c) { return sc_phash_base::insert((void*) k, (void*) c, kdup); } int insert(K k) { return sc_phash_base::insert((void*) k, default_value, kdup); } int insert_if_not_exists(K k, C c) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c, kdup); } int insert_if_not_exists(K k) { return sc_phash_base::insert_if_not_exists((void*) k, default_value, kdup); } int remove(K k) { return sc_phash_base::remove((const void*) k, kfree); } int remove(K k, K* pk, C* pc) { return sc_phash_base::remove((const void*) k, (void**) pk, (void**) pc); } int remove_by_contents(C c) { return sc_phash_base::remove_by_contents((const void*) c, kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg) { return sc_phash_base::remove_by_contents(predicate, arg, kfree); } int lookup(K k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void**) pc); } bool contains(K k) const { return sc_phash_base::contains((const void*) k); } C operator[](K k) const { return (C) sc_phash_base::operator[]((const void*) k); } }; template< class K, class C > class sc_pdhash_iter : public sc_phash_base_iter { public: sc_pdhash_iter(sc_pdhash* t) : sc_phash_base_iter(t) { } sc_pdhash_iter(sc_pdhash& t) : sc_phash_base_iter(t) { } ~sc_pdhash_iter() { } void reset(sc_pdhash* t) { sc_phash_base_iter::reset(t); } void reset(sc_pdhash& t) { sc_phash_base_iter::reset(t); } void remove() { sc_phash_base_iter::remove(((sc_pdhash*) table)->kfree); } K key() const { return (K) sc_phash_base_iter::key(); } C contents() const { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); } }; extern SC_API int sc_strhash_cmp( const void*, const void* ); extern SC_API void sc_strhash_kfree(void*); extern SC_API void* sc_strhash_kdup(const void*); template< class C > // template class decl. class sc_strhash_iter; // --Amit template< class C > class sc_strhash : public sc_phash_base { friend class sc_strhash_iter; public: typedef sc_strhash_iter iterator; sc_strhash( C def = (C) 0, int size = PHASH_DEFAULT_INIT_TABLE_SIZE, int density = PHASH_DEFAULT_MAX_DENSITY, double grow = PHASH_DEFAULT_GROW_FACTOR, bool reorder = PHASH_DEFAULT_REORDER_FLAG, unsigned (*hash_fn)(const void*) = default_str_hash_fn, int (*cmpr_fn)(const void*, const void*) = sc_strhash_cmp ) : sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { } ~sc_strhash() { erase(); } void erase() { sc_phash_base::erase(sc_strhash_kfree); } void copy(const sc_strhash* b) { sc_phash_base::copy(*b, sc_strhash_kdup, sc_strhash_kfree); } void copy(const sc_strhash& b) { sc_phash_base::copy(b, sc_strhash_kdup, sc_strhash_kfree); } int insert(char* k, C c) { return sc_phash_base::insert((void*) k, (void*) c, sc_strhash_kdup); } int insert(char* k) { return sc_phash_base::insert((void*) k, default_value, sc_strhash_kdup); } int insert_if_not_exists(char* k, C c) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c, sc_strhash_kdup); } int insert_if_not_exists(char* k) { return sc_phash_base::insert_if_not_exists((void*) k, default_value, sc_strhash_kdup); } int remove(const char* k) { return sc_phash_base::remove((const void*) k, sc_strhash_kfree); } int remove(const char* k, char** pk, C* pc) { return sc_phash_base::remove((const void*) k, (void**) pk, (void**) pc); } int remove_by_contents(C c) { return sc_phash_base::remove_by_contents((const void*) c, sc_strhash_kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg) { return sc_phash_base::remove_by_contents(predicate, arg, sc_strhash_kfree); } int lookup(const char* k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void** )pc); } bool contains(const char* k) const { return sc_phash_base::contains((const void*) k); } C operator[](const char* k) const { return (C) sc_phash_base::operator[]((const void*) k); } }; template class sc_strhash_iter : public sc_phash_base_iter { public: sc_strhash_iter ( sc_strhash* t ) : sc_phash_base_iter(t) { } sc_strhash_iter ( sc_strhash& t ) : sc_phash_base_iter(t) { } ~sc_strhash_iter() { } void reset ( sc_strhash* t ) { sc_phash_base_iter::reset(t); } void reset ( sc_strhash& t ) { sc_phash_base_iter::reset(t); } void remove() { sc_phash_base_iter::remove(sc_strhash_kfree); } const char* key() { return (const char*) sc_phash_base_iter::key(); } C contents() { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); } }; } // namespace sc_core // $Log: sc_hash.h,v $ // Revision 1.5 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.4 2011/08/26 20:46:16 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:43 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. #endif systemc-2.3.4/src/sysc/utils/sc_utils_ids.cpp0000644000175000017500000001127514342422106021173 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_utils_ids.cpp -- Report ids for the utils code. Original Author: Martin Janssen, Synopsys, Inc., 2002-01-17 CHANGE LOG AT END OF FILE *****************************************************************************/ #include #include #include "sysc/utils/sc_report.h" namespace sc_core { #define SC_DEFINE_MESSAGE(id,unused,text) extern SC_API const char id[] = text; #include "sysc/utils/sc_utils_ids.h" #include "sysc/kernel/sc_kernel_ids.h" #include "sysc/communication/sc_communication_ids.h" #include "sysc/datatypes/bit/sc_bit_ids.h" #include "sysc/datatypes/fx/sc_fx_ids.h" #include "sysc/datatypes/int/sc_int_ids.h" #include "sysc/tracing/sc_tracing_ids.h" #undef SC_DEFINE_MESSAGE static sc_msg_def texts[] = { #define SC_DEFINE_MESSAGE(id,n,unused) \ { (id), 0u, {0u}, 0u, {0u}, 0u, 0u, {0u}, 0, n }, #undef SC_UTILS_IDS_H #include "sysc/utils/sc_utils_ids.h" #undef SC_KERNEL_IDS_H #include "sysc/kernel/sc_kernel_ids.h" #undef SC_COMMUNICATION_IDS_H #include "sysc/communication/sc_communication_ids.h" #undef SC_BIT_IDS_H #include "sysc/datatypes/bit/sc_bit_ids.h" #undef SC_FX_IDS_H #include "sysc/datatypes/fx/sc_fx_ids.h" #undef SC_INT_IDS_H #include "sysc/datatypes/int/sc_int_ids.h" #undef SC_TRACING_IDS_H #include "sysc/tracing/sc_tracing_ids.h" #undef SC_DEFINE_MESSAGE }; static sc_report_handler::msg_def_items items = { texts, sizeof(texts)/sizeof(*texts), false, 0 }; static int initialize(); static int forty_two = initialize(); static int initialize() { (void)forty_two; /* avoid unused variable warning */ sc_report_handler::add_static_msg_types(&items); // PROCESS ANY ENVIRONMENTAL OVERRIDES: const char* deprecation_warn = std::getenv("SC_DEPRECATION_WARNINGS"); if ( (deprecation_warn!=0) && !std::strcmp(deprecation_warn,"DISABLE") ) { sc_report_handler::set_actions( SC_ID_IEEE_1666_DEPRECATION_ , SC_DO_NOTHING); } return 42; } } // namespace sc_core /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Description of Modification: Alex Riesen, Synopsys, Inc., 2003-02-02 ported to SystemC 2.1 exception reporting. *****************************************************************************/ // $Log: sc_utils_ids.cpp,v $ // Revision 1.5 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.3 2009/02/28 00:27:57 acg // Andy Goodrich: includes for C++ library types to keep compiler happy. // // Revision 1.2 2008/05/20 20:43:21 acg // Andy Goodrich: Added includes and to pick up their // declarations. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.6 2006/01/31 21:42:07 acg // Andy Goodrich: Added checks for SC_DEPRECATED_WARNINGS being defined as // DISABLED. If so, we turn off the /IEEE_Std_1666/deprecated message group. // // Revision 1.5 2006/01/24 21:59:59 acg // Andy Goodrich: removed sc_trace_ids.h since its only message has been // replaced by SC_ID_IEEE_1666_DEPRECATION_ message. // // Revision 1.4 2006/01/24 20:53:41 acg // Andy Goodrich: added warnings indicating that use of integer ids in reports // is deprecated. Added tracing/sc_trace_ids.h to message list. // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // Taf! systemc-2.3.4/src/sysc/utils/sc_stop_here.h0000644000175000017500000000534214342422106020627 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_stop_here.h -- Function provided for debugging purposes. This file is always compiled in debug mode, such that setting a breakpoint at this function can help locate the cause of a SystemC error or warning. Original Author: Martin Janssen, Synopsys, Inc., 2001-11-14 CHANGE LOG AT END OF FILE *****************************************************************************/ // $Log: sc_stop_here.h,v $ // Revision 1.3 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // #ifndef SC_STOP_HERE_H #define SC_STOP_HERE_H #include "sysc/utils/sc_report.h" namespace sc_core { // ---------------------------------------------------------------------------- // FUNCTION : sc_interrupt_here // // Debugging aid for interrupt warning, error, and fatal reports. // ---------------------------------------------------------------------------- extern SC_API void sc_interrupt_here( const char* id, sc_severity severity ); // ---------------------------------------------------------------------------- // FUNCTION : sc_stop_here // // Debugging aid for warning, error, and fatal reports. // ---------------------------------------------------------------------------- extern SC_API void sc_stop_here( const char* id, sc_severity severity ); } // namespace sc_core #endif // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // // Taf! systemc-2.3.4/src/sysc/utils/sc_vector.h0000644000175000017500000006112614342422106020143 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_vector.h - A vector of named (SystemC) objects (modules, ports, channels) Original Author: Philipp A. Hartmann, OFFIS CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_VECTOR_H_INCLUDED_ #define SC_VECTOR_H_INCLUDED_ #include #include #include #include // std::swap #include "sysc/kernel/sc_object.h" #if SC_CPLUSPLUS >= 201103L // use C++11 for type traits # include #else // use Boost for type traits # include "sysc/packages/boost/config.hpp" # include "sysc/packages/boost/utility/enable_if.hpp" #endif // type traits #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(push) #pragma warning(disable: 4251) // DLL import for std::vector #endif namespace sc_core { namespace sc_meta { #if SC_CPLUSPLUS >= 201103L // use C++11 for type traits using std::enable_if; using std::remove_const; using std::is_same; using std::is_const; # define SC_STATIC_CONSTANT_(Type,Value) \ static const Type Value #else // use Boost/local implementation for type traits template struct enable_if : sc_boost::enable_if_c {}; # define SC_STATIC_CONSTANT_(Type,Value) \ SC_BOOST_STATIC_CONSTANT(Type,Value) // simplistic version to reduce Boost usage template< typename T > struct remove_const { typedef T type; }; template< typename T > struct remove_const { typedef T type; }; template< typename T, typename U > struct is_same { SC_BOOST_STATIC_CONSTANT( bool, value = false ); }; template< typename T > struct is_same { SC_BOOST_STATIC_CONSTANT( bool, value = true ); }; template< typename T > struct is_const { SC_BOOST_STATIC_CONSTANT( bool, value = false ); }; template< typename T > struct is_const< const T> { SC_BOOST_STATIC_CONSTANT( bool, value = true ); }; #endif // type traits template< typename CT, typename T > struct is_more_const { SC_STATIC_CONSTANT_( bool, value = ( is_same< typename remove_const::type , typename remove_const::type >::value && ( is_const::value >= is_const::value ) ) ); }; struct special_result {}; template< typename T > struct remove_special_fptr {}; template< typename T > struct remove_special_fptr< special_result& (*)( T ) > { typedef T type; }; #define SC_RPTYPE_(Type) \ ::sc_core::sc_meta::remove_special_fptr \ < ::sc_core::sc_meta::special_result& (*) Type >::type::value #define SC_ENABLE_IF_( Cond ) \ typename ::sc_core::sc_meta::enable_if \ < SC_RPTYPE_(Cond) >::type * = NULL } // namespace sc_meta // forward declarations template< typename T > class sc_vector; template< typename T, typename MT > class sc_vector_assembly; template< typename T, typename MT > class sc_vector_iter; // implementation-defined template< typename Container, typename ArgumentIterator > typename Container::iterator sc_vector_do_bind( Container & cont , ArgumentIterator first , ArgumentIterator last , typename Container::iterator from ); // implementation-defined template< typename Container, typename ArgumentIterator > typename Container::iterator sc_vector_do_operator_paren( Container & cont , ArgumentIterator first , ArgumentIterator last , typename Container::iterator from ); class sc_vector_element; // opaque pointer class SC_API sc_vector_base : public sc_object { template friend class sc_vector_assembly; template friend class sc_vector_iter; public: typedef sc_vector_element* handle_type; typedef std::vector< handle_type > storage_type; typedef storage_type::size_type size_type; typedef storage_type::difference_type difference_type; const char * kind() const { return "sc_vector"; } std::vector const & get_elements() const; size_type size() const { return vec_.size(); } protected: // begin implementation defined typedef storage_type::iterator iterator; typedef storage_type::const_iterator const_iterator; sc_vector_base(); sc_vector_base( const char* prefix ) : sc_object( prefix ) , vec_() , objs_vec_(0) {} ~sc_vector_base() { delete objs_vec_; } void * at( size_type i ) { return vec_[i]; } void const * at( size_type i ) const { return vec_[i]; } void reserve( size_type n ) { vec_.reserve(n); } void clear() { vec_.clear(); } void push_back( void* item ) { vec_.push_back( static_cast(item) ); } void check_index( size_type i ) const; bool check_init( size_type n ) const; static std::string make_name( const char* prefix, size_type index ); iterator begin() { return vec_.begin(); } iterator end() { return vec_.end(); } const_iterator begin() const { return vec_.begin(); } const_iterator end() const { return vec_.end(); } virtual sc_object* object_cast( void* ) const = 0; sc_object* implicit_cast( sc_object* p ) const { return p; } sc_object* implicit_cast( ... /* incompatible */ ) const; class SC_API context_scope { sc_vector_base* owner_; public: explicit context_scope(sc_vector_base* owner); ~context_scope(); }; public: void report_empty_bind( const char* kind_, bool dst_range_ ) const; private: storage_type vec_; mutable std::vector< sc_object* >* objs_vec_; // disabled sc_vector_base( const sc_vector_base& ); sc_vector_base& operator=( const sc_vector_base& ); }; // sc_vector_base // iterator access adapters template< typename ElementType > struct sc_direct_access { typedef ElementType element_type; typedef element_type type; typedef typename sc_meta::remove_const::type plain_type; typedef sc_direct_access< type > policy; typedef sc_direct_access< plain_type > non_const_policy; typedef sc_direct_access< const plain_type > const_policy; sc_direct_access(){} sc_direct_access( const non_const_policy& ) {} // convert from any policy to (const) direct policy template sc_direct_access( const U& , SC_ENABLE_IF_(( sc_meta::is_more_const )) ) {} type* get( type* this_ ) const { return this_; } }; // iterator access adapters template< typename ElementType , typename AccessType > class sc_member_access { public: template< typename, typename > friend class sc_member_access; typedef ElementType element_type; typedef AccessType access_type; typedef access_type (ElementType::*member_type); typedef access_type type; typedef typename sc_meta::remove_const::type plain_type; typedef typename sc_meta::remove_const::type plain_elem_type; typedef sc_member_access< element_type, access_type > policy; typedef sc_member_access< plain_elem_type, plain_type > non_const_policy; typedef sc_member_access< const plain_elem_type, const plain_type > const_policy; sc_member_access( member_type ptr ) : ptr_(ptr) {} sc_member_access( const non_const_policy& other ) : ptr_(other.ptr_) {} access_type * get( element_type* this_ ) const { return &(this_->*ptr_); } private: member_type ptr_; }; // sc_member_access template< typename ElementType , typename AccessPolicy = sc_direct_access > class sc_vector_iter : private AccessPolicy { typedef ElementType element_type; typedef typename AccessPolicy::policy access_policy; typedef typename AccessPolicy::non_const_policy non_const_policy; typedef typename AccessPolicy::const_policy const_policy; typedef typename sc_meta::remove_const::type plain_type; typedef const plain_type const_plain_type; typedef typename sc_direct_access::const_policy const_direct_policy; friend class sc_vector< plain_type >; template< typename, typename > friend class sc_vector_assembly; template< typename, typename > friend class sc_vector_iter; typedef sc_vector_iter this_type; typedef sc_vector vector_type; typedef sc_vector_base::storage_type storage_type; // select correct base-type iterator template< typename U > struct select_iter { typedef typename storage_type::iterator type; }; template< typename U > struct select_iter< const U > { typedef typename storage_type::const_iterator type; }; typedef typename select_iter::type raw_iterator; typedef sc_vector_iter< const_plain_type, const_policy > const_iterator; typedef sc_vector_iter< const_plain_type, const_direct_policy > const_direct_iterator; // underlying vector iterator raw_iterator it_; sc_vector_iter( raw_iterator it, access_policy acc = access_policy() ) : access_policy(acc), it_(it) {} access_policy const & get_policy() const { return *this; } public: // interface for Random Access Iterator category, // see ISO/IEC 14882:2003(E), 24.1 [lib.iterator.requirements] typedef std::random_access_iterator_tag iterator_category; typedef std::ptrdiff_t difference_type; typedef typename access_policy::type value_type; typedef value_type & reference; typedef value_type * pointer; sc_vector_iter() : access_policy(), it_() {} // iterator conversions to more const, and/or direct iterators // // Note: There is a minor risk to match unrelated classes (i.e. not sc_vector_iter), // but MSVC 2005 does not correctly consider a restricted conversion constructor // sc_vector_iter( const sc_vector_iter, SC_ENABLE_IF_ ...). // To reduce this risk, the types used in the enable-if condition could be further // tailored towards sc_vector(_iter), should the need arise. // // See also: sc_direct_access conversion constructor template< typename It > sc_vector_iter( const It& it , SC_ENABLE_IF_(( sc_meta::is_more_const< element_type , typename It::policy::element_type > )) ) : access_policy( it.get_policy() ), it_( it.it_ ) {} // step this_type& operator++(){ ++it_; return *this; } this_type& operator--(){ --it_; return *this; } this_type operator++(int){ this_type old(*this); ++it_; return old; } this_type operator--(int){ this_type old(*this); --it_; return old; } // advance this_type operator+( difference_type n ) const { return this_type( it_ + n, get_policy()); } this_type operator-( difference_type n ) const { return this_type( it_ - n, get_policy()); } this_type& operator+=( difference_type n ) { it_+=n; return *this; } this_type& operator-=( difference_type n ) { it_-=n; return *this; } // relations bool operator==( const const_direct_iterator& that ) const { return it_ == that.it_; } bool operator!=( const const_direct_iterator& that ) const { return it_ != that.it_; } bool operator<=( const const_direct_iterator& that ) const { return it_ <= that.it_; } bool operator>=( const const_direct_iterator& that ) const { return it_ >= that.it_; } bool operator< ( const const_direct_iterator& that ) const { return it_ < that.it_; } bool operator> ( const const_direct_iterator& that ) const { return it_ > that.it_; } // dereference reference operator*() const { return *access_policy::get( static_cast((void*)*it_) ); } pointer operator->() const { return access_policy::get( static_cast((void*)*it_) ); } reference operator[]( difference_type n ) const { return *access_policy::get( static_cast((void*)it_[n]) ); } // distance difference_type operator-( const_direct_iterator const& that ) const { return it_-that.it_; } }; // sc_vector_iter template< typename T > class sc_vector : public sc_vector_base { typedef sc_vector_base base_type; typedef sc_vector this_type; public: typedef T element_type; typedef sc_vector_iter< element_type > iterator; typedef sc_vector_iter< const element_type > const_iterator; sc_vector(){} explicit sc_vector( const char* prefix ) : base_type( prefix ) {} explicit sc_vector( const char* prefix, size_type n ) : base_type( prefix ) { init(n); } template< typename Creator > sc_vector( const char* prefix, size_type n, Creator creator ) : base_type( prefix ) { init( n, creator ); } virtual ~sc_vector(); element_type& operator[]( size_type i ) { return *static_cast( base_type::at(i) ); } element_type& at( size_type i ) { check_index(i); return (*this)[i]; } const element_type& operator[]( size_type i ) const { return *static_cast( base_type::at(i) ); } const element_type& at( size_type i ) const { check_index(i); return (*this)[i]; } void init( size_type n ) { init( n, &this_type::create_element ); } template< typename Creator > void init( size_type n, Creator c ); static element_type * create_element( const char* prefix, size_type index ); iterator begin() { return base_type::begin(); } iterator end() { return base_type::end(); } const_iterator begin() const { return base_type::begin(); } const_iterator end() const { return base_type::end(); } const_iterator cbegin() const { return base_type::begin(); } const_iterator cend() const { return base_type::end(); } template< typename ContainerType, typename ArgumentType > iterator bind( sc_vector_assembly c ) { return bind( c.begin(), c.end() ); } template< typename BindableContainer > iterator bind( BindableContainer & c ) { return bind( c.begin(), c.end() ); } template< typename BindableIterator > iterator bind( BindableIterator first, BindableIterator last ) { return bind( first, last, this->begin() ); } template< typename BindableIterator > iterator bind( BindableIterator first, BindableIterator last , iterator from ) { return sc_vector_do_bind( *this, first, last, from ); } template< typename ContainerType, typename ArgumentType > iterator operator()( sc_vector_assembly c ) { return operator()( c.begin(), c.end() ); } template< typename ArgumentContainer > iterator operator()( ArgumentContainer & c ) { return operator()( c.begin(), c.end() ); } template< typename ArgumentIterator > iterator operator()( ArgumentIterator first, ArgumentIterator last ) { return operator()( first, last, this->begin() ); } template< typename ArgumentIterator > iterator operator()( ArgumentIterator first, ArgumentIterator last , iterator from ) { return sc_vector_do_operator_paren( *this, first, last, from ); } // member-wise access template< typename MT > sc_vector_assembly assemble( MT (T::*member_ptr) ) { return sc_vector_assembly( *this, member_ptr ); } protected: void clear(); virtual sc_object* object_cast( void* p ) const { return implicit_cast( static_cast(p) ); } }; template< typename T, typename MT > class sc_vector_assembly { template< typename U > friend class sc_vector; public: typedef sc_vector base_type; typedef sc_vector_iter< T, sc_member_access > iterator; typedef sc_vector_iter< const T , sc_member_access > const_iterator; typedef T element_type; typedef MT access_type; typedef typename base_type::size_type size_type; typedef typename base_type::difference_type difference_type; typedef typename iterator::reference reference; typedef typename iterator::pointer pointer; typedef typename const_iterator::reference const_reference; typedef typename const_iterator::pointer const_pointer; typedef access_type (T::*member_type); const char* name() const { return vec_->name(); } const char* kind() const { return "sc_vector_assembly"; } iterator begin() { return iterator( (*vec_).begin().it_, ptr_ ); } iterator end() { return iterator( (*vec_).end().it_, ptr_ ); } const_iterator cbegin() const { return const_iterator( (*vec_).cbegin().it_, ptr_ ); } const_iterator cend() const { return const_iterator( (*vec_).cend().it_, ptr_ ); } const_iterator begin() const { return const_iterator( (*vec_).begin().it_, ptr_ ); } const_iterator end() const { return const_iterator( (*vec_).end().it_, ptr_ ); } size_type size() const { return vec_->size(); } const std::vector< sc_object* > & get_elements() const; reference operator[]( size_type idx ) { return (*vec_)[idx].*ptr_; } reference at( size_type idx ) { return vec_->at(idx).*ptr_; } const_reference operator[]( size_type idx ) const { return (*vec_)[idx].*ptr_; } const_reference at( size_type idx ) const { return vec_->at(idx).*ptr_; } template< typename ContainerType, typename ArgumentType > iterator bind( sc_vector_assembly c ) { return bind( c.begin(), c.end() ); } template< typename BindableContainer > iterator bind( BindableContainer & c ) { return bind( c.begin(), c.end() ); } template< typename BindableIterator > iterator bind( BindableIterator first, BindableIterator last ) { return bind( first, last, this->begin() ); } template< typename BindableIterator > iterator bind( BindableIterator first, BindableIterator last , iterator from ) { return sc_vector_do_bind( *this, first, last, from ); } template< typename BindableIterator > iterator bind( BindableIterator first, BindableIterator last , typename base_type::iterator from ) { return bind( first, last, iterator(from.it_, ptr_) ); } template< typename ContainerType, typename ArgumentType > iterator operator()( sc_vector_assembly c ) { return operator()( c.begin(), c.end() ); } template< typename ArgumentContainer > iterator operator()( ArgumentContainer & c ) { return operator()( c.begin(), c.end() ); } template< typename ArgumentIterator > iterator operator()( ArgumentIterator first, ArgumentIterator last ) { return operator()( first, last, this->begin() ); } template< typename ArgumentIterator > iterator operator()( ArgumentIterator first, ArgumentIterator last , iterator from ) { return sc_vector_do_operator_paren( *this, first, last, from ); } template< typename ArgumentIterator > iterator operator()( ArgumentIterator first, ArgumentIterator last , typename base_type::iterator from ) { return operator()( first, last, iterator(from.it_, ptr_) ); } sc_vector_assembly( const sc_vector_assembly & other ) : vec_( other.vec_ ) , ptr_( other.ptr_ ) , child_vec_(0) {} sc_vector_assembly& operator=( sc_vector_assembly other_copy ) { swap( other_copy ); return *this; } void swap( sc_vector_assembly & that ) { using std::swap; swap( vec_, that.vec_ ); swap( ptr_, that.ptr_ ); swap( child_vec_, that.child_vec_ ); } void report_empty_bind( const char* kind_, bool dst_empty_ ) const { vec_->report_empty_bind( kind_, dst_empty_ ); } ~sc_vector_assembly() { delete child_vec_; } private: sc_vector_assembly( base_type & v, member_type ptr ) : vec_(&v) , ptr_(ptr) , child_vec_(0) {} sc_object* object_cast( pointer p ) const { return vec_->implicit_cast( p ); } base_type * vec_; member_type ptr_; mutable std::vector< sc_object* >* child_vec_; }; template< typename T, typename MT > sc_vector_assembly sc_assemble_vector( sc_vector & vec, MT (T::*ptr) ) { return vec.assemble( ptr ); } template< typename T > typename sc_vector::element_type * sc_vector::create_element( const char* name, size_type /* idx */ ) { return new T( name ); } template< typename T > template< typename Creator > void sc_vector::init( size_type n, Creator c ) { if ( base_type::check_init(n) ) { // restore SystemC hierarchy context, if needed sc_vector_base::context_scope scope( this ); base_type::reserve( n ); try { for ( size_type i = 0; i void sc_vector::clear() { size_type i = size(); while ( i --> 0 ) { delete &( (*this)[i] ); } base_type::clear(); } template< typename Container, typename ArgumentIterator > typename Container::iterator sc_vector_do_bind( Container & cont , ArgumentIterator first , ArgumentIterator last , typename Container::iterator from ) { typename Container::iterator end = cont.end(); if( !cont.size() || from == end || first == last ) cont.report_empty_bind( cont.kind(), from == end ); while( from!=end && first != last ) (*from++).bind( *first++ ); return from; } template< typename Container, typename ArgumentIterator > typename Container::iterator sc_vector_do_operator_paren( Container& cont , ArgumentIterator first , ArgumentIterator last , typename Container::iterator from ) { typename Container::iterator end = cont.end(); if( !cont.size() || from == end || first == last ) cont.report_empty_bind( cont.kind(), from == end ); while( from!=end && first != last ) (*from++)( *first++ ); return from; } template< typename T > sc_vector::~sc_vector() { clear(); } template< typename T, typename MT > std::vector< sc_object* > const & sc_vector_assembly::get_elements() const { if( !child_vec_ ) child_vec_ = new std::vector< sc_object* >; if( child_vec_->size() || !size() ) return *child_vec_; child_vec_->reserve( size() ); for( const_iterator it=begin(); it != end(); ++it ) if( sc_object * obj = object_cast( const_cast(&*it) ) ) child_vec_->push_back( obj ); return *child_vec_; } } // namespace sc_core #undef SC_STATIC_CONSTANT_ #undef SC_RPTYPE_ #undef SC_ENABLE_IF_ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) #pragma warning(pop) #endif // $Log: sc_vector.h,v $ // Revision 1.17 2011/08/26 20:46:20 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.16 2011/07/25 10:21:17 acg // Andy Goodrich: check in aftermath of call to automake. // // Revision 1.15 2011/04/02 00:04:32 acg // Philipp A. Hartmann: fix distance from member iterators, and // add iterator conversions. // // Revision 1.14 2011/04/01 22:35:19 acg // Andy Goodrich: spelling fix. // // Revision 1.13 2011/03/28 13:03:09 acg // Andy Goodrich: Philipp's latest update. // // Revision 1.12 2011/03/23 16:16:28 acg // Philipp A. Hartmann: rebase implementation on void* // - supports virtual inheritance from sc_object again // - build up get_elements result on demand // - still requires element type to be derived from sc_object // // Revision 1.11 2011/02/19 16:46:36 acg // Andy Goodrich: finally get the update from Philipp correct! // #endif // SC_VECTOR_H_INCLUDED_ // Taf! systemc-2.3.4/src/sysc/utils/sc_list.h0000644000175000017500000001245414342422106017614 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_list.h -- Simple implementation of a doubly linked list. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_LIST_H #define SC_LIST_H #include namespace sc_core { //Some forward declarations class sc_plist_elem; template class sc_plist_iter; typedef void (*sc_plist_map_fn)( void* data, void* arg ); class SC_API sc_plist_base { friend class sc_plist_base_iter; public: sc_plist_base(); ~sc_plist_base(); typedef sc_plist_elem* handle_t; handle_t push_back(void* d); handle_t push_front(void* d); void* pop_back(); void* pop_front(); handle_t insert_before(handle_t h, void* d); handle_t insert_after(handle_t h, void* d); void* remove(handle_t h); void* get(handle_t h) const; void set(handle_t h, void* d); void mapcar( sc_plist_map_fn f, void* arg ); void* front() const; void* back() const; void erase_all(); bool empty() const { return (head == 0); } int size() const; private: handle_t head; handle_t tail; }; class SC_API sc_plist_base_iter { public: typedef sc_plist_elem* handle_t; sc_plist_base_iter( sc_plist_base* l, bool from_tail = false ); ~sc_plist_base_iter(); void reset( sc_plist_base* l, bool from_tail = false ); bool empty() const; void operator++(int); void operator--(int); void* get() const; void set(void* d); void remove(); void remove(int direction); void set_handle(handle_t h); handle_t get_handle() const { return ptr; } private: sc_plist_base* lst; sc_plist_elem* ptr; }; /*---------------------------------------------------------------------------*/ template< class T > class sc_plist : public sc_plist_base { friend class sc_plist_iter ; public: typedef sc_plist_iter iterator; sc_plist() { } ~sc_plist() { } handle_t push_back(T d) { return sc_plist_base::push_back((void*)d); } handle_t push_front(T d) { return sc_plist_base::push_front((void*)d); } T pop_back() { return (T) sc_plist_base::pop_back(); } T pop_front() { return (T) sc_plist_base::pop_front(); } handle_t insert_before(handle_t h, T d) { return sc_plist_base::insert_before(h, (void*) d); } handle_t insert_after(handle_t h, T d) { return sc_plist_base::insert_after(h, (void*) d); } T remove(handle_t h) { return (T)sc_plist_base::remove(h); } T get(handle_t h) const { return (T)sc_plist_base::get(h); } void set(handle_t h, T d) { sc_plist_base::set(h, (void*)d); } T front() const { return (T)sc_plist_base::front(); } T back() const { return (T)sc_plist_base::back(); } }; template< class T > class sc_plist_iter : public sc_plist_base_iter { public: sc_plist_iter( sc_plist* l, bool from_tail = false ) : sc_plist_base_iter( l, from_tail ) { } sc_plist_iter( sc_plist& l, bool from_tail = false ) : sc_plist_base_iter( &l, from_tail ) { } ~sc_plist_iter() { } void reset( sc_plist* l, bool from_tail = false ) { sc_plist_base_iter::reset( l, from_tail ); } void reset( sc_plist& l, bool from_tail = false ) { sc_plist_base_iter::reset( &l, from_tail ); } T operator*() const { return (T) sc_plist_base_iter::get(); } T get() const { return (T) sc_plist_base_iter::get(); } void set(T d) { sc_plist_base_iter::set((void*) d); } }; } // namespace sc_core // $Log: sc_list.h,v $ // Revision 1.5 2011/09/01 15:16:50 acg // Philipp A. Hartmann: revert unnecessary virtual destructors. // // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. #endif systemc-2.3.4/src/sysc/utils/sc_string.h0000644000175000017500000001644714342422106020155 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_string.h -- Implementation of a simple string class. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ // $Log: sc_string.h,v $ // Revision 1.3 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // #ifndef SC_STRING_H #define SC_STRING_H #include "sysc/utils/sc_report.h" #include namespace sc_dt { class sc_string_old; } #ifdef SC_USE_SC_STRING_OLD typedef sc_dt::sc_string_old sc_string; #endif #ifdef SC_USE_STD_STRING typedef ::std::string sc_string; #endif namespace sc_dt { // forward class declarations class sc_string_rep; // friend operator declarations sc_string_old operator + ( const char* s, const sc_string_old& t ); // ---------------------------------------------------------------------------- // CLASS : sc_string // // String class (yet another). // ---------------------------------------------------------------------------- class SC_API sc_string_old { friend ::std::ostream& operator << (::std::ostream& os, const sc_string_old& a); friend ::std::istream& operator >> ( ::std::istream& is, sc_string_old& a ); public: // constructors explicit sc_string_old( int size = 16 ); sc_string_old( const char* s ); sc_string_old( const char* s, int n ); // get first n chars from the string sc_string_old( const sc_string_old& s ); // destructor ~sc_string_old(); // concatenation and assignment sc_string_old& operator = ( const char* s ); sc_string_old& operator = ( const sc_string_old& s ); sc_string_old& operator += ( const char* s ); sc_string_old& operator += ( char c ); sc_string_old& operator += ( const sc_string_old& s ); sc_string_old operator + ( const char* s ) const; sc_string_old operator + ( char c ) const; sc_string_old operator + ( const sc_string_old& s ) const; friend sc_string_old operator + ( const char* s, const sc_string_old& t ); // returns substring [first,last] sc_string_old substr( int first, int last ) const; // string comparison operators bool operator == ( const char* s ) const; bool operator != ( const char* s ) const; bool operator < ( const char* s ) const; bool operator <= ( const char* s ) const; bool operator > ( const char* s ) const; bool operator >= ( const char* s ) const; bool operator == ( const sc_string_old& s ) const; bool operator != ( const sc_string_old& s ) const; bool operator < ( const sc_string_old& s ) const; bool operator <= ( const sc_string_old& s ) const; bool operator > ( const sc_string_old& s ) const; bool operator >= ( const sc_string_old& s ) const; // // returns length of the string (excluding trailing \0) // int length() const; // // returns c-style string // const char* c_str() const; // // returns c-style string // operator const char*() const; // // returns character at "index" position // char operator[](int index) const; // // l-value subscript // char& operator[](int index); // formatted string (see printf description) static sc_string_old to_string(const char* format, ...); // // conveniece formatting functions for common types // e.g. sc_string_old("a=%d, s is %s").fmt(1).fmt("string") // should produce: a=1, s is string // it should be safe: if less arguments specified // it should print %specifier; extra arguments should be ignored // TODO: if the type of the argument is incompatible with format // specifier it should be ignored // // must have it inlined because of some compilers template sc_string_old& fmt(const T& t) { // search % int index; int last_char = length()-1; sc_string_old temp(*this); do { index = temp.pos("%"); if(index == last_char) return *this; temp = substr(index,last_char); } while(temp[0] != '%'); int f_len = (int)temp.fmt_length(); // length of format field temp = to_string(substr(0,index+f_len-1).c_str(),t); return (*this) = temp + substr(index+f_len,last_char); } sc_string_old& fmt(const sc_string_old& s); // // find position of substring in this string // returns -1 if not found // int pos(const sc_string_old& sub_string)const; // // remove "count" characters from "index" // sc_string_old& remove(unsigned index, unsigned length); // // insert "substring" before "index" // sc_string_old& insert(const sc_string_old& sub_string, unsigned index); // // returns true if the character at byte index in this string matches // any character in the delimiters string // bool is_delimiter(const sc_string_old& str, unsigned index)const; // // returns true if string contains the character // bool contains(char c)const; // // produce upper case string from this one // sc_string_old uppercase()const; // // produce lower case string from this one // sc_string_old lowercase()const; // // legacy methods // static sc_string_old make_str(long n); void set( int index, char c ); int cmp( const char* s ) const; int cmp( const sc_string_old& s ) const; void print( ::std::ostream& os = ::std::cout ) const; private: sc_string_old( sc_string_rep* r ); sc_string_rep* rep; void test(int position)const; unsigned fmt_length()const; }; // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII inline ::std::ostream& operator << ( ::std::ostream& os, const sc_string_old& a ) { a.print( os ); return os; } } // namespace sc_dt // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.4 2006/05/08 17:50:51 acg // Andy Goodrich: added David Long's forward declarations for friend // functions, methods, and operators to keep the Microsoft compiler happy. // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif systemc-2.3.4/src/sysc/utils/sc_report_handler.h0000644000175000017500000001465514342422106021656 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_report_handler.h - Original Author: Alex Riesen, Synopsys, Inc. see also sc_report.h CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_REPORT_HANDLER_H #define SC_REPORT_HANDLER_H namespace sc_core { // ---------------------------------------------------------------------------- // STRUCT : sc_msg_def // // Exception message definition structure // ---------------------------------------------------------------------------- struct SC_API sc_msg_def { const char* msg_type; sc_actions actions; sc_actions sev_actions[SC_MAX_SEVERITY]; unsigned limit; unsigned sev_limit[SC_MAX_SEVERITY]; unsigned limit_mask; // 0 - limit, 1..4 - sev_limit unsigned call_count; unsigned sev_call_count[SC_MAX_SEVERITY]; char* msg_type_data; int id; // backward compatibility with 2.0+ }; typedef void (* sc_report_handler_proc)(const sc_report&, const sc_actions &); class sc_report; extern SC_API bool sc_report_close_default_log(); class SC_API sc_report_handler { public: static void report(sc_severity, const char* msg_type, const char* msg, const char* file, int line); static void report( sc_severity, const char* msg_type, const char* msg, int verbosity, const char* file, int line ); static sc_actions set_actions(sc_severity, sc_actions = SC_UNSPECIFIED); static sc_actions set_actions(const char * msg_type, sc_actions = SC_UNSPECIFIED); static sc_actions set_actions(const char * msg_type, sc_severity, sc_actions = SC_UNSPECIFIED); static int stop_after(sc_severity, int limit = -1); static int stop_after(const char* msg_type, int limit = -1); static int stop_after(const char* msg_type, sc_severity, int limit = -1); static sc_actions suppress(sc_actions); static sc_actions suppress(); static sc_actions force(sc_actions); static sc_actions force(); static int get_count(sc_severity severity_); static int get_count(const char* msg_type_); static int get_count(const char* msg_type_, sc_severity severity_); static int get_verbosity_level(); static int set_verbosity_level( int level ); static void initialize(); // just reset counters static void release(); // initialize() needed for reports after it static sc_report_handler_proc set_handler(sc_report_handler_proc); static sc_report_handler_proc get_handler(); // use set_handler(NULL); to restore default handler static void default_handler(const sc_report&, const sc_actions&); static sc_actions get_new_action_id(); static sc_report* get_cached_report(); static void clear_cached_report(); // if filename is NULL, the previous log file name will be removed. // The provider of a report_handler supposed to handle this. // Return false if filename is not NULL and filename is already set. static bool set_log_file_name(const char* filename); static const char* get_log_file_name(); // how the implementation should handle caught (sc_report) exceptions static sc_actions set_catch_actions(sc_actions); static sc_actions get_catch_actions(); public: // private, actually struct msg_def_items { sc_msg_def* md; // have to point to sc_msg_def-s int count; // set to number of items in md[] bool allocated; // used internally, previous value ignored msg_def_items* next; // used internally, previous value ignored }; static void add_static_msg_types(msg_def_items *); static sc_msg_def* add_msg_type(const char * msg_type); protected: static void cache_report(const sc_report&); static sc_actions execute(sc_msg_def*, sc_severity); static sc_actions suppress_mask; static sc_actions force_mask; static sc_actions sev_actions[SC_MAX_SEVERITY]; static unsigned sev_limit[SC_MAX_SEVERITY]; static unsigned sev_call_count[SC_MAX_SEVERITY]; static sc_report* last_global_report; static sc_actions available_actions; static sc_actions catch_actions; static char* log_file_name; static int verbosity_level; static msg_def_items* messages; static msg_def_items msg_terminator; static sc_report_handler_proc handler; static sc_msg_def* mdlookup(const char* msg_type); private: // backward compatibility with 2.0+ friend class sc_report; static sc_msg_def* mdlookup(int id); public: static void report(sc_severity, int id, const char* add_msg, const char* file, int line); }; } // namespace sc_core // $Log: sc_report_handler.h,v $ // Revision 1.5 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.4 2011/03/23 16:16:49 acg // Andy Goodrich: finish message verbosity support. // // Revision 1.3 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.2 2011/02/01 23:02:05 acg // Andy Goodrich: IEEE 1666 2011 changes. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif // Taf! systemc-2.3.4/src/sysc/utils/sc_pq.cpp0000644000175000017500000000730614342422106017614 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_pq.cpp - Simple heap implementation of priority queue. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ // $Log: sc_pq.cpp,v $ // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // #include "sysc/utils/sc_pq.h" #include "sysc/utils/sc_report.h" // sc_assert namespace sc_core { sc_ppq_base::sc_ppq_base( int sz, int (*cmp)( const void*, const void* ) ) : m_heap(0), m_size_alloc( sz ), m_heap_size( 0 ), m_compar( cmp ) { // m_size_alloc must be at least 2, otherwise resizing doesn't work if( m_size_alloc < 2 ) { m_size_alloc = 2; } // allocate m_heap = new void*[m_size_alloc + 1]; // initialize for( int i = 0; i < m_size_alloc; ++ i ) { m_heap[i] = 0; } } sc_ppq_base::~sc_ppq_base() { delete[] m_heap; } void* sc_ppq_base::extract_top() { sc_assert( m_heap_size > 0 ); void* topelem = m_heap[1]; m_heap[1] = m_heap[m_heap_size]; m_heap_size --; heapify( 1 ); return topelem; } void sc_ppq_base::insert( void* elem ) { m_heap_size ++; int i = m_heap_size; // resize the heap in case there's not enough memory if( m_heap_size > m_size_alloc ) { m_size_alloc += m_size_alloc / 2; void** new_heap = new void*[m_size_alloc + 1]; for( int j = 1; j < m_heap_size; ++ j ) { new_heap[j] = m_heap[j]; } delete[] m_heap; m_heap = new_heap; } while( (i > 1) && (m_compar( m_heap[parent( i )], elem ) < 0) ) { m_heap[i] = m_heap[parent( i )]; i = parent( i ); } m_heap[i] = elem; } void sc_ppq_base::heapify( int i ) { int l; while( l = left( i ), l <= m_heap_size ) { int largest = (m_compar( m_heap[l], m_heap[i] ) > 0) ? l : i; int r = right( i ); if( (r <= m_heap_size) && (m_compar( m_heap[r], m_heap[largest] ) > 0) ) { largest = r; } if( largest != i ) { void* tmp = m_heap[i]; m_heap[i] = m_heap[largest]; m_heap[largest] = tmp; i = largest; } else { break; } } } } // namespace sc_core // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/utils/sc_mempool.h0000644000175000017500000000536514342422106020314 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_mempool.h - Memory pools for small objects. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_MEMPOOL_H #define SC_MEMPOOL_H namespace sc_core { // ---------------------------------------------------------------------------- // CLASS : sc_mempool // // ... // ---------------------------------------------------------------------------- class SC_API sc_mempool { public: static void* allocate( std::size_t sz ); static void release( void* p, std::size_t sz ); static void display_statistics(); }; // ---------------------------------------------------------------------------- // CLASS : sc_mpobject // // ... // ---------------------------------------------------------------------------- class SC_API sc_mpobject { public: static void* operator new( std::size_t sz ) { return sc_mempool::allocate( sz ); } static void operator delete( void* p, std::size_t sz ) { sc_mempool::release( p, sz ); } static void* operator new[]( std::size_t sz ) { return sc_mempool::allocate( sz ); } static void operator delete[]( void* p, std::size_t sz ) { sc_mempool::release( p, sz ); } }; } // namespace sc_core // $Log: sc_mempool.h,v $ // Revision 1.3 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. #endif systemc-2.3.4/src/sysc/utils/sc_pvector.h0000644000175000017500000001162114342422106020316 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_vector.h -- Simple implementation of a vector class. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_VECTOR_H #define SC_VECTOR_H #include namespace sc_core { extern "C" { typedef int (*CFT)( const void*, const void* ); } // #define ACCESS(I) m_vector.at(I) // index checking #define ACCESS(I) m_vector[I] #define ADDR_ACCESS(I) (m_vector.size() != 0 ? &m_vector[I] : 0 ) // ---------------------------------------------------------------------------- // CLASS : sc_pvector // // Simple vector class. // ---------------------------------------------------------------------------- template< class T > class sc_pvector { public: typedef const T* const_iterator; typedef T* iterator; // typedef typename ::std::vector::const_iterator const_iterator; // typedef typename ::std::vector::iterator iterator; sc_pvector() { } sc_pvector( const sc_pvector& rhs ) : m_vector( rhs.m_vector ) {} ~sc_pvector() {} std::size_t size() const { return m_vector.size(); } iterator begin() { return (iterator) ADDR_ACCESS(0); } const_iterator begin() const { return (const_iterator) ADDR_ACCESS(0); } iterator end() { return static_cast (ADDR_ACCESS(m_vector.size())); } const_iterator end() const { return static_cast (ADDR_ACCESS(m_vector.size())); } sc_pvector& operator = ( const sc_pvector& rhs ) { m_vector = rhs.m_vector; return *this; } T& operator [] ( unsigned int i ) { if ( i >= m_vector.size() ) m_vector.resize(i+1); return (T&) m_vector.operator [] ( i ); } const T& operator [] ( unsigned int i ) const { if ( i >= m_vector.size() ) m_vector.resize(i+1); return (const T&) m_vector.operator [] ( i ); } T& fetch( int i ) { return ACCESS(i); } const T& fetch( int i ) const { return (const T&) ACCESS(i); } T* raw_data() { return (T*) &ACCESS(0); } const T* raw_data() const { return (const T*) &ACCESS(0); } operator const ::std::vector& () const { return m_vector; } void push_back( T item ) { m_vector.push_back( item ); } void erase_all() { m_vector.resize(0); } void sort( CFT compar ) {qsort( (void*)&m_vector[0], m_vector.size(), sizeof(void*), compar );} /* These methods have been added from Ptr_Array */ void put( T item, int i ) { ACCESS(i) = item; } void decr_count() { m_vector.resize(m_vector.size()-1); } void decr_count( int k ) { m_vector.resize(m_vector.size()-k); } protected: mutable ::std::vector m_vector; // Actual vector of pointers. }; #undef ACCESS #undef ADDR_ACCESS } // namespace sc_core // $Log: sc_pvector.h,v $ // Revision 1.4 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.2 2011/01/20 16:52:21 acg // Andy Goodrich: changes for IEEE 1666 2011. // // Revision 1.1 2010/12/07 20:11:45 acg // Andy Goodrich: moved sc_pvector class to new header file to allow the // use of sc_vector.h for Philipp Hartmann's new sc_vector class. // // Revision 1.4 2010/08/03 17:52:15 acg // Andy Goodrich: fix signature for size() method of sc_pvector. // // Revision 1.3 2008/10/09 21:20:33 acg // Andy Goodrich: fixed the way the end() methods calculate their results. // I had incorrectly cut and pasted code from the begin() method. // // Revision 1.2 2007/01/17 22:44:34 acg // Andy Goodrich: fix for Microsoft compiler. // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif systemc-2.3.4/src/sysc/utils/sc_report.cpp0000644000175000017500000002247614342422106020514 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_report.cpp -- Run-time logging and reporting facilities Interface design by SystemC Verification Working Group. Implementation by Alex Riesen, Synopsys Inc. Original implementation by Martin Janssen, Synopsys Inc. Reference implementation by Cadence Design Systems, Inc., 2002-09-23: Norris Ip, Dean Shea, John Rose, Jasvinder Singh, William Paulsen, John Pierce, Rachida Kebichi, Ted Elkind, David Bailey. CHANGE LOG AT END OF FILE *****************************************************************************/ #include #include #include "sysc/kernel/sc_process.h" #include "sysc/kernel/sc_simcontext_int.h" #include "sysc/utils/sc_stop_here.h" #include "sysc/utils/sc_report.h" #include "sysc/utils/sc_utils_ids.h" #include // std::swap namespace sc_core { static void sc_deprecated_report_ids(const char* method) { static bool warn_report_ids_deprecated=true; if ( warn_report_ids_deprecated ) { std::string message; message = "integer report ids are deprecated, use string values: "; message += method; warn_report_ids_deprecated=false; SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, message.c_str()); } } static char empty_str[] = ""; static inline char * empty_dup(const char * p) { if ( p && *p ) { char* result; std::size_t size = strlen(p)+1; result = new char[size]; std::copy(p, p + size, result); return result; } else { return empty_str; } } sc_report::sc_report() : severity(SC_INFO), md(0), msg(empty_dup(0)), file(empty_dup(0)), line(0), timestamp(new sc_time(sc_time_stamp())), process_name(empty_dup(0)), m_verbosity_level(SC_MEDIUM), m_what(empty_dup(0)) { } sc_report::sc_report(sc_severity severity_, const sc_msg_def* md_, const char* msg_, const char* file_, int line_, int verbosity_level) : severity(severity_), md(md_), msg(empty_dup(msg_)), file(empty_dup(file_)), line(line_), timestamp(new sc_time(sc_time_stamp())), process_name(empty_dup(sc_get_current_process_name())), m_verbosity_level(verbosity_level), m_what( empty_dup( sc_report_compose_message(*this).c_str() ) ) { } sc_report::sc_report(const sc_report& other) : std::exception(other), severity(other.severity), md(other.md), msg(empty_dup(other.msg)), file(empty_dup(other.file)), line(other.line), timestamp(new sc_time(*other.timestamp)), process_name(empty_dup(other.process_name)), m_verbosity_level(other.m_verbosity_level), m_what(empty_dup(other.m_what)) { } sc_report & sc_report::operator=(const sc_report& other) { sc_report copy(other); swap( copy ); return *this; } void sc_report::swap( sc_report & that ) { using std::swap; swap( severity, that.severity ); swap( md, that.md ); swap( msg, that.msg ); swap( file, that.file ); swap( line, that.line ); swap( timestamp, that.timestamp ); swap( process_name, that.process_name ); swap( m_verbosity_level, that.m_verbosity_level ); swap( m_what, that.m_what ); } sc_report::~sc_report() SC_NOEXCEPT_ { if ( file != empty_str ) delete[] file; if ( msg != empty_str ) delete[] msg; delete timestamp; if ( process_name != empty_str ) delete[] process_name; if ( m_what != empty_str ) delete[] m_what; } const char * sc_report::get_msg_type() const { return md->msg_type; } bool sc_report::valid() const { return process_name != empty_str; } const char* sc_report::get_process_name() const { return process_name != empty_str ? process_name : 0; } // // backward compatibility with 2.0+ // static bool warnings_are_errors = false; static const char unknown_id[] = "unknown id"; void sc_report_handler::report(sc_severity severity_, int id_, const char* msg_, const char* file_, int line_ ) { sc_msg_def * md = sc_report_handler::mdlookup(id_); if ( !md ) { md = sc_report_handler::add_msg_type(unknown_id); md->id = id_; } if ( severity_ == SC_WARNING && warnings_are_errors ) severity_ = SC_ERROR; sc_actions actions = execute(md, severity_); sc_report rep(severity_, md, msg_, file_, line_); if ( actions & SC_CACHE_REPORT ) cache_report(rep); if ( severity_ == SC_ERROR ) actions |= SC_THROW; else if ( severity_ == SC_FATAL ) actions |= SC_ABORT; handler(rep, actions); } void sc_report::register_id( int id, const char* msg ) { sc_deprecated_report_ids("sc_report::register_id()"); if( id < 0 ) { SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_, "invalid report id" ); return; } if( msg == 0 ) { SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_, "invalid report message" ); return; } sc_msg_def * md = sc_report_handler::mdlookup(id); if ( !md ) md = sc_report_handler::add_msg_type(msg); if ( !md ) { SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_, "report_map insertion error" ); return; } if( md->id != -1 ) { if( strcmp( msg, md->msg_type ) != 0 ) { SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_, "report id already exists" ); } return; } md->id = id; } const char* sc_report::get_message( int id ) { sc_deprecated_report_ids("sc_report::get_message()"); sc_msg_def* md = sc_report_handler::mdlookup(id); return md ? md->msg_type: unknown_id; } bool sc_report::is_suppressed( int id ) { sc_deprecated_report_ids("sc_report::is_suppressed()"); sc_msg_def* md = sc_report_handler::mdlookup(id); return md ? md->actions == SC_DO_NOTHING: false; // only do-nothing set } void sc_report::suppress_id(int id_, bool suppress) { sc_deprecated_report_ids("sc_report::suppress_id()"); sc_msg_def* md = sc_report_handler::mdlookup(id_); if ( md ) md->actions = suppress ? SC_DO_NOTHING: SC_UNSPECIFIED; } void sc_report::suppress_infos(bool suppress) { sc_deprecated_report_ids("sc_report::supress_infos"); sc_report_handler::sev_actions[SC_INFO] = suppress ? SC_DO_NOTHING: SC_DEFAULT_INFO_ACTIONS; } void sc_report::suppress_warnings(bool suppress) { sc_deprecated_report_ids("sc_report::suppress_warnings"); sc_report_handler::sev_actions[SC_WARNING] = suppress ? SC_DO_NOTHING: SC_DEFAULT_WARNING_ACTIONS; } void sc_report::make_warnings_errors(bool flag) { sc_deprecated_report_ids("sc_report::make_warnings_errors"); warnings_are_errors = flag; } int sc_report::get_id() const { return md->id; } } // namespace sc_core // $Log: sc_report.cpp,v $ // Revision 1.8 2011/08/29 18:04:32 acg // Philipp A. Hartmann: miscellaneous clean ups. // // Revision 1.7 2011/08/26 20:43:01 acg // Andy Goodrich: // (1) Replaced strdup with new and strcpy to eliminate issue with the // Greenhills compiler. // (2) Moved modification log to the end of the file to eliminate line // skew when check-ins are done. // // Revision 1.6 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.5 2011/05/05 17:46:04 acg // Philip A. Hartmann: changes in "swap" support. // // Revision 1.4 2011/03/23 16:16:48 acg // Andy Goodrich: finish message verbosity support. // // Revision 1.3 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.2 2011/02/01 23:02:05 acg // Andy Goodrich: IEEE 1666 2011 changes. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.7 2006/03/21 00:00:37 acg // Andy Goodrich: changed name of sc_get_current_process_base() to be // sc_get_current_process_b() since its returning an sc_process_b instance. // // Revision 1.6 2006/01/25 00:31:27 acg // Andy Goodrich: Changed over to use a standard message id of // SC_ID_IEEE_1666_DEPRECATION for all deprecation messages. // // Revision 1.5 2006/01/24 22:02:30 acg // Andy Goodrich: switch deprecated features warnings to use a single message // id, SC_ID_IEEE_1666_DEPRECATION_. // // Revision 1.4 2006/01/24 20:53:41 acg // Andy Goodrich: added warnings indicating that use of integer ids in reports // is deprecated. Added tracing/sc_trace_ids.h to message list. // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/utils/files.am0000644000175000017500000000465214342422106017425 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/utils/files.am -- ## Included from a Makefile.am to provide directory-specific information ## ## Original Author: Philipp A. Hartmann, Intel, 2015-11-24 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** ## Generic directory setup ## (should be kept in sync among all files.am files) ## ## Note: Recent Automake versions (>1.13) support relative placeholders for ## included files (%D%,%C%). To support older versions, use explicit ## names for now. ## ## Local values: ## %D%: utils ## %C%: utils H_FILES += \ utils/sc_hash.h \ utils/sc_list.h \ utils/sc_machine.h \ utils/sc_mempool.h \ utils/sc_pq.h \ utils/sc_pvector.h \ utils/sc_report.h \ utils/sc_report_handler.h \ utils/sc_string.h \ utils/sc_string_view.h \ utils/sc_temporary.h \ utils/sc_typeindex.h \ utils/sc_utils_ids.h \ utils/sc_vector.h NO_H_FILES += \ utils/sc_stop_here.h CXX_FILES += \ utils/sc_hash.cpp \ utils/sc_list.cpp \ utils/sc_mempool.cpp \ utils/sc_pq.cpp \ utils/sc_report.cpp \ utils/sc_report_handler.cpp \ utils/sc_stop_here.cpp \ utils/sc_string.cpp \ utils/sc_utils_ids.cpp \ utils/sc_vector.cpp INCDIRS += \ utils ## Taf! ## :vim:ft=automake: systemc-2.3.4/src/sysc/utils/sc_report.h0000644000175000017500000002501614342422106020152 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_report.h -- Run-time logging and reporting facilities Interface design by SystemC Verification Working Group. Implementation by Alex Riesen, Synopsys Inc. Original implementation by Martin Janssen, Synopsys Inc. Reference implementation by Cadence Design Systems, Inc., 2002-09-23: Norris Ip, Dean Shea, John Rose, Jasvinder Singh, William Paulsen, John Pierce, Rachida Kebichi, Ted Elkind, David Bailey. CHANGE LOG AT END OF FILE *****************************************************************************/ #ifndef SC_REPORT_H #define SC_REPORT_H 1 #include #include #include "sysc/kernel/sc_cmnhdr.h" #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) # pragma warning(push) # pragma warning(disable:4275) // ignore missing std::exception DLL export #endif namespace sc_core { // ---------------------------------------------------------------------------- // ENUM : sc_severity // // Enumeration of possible exception severity levels // ---------------------------------------------------------------------------- enum sc_severity { SC_INFO = 0, // informative only SC_WARNING, // indicates potentially incorrect condition SC_ERROR, // indicates a definite problem SC_FATAL, // indicates a problem from which we cannot recover SC_MAX_SEVERITY }; // ---------------------------------------------------------------------------- // ENUM : sc_verbosity // // Enumeration of message verbosity. // ---------------------------------------------------------------------------- enum sc_verbosity { SC_NONE = 0, SC_LOW = 100, SC_MEDIUM = 200, SC_HIGH = 300, SC_FULL = 400, SC_DEBUG = 500 }; // ---------------------------------------------------------------------------- // ENUM : // // Enumeration of actions on an exception (implementation specific) // ---------------------------------------------------------------------------- typedef unsigned sc_actions; enum { SC_UNSPECIFIED = 0x0000, // look for lower-priority rule SC_DO_NOTHING = 0x0001, // take no action (ignore if other bits set) SC_THROW = 0x0002, // throw an exception SC_LOG = 0x0004, // add report to report log SC_DISPLAY = 0x0008, // display report to screen SC_CACHE_REPORT = 0x0010, // save report to cache SC_INTERRUPT = 0x0020, // call sc_interrupt_here(...) SC_STOP = 0x0040, // call sc_stop() SC_ABORT = 0x0080, // call abort() // default action constants SC_DEFAULT_INFO_ACTIONS = SC_LOG | SC_DISPLAY, SC_DEFAULT_WARNING_ACTIONS = SC_LOG | SC_DISPLAY, SC_DEFAULT_ERROR_ACTIONS = SC_LOG | SC_CACHE_REPORT | SC_THROW, SC_DEFAULT_FATAL_ACTIONS = SC_LOG | SC_DISPLAY | SC_CACHE_REPORT | SC_ABORT, SC_DEFAULT_CATCH_ACTIONS = SC_DISPLAY }; class sc_object; class sc_time; struct sc_msg_def; class sc_report; class sc_report_handler; SC_API const std::string sc_report_compose_message( const sc_report& ); // ---------------------------------------------------------------------------- // CLASS : sc_report // // Exception reporting // ---------------------------------------------------------------------------- class SC_API sc_report : public std::exception { friend class sc_report_handler; friend SC_API sc_report* sc_handle_exception(); sc_report(); // used internally by sc_handle_exception public: sc_report(const sc_report&); sc_report & operator=(const sc_report&); virtual ~sc_report() SC_NOEXCEPT_; const char * get_msg_type() const; const char * get_msg() const { return msg; } sc_severity get_severity() const { return severity; } const char * get_file_name() const { return file; } int get_line_number() const { return line; } const sc_time & get_time() const { return *timestamp; } const char* get_process_name() const; int get_verbosity() const { return m_verbosity_level; } bool valid () const; virtual const char* what() const SC_NOEXCEPT_ { return m_what; } void swap( sc_report& ); protected: sc_report(sc_severity, const sc_msg_def*, const char* msg, const char* file, int line, int verbosity_level=SC_MEDIUM); sc_severity severity; const sc_msg_def* md; char* msg; char* file; int line; sc_time* timestamp; char* process_name; int m_verbosity_level; char* m_what; public: // backward compatibility with 2.0+ static const char* get_message(int id); static bool is_suppressed(int id); static void make_warnings_errors(bool); static void register_id(int id, const char* msg); static void suppress_id(int id, bool); // only for info or warning static void suppress_infos(bool); static void suppress_warnings(bool); int get_id() const; }; typedef std::exception sc_exception; // ---------------------------------------------------------------------------- // Report macros. // // Use these macros to report an info, warning, error, or fatal. // ---------------------------------------------------------------------------- #define SC_REPORT_INFO( msg_type, msg ) \ ::sc_core::sc_report_handler::report( \ ::sc_core::SC_INFO, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_INFO_VERB( msg_type, msg, verbosity ) \ ::sc_core::sc_report_handler::report( \ ::sc_core::SC_INFO, msg_type, msg, verbosity, \ __FILE__ , __LINE__ ) #define SC_REPORT_WARNING( msg_type, msg ) \ ::sc_core::sc_report_handler::report( \ ::sc_core::SC_WARNING, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_ERROR( msg_type, msg ) \ ::sc_core::sc_report_handler::report( \ ::sc_core::SC_ERROR, msg_type, msg, __FILE__, __LINE__ ) #define SC_REPORT_FATAL( msg_type, msg ) \ ::sc_core::sc_report_handler::report( \ ::sc_core::SC_FATAL, msg_type, msg, __FILE__, __LINE__ ) // SC_NORETURN_ macro, indicating that a function does not return #if SC_CPLUSPLUS >= 201103L && (!defined(_MSC_VER) || _MSC_VER >= 1900) // C++11: use standard C++ attribute # define SC_NORETURN_ [[noreturn]] #else # if defined(_MSC_VER) # define SC_NORETURN_ __declspec(noreturn) # elif defined(__GNUC__) || defined(__MINGW32__) || defined(__clang__) # define SC_NORETURN_ __attribute__((noreturn)) # else # define SC_NORETURN_ /* nothing */ # endif #endif // SC_NORETURN_ // ---------------------------------------------------------------------------- // FUNCTION : sc_abort() // // Like abort(), never returns and aborts the current program immediately, // but may print additional information. // ---------------------------------------------------------------------------- SC_NORETURN_ SC_API void sc_abort(); // ---------------------------------------------------------------------------- // MACRO : sc_assert(expr) // // Like assert(), but additionally prints the current process name // and simulation time, if the simulation is running. // ---------------------------------------------------------------------------- #if defined(NDEBUG) && !defined(SC_ENABLE_ASSERTIONS) // disable assertions #define sc_assert(expr) \ ((void) 0) #else // enable assertions #define sc_assert(expr) \ ((void)((expr) ? 0 : \ (::sc_core::sc_assertion_failed(#expr,__FILE__,__LINE__),0))) #endif // defined(NDEBUG) && !defined(SC_ENABLE_ASSERTIONS) SC_NORETURN_ SC_API void sc_assertion_failed(const char* msg, const char* file, int line); extern SC_API const char SC_ID_UNKNOWN_ERROR_[]; extern SC_API const char SC_ID_WITHOUT_MESSAGE_[]; extern SC_API const char SC_ID_NOT_IMPLEMENTED_[]; extern SC_API const char SC_ID_INTERNAL_ERROR_[]; extern SC_API const char SC_ID_ASSERTION_FAILED_[]; extern SC_API const char SC_ID_OUT_OF_BOUNDS_[]; extern SC_API const char SC_ID_ABORT_[]; // backward compatibility with 2.0+ extern SC_API const char SC_ID_REGISTER_ID_FAILED_[]; } // namespace sc_core #undef SC_NORETURN_ #if defined(_MSC_VER) && !defined(SC_WIN_DLL_WARN) # pragma warning(pop) #endif #include "sysc/utils/sc_report_handler.h" /***************************************************************************** MODIFICATION LOG - modifiers, enter your name, affiliation, date and changes you are making here. Name, Affiliation, Date: Alex Riesen, Synopsys Inc., Jan 28, 2003 Description of Modification: Implementation for SytemC 2.1 *****************************************************************************/ // $Log: sc_report.h,v $ // Revision 1.8 2011/08/26 20:46:19 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.7 2011/05/05 17:46:04 acg // Philip A. Hartmann: changes in "swap" support. // // Revision 1.6 2011/04/19 02:39:44 acg // Andy Goodrich: set proper name for get_verbosity(). // // Revision 1.5 2011/03/23 16:16:48 acg // Andy Goodrich: finish message verbosity support. // // Revision 1.4 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.3 2011/02/01 23:02:05 acg // Andy Goodrich: IEEE 1666 2011 changes. // // Revision 1.2 2008/05/20 20:42:50 acg // Andy Goodrich: added sc_core namespace prefix for ID value in sc_assert() // macro. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:11 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // #endif // SC_REPORT_H systemc-2.3.4/src/sysc/utils/sc_hash.cpp0000644000175000017500000003600214342422106020112 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_hash.cpp -- Implementation of a chained hash table with MTF (move-to-front). Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/utils/sc_hash.h" #include "sysc/utils/sc_mempool.h" #include "sysc/utils/sc_report.h" // sc_assert #include #include #include #include namespace sc_core { // we can't assume global availability of uintptr_t, // approximate it by size_t typedef std::size_t uintptr_t; SC_API const double PHASH_DEFAULT_GROW_FACTOR = 2.0; class SC_API sc_phash_elem { friend class sc_phash_base; friend class sc_phash_base_iter; private: void* key; void* contents; sc_phash_elem* next; sc_phash_elem( void* k, void* c, sc_phash_elem* n ) : key(k), contents(c), next(n) { } sc_phash_elem() : key(0), contents(0), next(0) { } ~sc_phash_elem() { } static void* operator new(std::size_t sz) { return sc_mempool::allocate(sz); } static void operator delete(void* p, std::size_t sz) { sc_mempool::release(p, sz); } }; sc_phash_base::sc_phash_base( void* def, int size, int density, double grow, bool reorder, unsigned (*hash_fn)(const void*), int (*cmp_fn)(const void*, const void*) ) : default_value(def), num_bins(0), num_entries(0), max_density(density), reorder_flag(reorder), grow_factor(grow), bins(0), hash(hash_fn), cmpr(cmp_fn) { if (size <= 0) size = PHASH_DEFAULT_INIT_TABLE_SIZE; else if ((size % 2) == 0) size += 1; num_bins = size; bins = new sc_phash_elem*[size]; for (int i = 0; i < size; ++i) bins[i] = 0; } void sc_phash_base::set_cmpr_fn(cmpr_fn_t c) { cmpr = c; } void sc_phash_base::set_hash_fn(hash_fn_t h) { hash = h; } sc_phash_base::~sc_phash_base() { sc_phash_elem* ptr; sc_phash_elem* next; for (int i = 0; i < num_bins; ++i) { ptr = bins[i]; while (ptr != 0) { next = ptr->next; delete ptr; ptr = next; } } delete[] bins; } void sc_phash_base::rehash() { sc_phash_elem* ptr; sc_phash_elem* next; sc_phash_elem** old_bins = bins; int old_num_bins = num_bins; unsigned hash_val; num_bins = (int) (grow_factor * old_num_bins); if (num_bins % 2 == 0) ++num_bins; num_entries = 0; bins = new sc_phash_elem*[num_bins]; memset( bins, 0, sizeof(sc_phash_elem*) * num_bins ); for (int i = 0; i < old_num_bins; ++i) { ptr = old_bins[i]; while (ptr != 0) { next = ptr->next; hash_val = do_hash(ptr->key); ptr->next = bins[hash_val]; bins[hash_val] = ptr; ++num_entries; ptr = next; } } delete[] old_bins; } sc_phash_elem* sc_phash_base::find_entry_q( unsigned hash_val, const void* key, sc_phash_elem*** plast ) { sc_phash_elem** last = &(bins[hash_val]); sc_phash_elem* ptr = *last; /* The (ptr->key != key) here is meant by the "q" */ while ((ptr != 0) && (ptr->key != key)) { /* ^^ right here */ last = &(ptr->next); ptr = *last; } if ((ptr != 0) && reorder_flag) { *last = ptr->next; ptr->next = bins[hash_val]; bins[hash_val] = ptr; last = &(bins[hash_val]); } if (plast) *plast = last; return ptr; } sc_phash_elem* sc_phash_base::find_entry_c( unsigned hash_val, const void* key, sc_phash_elem*** plast ) { sc_phash_elem** last = &(bins[hash_val]); sc_phash_elem* ptr = *last; while ((ptr != 0) && ((*cmpr)(ptr->key, key) != 0)) { last = &(ptr->next); ptr = *last; } /* Bring to front */ if ((ptr != 0) && reorder_flag) { *last = ptr->next; ptr->next = bins[hash_val]; bins[hash_val] = ptr; last = &(bins[hash_val]); } if (plast) *plast = last; return ptr; } sc_phash_elem* sc_phash_base::add_direct( void* key, void* contents, unsigned hash_val ) { if (num_entries / num_bins >= max_density) { rehash(); hash_val = do_hash(key); } sc_phash_elem* new_entry = new sc_phash_elem(key, contents, bins[hash_val]); bins[hash_val] = new_entry; ++num_entries; return new_entry; } void sc_phash_base::erase() { for (int i = 0; i < num_bins; ++i) { sc_phash_elem* ptr = bins[i]; while (ptr != 0) { sc_phash_elem* next = ptr->next; delete ptr; ptr = next; --num_entries; } bins[i] = 0; } sc_assert(num_entries == 0); } void sc_phash_base::erase(void (*kfree)(void*)) { for (int i = 0; i < num_bins; ++i) { sc_phash_elem* ptr = bins[i]; while (ptr != 0) { sc_phash_elem* next = ptr->next; (*kfree)(ptr->key); delete ptr; ptr = next; --num_entries; } bins[i] = 0; } sc_assert(num_entries == 0); } void sc_phash_base::copy( const sc_phash_base* b ) { erase(); iterator iter((sc_phash_base*) b); /* cast away the const */ for ( ; ! iter.empty(); iter++) insert( iter.key(), iter.contents() ); } void sc_phash_base::copy(const sc_phash_base& b, void* (*kdup)(const void*), void (*kfree)(void*)) { erase(kfree); iterator iter((sc_phash_base&) b); for ( ; ! iter.empty(); iter++) insert( (*kdup)(iter.key()), iter.contents() ); } int sc_phash_base::insert( void* k, void* c ) { unsigned hash_val = do_hash(k); sc_phash_elem* ptr = find_entry( hash_val, k ); if (ptr == 0) { (void) add_direct(k, c, hash_val); return 0; } else { ptr->contents = c; return 1; } } int sc_phash_base::insert( void* k, void* c, void* (*kdup)(const void*) ) { unsigned hash_val = do_hash(k); sc_phash_elem* ptr = find_entry( hash_val, k ); if (ptr == 0) { (void) add_direct((*kdup)(k), c, hash_val); return 0; } else { ptr->contents = c; return 1; } } int sc_phash_base::insert_if_not_exists( void* k, void* c ) { unsigned hash_val = do_hash(k); sc_phash_elem* ptr = find_entry( hash_val, k ); if (ptr == 0) { (void) add_direct( k, c, hash_val ); return 0; } else return 1; } int sc_phash_base::insert_if_not_exists( void* k, void* c, void* (*kdup)(const void*) ) { unsigned hash_val = do_hash(k); sc_phash_elem* ptr = find_entry( hash_val, k ); if (ptr == 0) { (void) add_direct( (*kdup)(k), c, hash_val ); return 0; } else return 1; } int sc_phash_base::remove( const void* k ) { unsigned hash_val = do_hash(k); sc_phash_elem** last; sc_phash_elem* ptr = find_entry( hash_val, k, &last ); if (ptr == 0) return 0; sc_assert(*last == ptr); *last = ptr->next; delete ptr; --num_entries; return 1; } int sc_phash_base::remove( const void* k, void** pk, void** pc ) { unsigned hash_val = do_hash(k); sc_phash_elem** last; sc_phash_elem* ptr = find_entry( hash_val, k, &last ); if (ptr == 0) { *pk = 0; *pc = 0; return 0; } else { *pk = ptr->key; *pc = ptr->contents; } sc_assert(*last == ptr); *last = ptr->next; delete ptr; --num_entries; return 1; } int sc_phash_base::remove(const void* k, void (*kfree)(void*)) { void* rk; void* rc; if (remove(k, &rk, &rc)) { (*kfree)(rk); return 1; } else return 0; } int sc_phash_base::remove_by_contents( const void* c ) { sc_phash_elem** last; sc_phash_elem* ptr; int num_removed = 0; for (int i = 0; i < num_bins; ++i) { last = &(bins[i]); ptr = *last; while (ptr != 0) { if (ptr->contents != c) { last = &(ptr->next); ptr = *last; } else { *last = ptr->next; delete ptr; ptr = *last; --num_entries; ++num_removed; } } } return num_removed; } int sc_phash_base::remove_by_contents( bool (*predicate)(const void* c, void* arg), void* arg ) { sc_phash_elem** last; sc_phash_elem* ptr; int num_removed = 0; for (int i = 0; i < num_bins; ++i) { last = &(bins[i]); ptr = *last; while (ptr != 0) { if (! (*predicate)(ptr->contents, arg)) { last = &(ptr->next); ptr = *last; } else { *last = ptr->next; delete ptr; ptr = *last; --num_entries; ++num_removed; } } } return num_removed; } int sc_phash_base::remove_by_contents( const void* c, void (*kfree)(void*) ) { sc_phash_elem** last; sc_phash_elem* ptr; int num_removed = 0; for (int i = 0; i < num_bins; ++i) { last = &(bins[i]); ptr = *last; while (ptr != 0) { if (ptr->contents != c) { last = &(ptr->next); ptr = *last; } else { *last = ptr->next; (*kfree)(ptr->key); delete ptr; ptr = *last; --num_entries; ++num_removed; } } } return num_removed; } int sc_phash_base::remove_by_contents( bool (*predicate)(const void*, void*), void* arg, void (*kfree)(void*)) { sc_phash_elem** last; sc_phash_elem* ptr; int num_removed = 0; for (int i = 0; i < num_bins; ++i) { last = &(bins[i]); ptr = *last; while (ptr != 0) { if (! (*predicate)(ptr->contents, arg)) { last = &(ptr->next); ptr = *last; } else { *last = ptr->next; (*kfree)(ptr->key); delete ptr; ptr = *last; --num_entries; ++num_removed; } } } return num_removed; } int sc_phash_base::lookup( const void* k, void** c_ptr ) const { unsigned hash_val = do_hash(k); sc_phash_elem* ptr = find_entry( hash_val, k ); if (ptr == 0) { if (c_ptr != 0) *c_ptr = default_value; return 0; } else { if (c_ptr != 0) *c_ptr = ptr->contents; return 1; } } void* sc_phash_base::operator[]( const void* key ) const { void* contents; lookup( key, &contents ); return contents; } /***************************************************************************/ void sc_phash_base_iter::reset( sc_phash_base* t ) { table = t; index = 0; entry = 0; next = 0; for (int i = index; i < table->num_bins; ++i) { if (table->bins[i] != 0) { index = i + 1; last = &(table->bins[i]); entry = *last; next = entry->next; break; } } } bool sc_phash_base_iter::empty() const { return (entry == 0); } void sc_phash_base_iter::step() { if (entry) { last = &(entry->next); } entry = next; if (! entry) { for (int i = index; i < table->num_bins; ++i) { if (table->bins[i] != 0) { index = i + 1; last = &(table->bins[i]); entry = *last; next = entry->next; break; } } } else { next = entry->next; } } void sc_phash_base_iter::remove() { delete entry; *last = next; entry = 0; --table->num_entries; step(); } void sc_phash_base_iter::remove(void (*kfree)(void*)) { (*kfree)(entry->key); delete entry; *last = next; entry = 0; --table->num_entries; step(); } void* sc_phash_base_iter::key() const { return entry->key; } void* sc_phash_base_iter::contents() const { return entry->contents; } void* sc_phash_base_iter::set_contents( void* c ) { return entry->contents = c; } /****************************************************************************/ SC_API unsigned default_ptr_hash_fn(const void* p) { return static_cast(((uintptr_t)(p) >> 2) * 2654435789U); } SC_API unsigned default_int_hash_fn(const void* p) { return static_cast((uintptr_t)(p) * 3141592661U); } SC_API unsigned default_str_hash_fn(const void* p) { if (!p) return 0; const char* x = (const char*) p; unsigned int h = 0; unsigned int g; while (*x != 0) { h = (h << 4) + *x++; if ((g = h & 0xf0000000) != 0) h = (h ^ (g >> 24)) ^ g; } return h; } SC_API int sc_strhash_cmp( const void* a, const void* b ) { return std::strcmp( (const char*) a, (const char*) b ); } SC_API void* sc_strhash_kdup(const void* k) { std::size_t size = std::strlen((const char*)k)+1; char* result = new char[size]; std::copy(static_cast(k), static_cast(k) + size, result); return result; } SC_API void sc_strhash_kfree(void* k) { delete[] static_cast(k); } } // namespace sc_core // $Log: sc_hash.cpp,v $ // Revision 1.5 2011/08/26 20:42:30 acg // Andy Goodrich: // (1) Replaced strdup with new and strcpy to eliminate issue with the // Greenhills compiler. // (2) Moved modification log to the end of the file to eliminate line // skew when check-ins are done. // // Revision 1.4 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.3 2011/05/05 17:46:04 acg // Philip A. Hartmann: changes in "swap" support. // // Revision 1.2 2011/02/18 20:38:43 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/utils/sc_mempool.cpp0000644000175000017500000002245114342422106020642 0ustar carstencarsten/***************************************************************************** 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. *****************************************************************************/ /***************************************************************************** sc_mempool.cpp - Memory pools for small objects. Original Author: Stan Y. Liao, Synopsys, Inc. CHANGE LOG AT END OF FILE *****************************************************************************/ // is a class that manages the memory for small objects, // of sizes , 2 * , ..., * // . When a memory request of bytes is made through // the memory pool, the smallest pool such that * // >= is used. The default values of and // are 8 and 8, respectively. Each pool has an allocator, that // simply keeps a free list of cells, and allocate new blocks // whenever necessary. We are relying on malloc() to return a // properly aligned memory blocks. Note that the memory blocks // allocated by the mempool are never freed. Thus, if purify is // used, we may get MIU (memory-in-use) warnings. To disable this, // set the environment variable SYSTEMC_MEMPOOL_DONT_USE to 1. static const char* dont_use_envstring = "SYSTEMC_MEMPOOL_DONT_USE"; static bool use_default_new = false; #include #include #include "sysc/kernel/sc_cmnhdr.h" #include "sysc/utils/sc_mempool.h" using std::printf; namespace sc_core { // An allocator is one that handles a particular size. It keeps a // from which a cell may be allocated quickly if there // is one available. If no cell is available from , then // the allocator tries to find whether space is available from the // most-recently-allocated block, as pointed to by . If // so, then the cell pointed to by is returned, while // is advanced. If now points beyond // the current block, then it's reset to 0. On the other hand, // if was 0 when a request to the block is made, then // a new block is allocated by calling system malloc(), and the new // block becomes the head of . class SC_API sc_allocator { friend class sc_mempool; public: sc_allocator( int blksz, int cellsz ); ~sc_allocator(); void* allocate(); void release(void* p); void display_statistics(); private: union link { link* next; double align; // alignment required. }; int block_size; // size of each block in bytes, // including the link int cell_size; // size of each cell in bytes char* block_list; link* free_list; char* next_avail; int total_alloc; int total_freed; int free_list_alloc; }; sc_allocator::sc_allocator( int blksz, int cellsz ) : block_size(sizeof(link) + (((blksz - 1) / cellsz) + 1) * cellsz), cell_size(cellsz), block_list(0), free_list(0), next_avail(0), total_alloc(0), total_freed(0), free_list_alloc(0) {} sc_allocator::~sc_allocator() { // Shouldn't free the block_list, since global objects that use // the memory pool may not have been destroyed yet ... // Let it leak, let it leak, let it leak ... } void* sc_allocator::allocate() { void* result = 0; total_alloc++; if (free_list != 0) { free_list_alloc++; result = free_list; free_list = free_list->next; return result; } else if (next_avail != 0) { result = next_avail; next_avail += cell_size; // next_avail goes beyond the block if (next_avail >= block_list + block_size) next_avail = 0; return result; } else { // (next_avail == 0) link* new_block = (link*) std::malloc(block_size); // need alignment? new_block->next = (link*) block_list; block_list = (char*) new_block; result = (block_list + sizeof(link)); // Assume that the block will hold more than one cell ... why // wouldn't it? next_avail = ((char*) result) + cell_size; return result; } } void sc_allocator::release(void* p) { total_freed++; ((link*) p)->next = free_list; free_list = (link*) p; } void sc_allocator::display_statistics() { int nblocks = 0; for (link* b = (link*) block_list; b != 0; b = b->next) nblocks++; printf("size %3d: %2d block(s), %3d requests (%3d from free list), %3d freed.\n", cell_size, nblocks, total_alloc, free_list_alloc, total_freed); } static const int cell_sizes[] = { /* 0 */ 0, /* 1 */ 8, /* 2 */ 16, /* 3 */ 24, /* 4 */ 32, /* 5 */ 48, /* 6 */ 64, /* 7 */ 80, /* 8 */ 96, /* 9 */ 128 }; static const int cell_size_to_allocator[] = { /* 0 */ 0, /* 1 */ 1, /* 2 */ 2, /* 3 */ 3, /* 4 */ 4, /* 5 */ 5, /* 6 */ 5, /* 7 */ 6, /* 8 */ 6, /* 9 */ 7, /* 10 */ 7, /* 11 */ 8, /* 12 */ 8, /* 13 */ 9, /* 14 */ 9, /* 15 */ 9, /* 16 */ 9 }; class SC_API sc_mempool_int { friend class sc_mempool; public: sc_mempool_int(int blksz, int npools, int incr); ~sc_mempool_int(); void* do_allocate(std::size_t); void do_release(void*, std::size_t); void display_statistics(); private: sc_allocator** allocators; int num_pools; int increment; int max_size; }; static bool compute_use_default_new() { const char* e = getenv(dont_use_envstring); return (e != 0) && (atoi(e) != 0); } sc_mempool_int::sc_mempool_int(int blksz, int npools, int incr) : allocators(0), num_pools(0), increment(0), max_size(0) { use_default_new = compute_use_default_new(); if (! use_default_new) { num_pools = npools; increment = incr; max_size = cell_sizes[sizeof(cell_sizes)/sizeof(cell_sizes[0]) - 1]; allocators = new sc_allocator*[npools + 1]; for (int i = 1; i <= npools; ++i) allocators[i] = new sc_allocator(blksz, cell_sizes[i]); allocators[0] = allocators[1]; } } sc_mempool_int::~sc_mempool_int() { for (int i = 1; i <= num_pools; ++i) delete allocators[i]; delete[] allocators; } static sc_mempool_int* the_mempool = 0; void* sc_mempool_int::do_allocate(std::size_t sz) { int which_allocator = cell_size_to_allocator[(sz - 1) / increment + 1]; void* p = allocators[which_allocator]->allocate(); return p; } void sc_mempool_int::do_release(void* p, std::size_t sz) { int which_allocator = cell_size_to_allocator[(sz - 1) / increment + 1]; allocators[which_allocator]->release(p); } void sc_mempool_int::display_statistics() { printf("*** Memory Pool Statistics ***\n"); for (int i = 1; i <= num_pools; ++i) allocators[i]->display_statistics(); } /****************************************************************************/ void* sc_mempool::allocate(std::size_t sz) { if (use_default_new) return ::operator new(sz); if (the_mempool == 0) { use_default_new = compute_use_default_new(); if (use_default_new) return ::operator new(sz); // Note that the_mempool is never freed. This is going to cause // memory leaks when the program exits. the_mempool = new sc_mempool_int( 1984, sizeof(cell_sizes)/sizeof(cell_sizes[0]) - 1, 8 ); } if (sz > (unsigned) the_mempool->max_size) return ::operator new(sz); return the_mempool->do_allocate(sz); } void sc_mempool::release(void* p, std::size_t sz) { if (p) { if (use_default_new || sz > (unsigned) the_mempool->max_size) { ::operator delete(p); return; } the_mempool->do_release(p, sz); } } void sc_mempool::display_statistics() { if (the_mempool && !use_default_new) { the_mempool->display_statistics(); } else { printf("SystemC info: no memory allocation was done through the memory pool.\n"); } } } // namespace sc_core // $Log: sc_mempool.cpp,v $ // Revision 1.4 2011/08/26 20:46:18 acg // Andy Goodrich: moved the modification log to the end of the file to // eliminate source line number skew when check-ins are done. // // Revision 1.3 2011/08/24 22:05:56 acg // Torsten Maehne: initialization changes to remove warnings. // // Revision 1.2 2011/02/18 20:38:44 acg // Andy Goodrich: Updated Copyright notice. // // Revision 1.1.1.1 2006/12/15 20:20:06 acg // SystemC 2.3 // // Revision 1.3 2006/01/13 18:53:10 acg // Andy Goodrich: Added $Log command so that CVS comments are reproduced in // the source. // taf systemc-2.3.4/src/sysc/packages/0000755000175000017500000000000014342422106016413 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/0000755000175000017500000000000014342422106017541 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/mem_fn.hpp0000644000175000017500000001721414342422106021520 0ustar carstencarsten#ifndef SC_BOOST_MEM_FN_HPP_INCLUDED #define SC_BOOST_MEM_FN_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // mem_fn.hpp - a generalization of std::mem_fun[_ref] // // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. // Copyright (c) 2001 David Abrahams // Copyright (c) 2003-2005 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/mem_fn.html for documentation. // #include #include #include namespace sc_boost { #if defined(SC_BOOST_NO_VOID_RETURNS) #define SC_BOOST_MEM_FN_CLASS_F , class F #define SC_BOOST_MEM_FN_TYPEDEF(X) namespace _mfi // mem_fun_impl { template struct mf { #define SC_BOOST_MEM_FN_RETURN return #define SC_BOOST_MEM_FN_NAME(X) inner_##X #define SC_BOOST_MEM_FN_CC #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_cdecl #define SC_BOOST_MEM_FN_CC __cdecl #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_stdcall #define SC_BOOST_MEM_FN_CC __stdcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_fastcall #define SC_BOOST_MEM_FN_CC __fastcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #undef SC_BOOST_MEM_FN_RETURN }; // struct mf template<> struct mf { #define SC_BOOST_MEM_FN_RETURN #define SC_BOOST_MEM_FN_NAME(X) inner_##X #define SC_BOOST_MEM_FN_CC #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_cdecl #define SC_BOOST_MEM_FN_CC __cdecl #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_stdcall #define SC_BOOST_MEM_FN_CC __stdcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_MEM_FN_NAME(X) inner_##X##_fastcall #define SC_BOOST_MEM_FN_CC __fastcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #undef SC_BOOST_MEM_FN_RETURN }; // struct mf #undef SC_BOOST_MEM_FN_CLASS_F #undef SC_BOOST_MEM_FN_TYPEDEF_F #define SC_BOOST_MEM_FN_NAME(X) X #define SC_BOOST_MEM_FN_NAME2(X) inner_##X #define SC_BOOST_MEM_FN_CC #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_NAME2 #undef SC_BOOST_MEM_FN_CC #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_MEM_FN_NAME(X) X##_cdecl #define SC_BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl #define SC_BOOST_MEM_FN_CC __cdecl #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_NAME2 #undef SC_BOOST_MEM_FN_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_MEM_FN_NAME(X) X##_stdcall #define SC_BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall #define SC_BOOST_MEM_FN_CC __stdcall #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_NAME2 #undef SC_BOOST_MEM_FN_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_MEM_FN_NAME(X) X##_fastcall #define SC_BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall #define SC_BOOST_MEM_FN_CC __fastcall #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_NAME2 #undef SC_BOOST_MEM_FN_CC #endif } // namespace _mfi #else // #ifdef SC_BOOST_NO_VOID_RETURNS #define SC_BOOST_MEM_FN_CLASS_F #define SC_BOOST_MEM_FN_TYPEDEF(X) typedef X; namespace _mfi { #define SC_BOOST_MEM_FN_RETURN return #define SC_BOOST_MEM_FN_NAME(X) X #define SC_BOOST_MEM_FN_CC #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_MEM_FN_NAME(X) X##_cdecl #define SC_BOOST_MEM_FN_CC __cdecl #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_MEM_FN_NAME(X) X##_stdcall #define SC_BOOST_MEM_FN_CC __stdcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_MEM_FN_NAME(X) X##_fastcall #define SC_BOOST_MEM_FN_CC __fastcall #include #undef SC_BOOST_MEM_FN_CC #undef SC_BOOST_MEM_FN_NAME #endif #undef SC_BOOST_MEM_FN_RETURN } // namespace _mfi #undef SC_BOOST_MEM_FN_CLASS_F #undef SC_BOOST_MEM_FN_TYPEDEF #endif // #ifdef SC_BOOST_NO_VOID_RETURNS #define SC_BOOST_MEM_FN_NAME(X) X #define SC_BOOST_MEM_FN_CC #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_CC #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_MEM_FN_NAME(X) X##_cdecl #define SC_BOOST_MEM_FN_CC __cdecl #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_MEM_FN_NAME(X) X##_stdcall #define SC_BOOST_MEM_FN_CC __stdcall #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_MEM_FN_NAME(X) X##_fastcall #define SC_BOOST_MEM_FN_CC __fastcall #include #undef SC_BOOST_MEM_FN_NAME #undef SC_BOOST_MEM_FN_CC #endif // data member support namespace _mfi { template class dm { public: typedef R const & result_type; typedef T const * argument_type; private: typedef R (T::*F); F f_; template R const & call(U & u, T const *) const { return (u.*f_); } template R & call(U & u, T *) const { return (u.*f_); } template R const & call(U & u, void const *) const { return (get_pointer(u)->*f_); } public: explicit dm(F f): f_(f) {} R & operator()(T * p) const { return (p->*f_); } R const & operator()(T const * p) const { return (p->*f_); } template R const & operator()(U & u) const { return call(u, &u); } #if !SC_BOOST_WORKAROUND(SC_BOOST_MSVC, <= 1300) && !SC_BOOST_WORKAROUND(__MWERKS__, < 0x3200) R & operator()(T & t) const { return (t.*f_); } #endif R const & operator()(T const & t) const { return (t.*f_); } bool operator==(dm const & rhs) const { return f_ == rhs.f_; } bool operator!=(dm const & rhs) const { return f_ != rhs.f_; } }; } // namespace _mfi template _mfi::dm mem_fn(R T::*f) { return _mfi::dm(f); } } // namespace sc_boost #endif // #ifndef SC_BOOST_MEM_FN_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/bind/0000755000175000017500000000000014342422106020455 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/bind/mem_fn_vw.hpp0000644000175000017500000002030014342422106023136 0ustar carstencarsten// // bind/mem_fn_vw.hpp - void return helper wrappers // // Do not include this header directly // // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/mem_fn.html for documentation. // template struct SC_BOOST_MEM_FN_NAME(mf0): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf0) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (); explicit SC_BOOST_MEM_FN_NAME(mf0)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf0)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf0): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf0) { typedef R (SC_BOOST_MEM_FN_CC T::*F) () const; explicit SC_BOOST_MEM_FN_NAME(cmf0)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf0)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf1): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf1) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1); explicit SC_BOOST_MEM_FN_NAME(mf1)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf1)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf1): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf1) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1) const; explicit SC_BOOST_MEM_FN_NAME(cmf1)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf1)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf2): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf2) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2); explicit SC_BOOST_MEM_FN_NAME(mf2)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf2)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf2): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf2) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2) const; explicit SC_BOOST_MEM_FN_NAME(cmf2)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf2)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf3): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf3) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3); explicit SC_BOOST_MEM_FN_NAME(mf3)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf3)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf3): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf3) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const; explicit SC_BOOST_MEM_FN_NAME(cmf3)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf3)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf4): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf4) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4); explicit SC_BOOST_MEM_FN_NAME(mf4)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf4)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf4): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf4) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const; explicit SC_BOOST_MEM_FN_NAME(cmf4)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf4)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf5): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf5) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5); explicit SC_BOOST_MEM_FN_NAME(mf5)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf5)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf5): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf5) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const; explicit SC_BOOST_MEM_FN_NAME(cmf5)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf5)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf6): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf6) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6); explicit SC_BOOST_MEM_FN_NAME(mf6)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf6)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf6): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf6) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const; explicit SC_BOOST_MEM_FN_NAME(cmf6)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf6)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf7): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf7) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7); explicit SC_BOOST_MEM_FN_NAME(mf7)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf7)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf7): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf7) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const; explicit SC_BOOST_MEM_FN_NAME(cmf7)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf7)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(mf8): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf8) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8); explicit SC_BOOST_MEM_FN_NAME(mf8)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(mf8)(f) {} }; template struct SC_BOOST_MEM_FN_NAME(cmf8): public mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf8) { typedef R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const; explicit SC_BOOST_MEM_FN_NAME(cmf8)(F f): mf::SC_BOOST_NESTED_TEMPLATE SC_BOOST_MEM_FN_NAME2(cmf8)(f) {} }; systemc-2.3.4/src/sysc/packages/boost/bind/bind_mf_cc.hpp0000644000175000017500000002526514342422106023243 0ustar carstencarsten// // bind/bind_mf_cc.hpp - support for different calling conventions // // Do not include this header directly. // // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // // 0 template _bi::bind_t, typename _bi::list_av_1::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (), A1 a1) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf0) F; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t(F(f), list_type(a1)); } template _bi::bind_t, typename _bi::list_av_1::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) () const, A1 a1) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf0) F; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t(F(f), list_type(a1)); } // 1 template _bi::bind_t, typename _bi::list_av_2::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf1) F; typedef typename _bi::list_av_2::type list_type; return _bi::bind_t(F(f), list_type(a1, a2)); } template _bi::bind_t, typename _bi::list_av_2::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf1) F; typedef typename _bi::list_av_2::type list_type; return _bi::bind_t(F(f), list_type(a1, a2)); } // 2 template _bi::bind_t, typename _bi::list_av_3::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf2) F; typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3)); } template _bi::bind_t, typename _bi::list_av_3::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf2) F; typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3)); } // 3 template _bi::bind_t, typename _bi::list_av_4::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf3) F; typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); } template _bi::bind_t, typename _bi::list_av_4::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf3) F; typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4)); } // 4 template _bi::bind_t, typename _bi::list_av_5::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf4) F; typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); } template _bi::bind_t, typename _bi::list_av_5::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf4) F; typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5)); } // 5 template _bi::bind_t, typename _bi::list_av_6::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf5) F; typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); } template _bi::bind_t, typename _bi::list_av_6::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf5) F; typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6)); } // 6 template _bi::bind_t, typename _bi::list_av_7::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf6) F; typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); } template _bi::bind_t, typename _bi::list_av_7::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf6) F; typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); } // 7 template _bi::bind_t, typename _bi::list_av_8::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf7) F; typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template _bi::bind_t, typename _bi::list_av_8::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf7) F; typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } // 8 template _bi::bind_t, typename _bi::list_av_9::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::SC_BOOST_BIND_MF_NAME(mf8) F; typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } template _bi::bind_t, typename _bi::list_av_9::type> SC_BOOST_BIND(R (SC_BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::SC_BOOST_BIND_MF_NAME(cmf8) F; typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } systemc-2.3.4/src/sysc/packages/boost/bind/placeholders.hpp0000644000175000017500000000375214342422106023642 0ustar carstencarsten#ifndef SC_BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED #define SC_BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // bind/placeholders.hpp - _N definitions // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // #include #include namespace sc_unnamed { namespace { // anonymous namespace #if defined(__BORLANDC__) || defined(__GNUC__) static inline sc_boost::arg<1> _1() { return sc_boost::arg<1>(); } static inline sc_boost::arg<2> _2() { return sc_boost::arg<2>(); } static inline sc_boost::arg<3> _3() { return sc_boost::arg<3>(); } static inline sc_boost::arg<4> _4() { return sc_boost::arg<4>(); } static inline sc_boost::arg<5> _5() { return sc_boost::arg<5>(); } static inline sc_boost::arg<6> _6() { return sc_boost::arg<6>(); } static inline sc_boost::arg<7> _7() { return sc_boost::arg<7>(); } static inline sc_boost::arg<8> _8() { return sc_boost::arg<8>(); } static inline sc_boost::arg<9> _9() { return sc_boost::arg<9>(); } #elif defined(SC_BOOST_MSVC) || (defined(__DECCXX_VER) && __DECCXX_VER <= 60590031) || defined(__MWERKS__) static sc_boost::arg<1> _1; static sc_boost::arg<2> _2; static sc_boost::arg<3> _3; static sc_boost::arg<4> _4; static sc_boost::arg<5> _5; static sc_boost::arg<6> _6; static sc_boost::arg<7> _7; static sc_boost::arg<8> _8; static sc_boost::arg<9> _9; #else sc_boost::arg<1> _1; sc_boost::arg<2> _2; sc_boost::arg<3> _3; sc_boost::arg<4> _4; sc_boost::arg<5> _5; sc_boost::arg<6> _6; sc_boost::arg<7> _7; sc_boost::arg<8> _8; sc_boost::arg<9> _9; #endif } // anonymous namespace } // namespace sc_unnamed #endif // #ifndef SC_BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/bind/mem_fn_cc.hpp0000644000175000017500000001154614342422106023103 0ustar carstencarsten// // bind/mem_fn_cc.hpp - support for different calling conventions // // Do not include this header directly. // // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/mem_fn.html for documentation. // template _mfi::SC_BOOST_MEM_FN_NAME(mf0) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) ()) { return _mfi::SC_BOOST_MEM_FN_NAME(mf0)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf0) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) () const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf0)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf1) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf1)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf1) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf1)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf2) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf2)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf2) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf2)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf3) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf3)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf3) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf3)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf4) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf4)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf4) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf4)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf5) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf5)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf5) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf5)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf6) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf6)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf6) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf6)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf7) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf7)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf7) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf7)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(mf8) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8)) { return _mfi::SC_BOOST_MEM_FN_NAME(mf8)(f); } template _mfi::SC_BOOST_MEM_FN_NAME(cmf8) mem_fn(R (SC_BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const) { return _mfi::SC_BOOST_MEM_FN_NAME(cmf8)(f); } systemc-2.3.4/src/sysc/packages/boost/bind/mem_fn_template.hpp0000644000175000017500000005771314342422106024337 0ustar carstencarsten// // bind/mem_fn_template.hpp // // Do not include this header directly // // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/mem_fn.html for documentation. // // mf0 template class SC_BOOST_MEM_FN_NAME(mf0) { public: typedef R result_type; typedef T * argument_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) ()) F f_; template R call(U & u, T const *) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(); } template R call(U & u, void const *) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); } public: explicit SC_BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {} R operator()(T * p) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(); } template R operator()(U & u) const { SC_BOOST_MEM_FN_RETURN call(u, &u); } R operator()(T & t) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(); } bool operator==(SC_BOOST_MEM_FN_NAME(mf0) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf0) const & rhs) const { return f_ != rhs.f_; } }; // cmf0 template class SC_BOOST_MEM_FN_NAME(cmf0) { public: typedef R result_type; typedef T const * argument_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) () const) F f_; template R call(U & u, T const *) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(); } template R call(U & u, void const *) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); } public: explicit SC_BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {} template R operator()(U const & u) const { SC_BOOST_MEM_FN_RETURN call(u, &u); } R operator()(T const & t) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf0) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf0) const & rhs) const { return f_ != rhs.f_; } }; // mf1 template class SC_BOOST_MEM_FN_NAME(mf1) { public: typedef R result_type; typedef T * first_argument_type; typedef A1 second_argument_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1)) F f_; template R call(U & u, T const *, B1 & b1) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1); } template R call(U & u, void const *, B1 & b1) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); } public: explicit SC_BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {} R operator()(T * p, A1 a1) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1); } template R operator()(U & u, A1 a1) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1); } R operator()(T & t, A1 a1) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1); } bool operator==(SC_BOOST_MEM_FN_NAME(mf1) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf1) const & rhs) const { return f_ != rhs.f_; } }; // cmf1 template class SC_BOOST_MEM_FN_NAME(cmf1) { public: typedef R result_type; typedef T const * first_argument_type; typedef A1 second_argument_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1) const) F f_; template R call(U & u, T const *, B1 & b1) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1); } template R call(U & u, void const *, B1 & b1) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); } public: explicit SC_BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {} template R operator()(U const & u, A1 a1) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1); } R operator()(T const & t, A1 a1) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf1) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf1) const & rhs) const { return f_ != rhs.f_; } }; // mf2 template class SC_BOOST_MEM_FN_NAME(mf2) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); } template R call(U & u, void const *, B1 & b1, B2 & b2) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); } public: explicit SC_BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2); } template R operator()(U & u, A1 a1, A2 a2) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2); } R operator()(T & t, A1 a1, A2 a2) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); } bool operator==(SC_BOOST_MEM_FN_NAME(mf2) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf2) const & rhs) const { return f_ != rhs.f_; } }; // cmf2 template class SC_BOOST_MEM_FN_NAME(cmf2) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); } template R call(U & u, void const *, B1 & b1, B2 & b2) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); } public: explicit SC_BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2); } R operator()(T const & t, A1 a1, A2 a2) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf2) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf2) const & rhs) const { return f_ != rhs.f_; } }; // mf3 template class SC_BOOST_MEM_FN_NAME(mf3) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); } public: explicit SC_BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3); } template R operator()(U & u, A1 a1, A2 a2, A3 a3) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3); } R operator()(T & t, A1 a1, A2 a2, A3 a3) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); } bool operator==(SC_BOOST_MEM_FN_NAME(mf3) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf3) const & rhs) const { return f_ != rhs.f_; } }; // cmf3 template class SC_BOOST_MEM_FN_NAME(cmf3) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); } public: explicit SC_BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2, A3 a3) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3); } R operator()(T const & t, A1 a1, A2 a2, A3 a3) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf3) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf3) const & rhs) const { return f_ != rhs.f_; } }; // mf4 template class SC_BOOST_MEM_FN_NAME(mf4) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); } public: explicit SC_BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4); } template R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4); } R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); } bool operator==(SC_BOOST_MEM_FN_NAME(mf4) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf4) const & rhs) const { return f_ != rhs.f_; } }; // cmf4 template class SC_BOOST_MEM_FN_NAME(cmf4) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); } public: explicit SC_BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4); } R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf4) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf4) const & rhs) const { return f_ != rhs.f_; } }; // mf5 template class SC_BOOST_MEM_FN_NAME(mf5) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); } public: explicit SC_BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5); } template R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5); } R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); } bool operator==(SC_BOOST_MEM_FN_NAME(mf5) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf5) const & rhs) const { return f_ != rhs.f_; } }; // cmf5 template class SC_BOOST_MEM_FN_NAME(cmf5) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); } public: explicit SC_BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5); } R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf5) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf5) const & rhs) const { return f_ != rhs.f_; } }; // mf6 template class SC_BOOST_MEM_FN_NAME(mf6) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); } public: explicit SC_BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6); } template R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6); } R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); } bool operator==(SC_BOOST_MEM_FN_NAME(mf6) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf6) const & rhs) const { return f_ != rhs.f_; } }; // cmf6 template class SC_BOOST_MEM_FN_NAME(cmf6) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); } public: explicit SC_BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6); } R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf6) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf6) const & rhs) const { return f_ != rhs.f_; } }; // mf7 template class SC_BOOST_MEM_FN_NAME(mf7) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); } public: explicit SC_BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7); } template R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7); } R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); } bool operator==(SC_BOOST_MEM_FN_NAME(mf7) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf7) const & rhs) const { return f_ != rhs.f_; } }; // cmf7 template class SC_BOOST_MEM_FN_NAME(cmf7) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); } public: explicit SC_BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {} template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7); } R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf7) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf7) const & rhs) const { return f_ != rhs.f_; } }; // mf8 template class SC_BOOST_MEM_FN_NAME(mf8) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8)) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8); } public: explicit SC_BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {} R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8); } template R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8); } R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8); } bool operator==(SC_BOOST_MEM_FN_NAME(mf8) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(mf8) const & rhs) const { return f_ != rhs.f_; } }; // cmf8 template class SC_BOOST_MEM_FN_NAME(cmf8) { public: typedef R result_type; private: SC_BOOST_MEM_FN_TYPEDEF(R (SC_BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const) F f_; template R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const { SC_BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8); } template R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const { SC_BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8); } public: explicit SC_BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {} R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8); } template R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8); } R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { SC_BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8); } bool operator==(SC_BOOST_MEM_FN_NAME(cmf8) const & rhs) const { return f_ == rhs.f_; } bool operator!=(SC_BOOST_MEM_FN_NAME(cmf8) const & rhs) const { return f_ != rhs.f_; } }; systemc-2.3.4/src/sysc/packages/boost/bind/apply.hpp0000644000175000017500000000456114342422106022321 0ustar carstencarsten#ifndef SC_BOOST_BIND_APPLY_HPP_INCLUDED #define SC_BOOST_BIND_APPLY_HPP_INCLUDED // // apply.hpp // // Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // namespace sc_boost { template struct apply { typedef R result_type; template result_type operator()(F & f) const { return f(); } template result_type operator()(F & f, A1 & a1) const { return f(a1); } template result_type operator()(F & f, A1 & a1, A2 & a2) const { return f(a1, a2); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3) const { return f(a1, a2, a3); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4) const { return f(a1, a2, a3, a4); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const { return f(a1, a2, a3, a4, a5); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const { return f(a1, a2, a3, a4, a5, a6); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const { return f(a1, a2, a3, a4, a5, a6, a7); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const { return f(a1, a2, a3, a4, a5, a6, a7, a8); } template result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const { return f(a1, a2, a3, a4, a5, a6, a7, a8, a9); } }; } // namespace sc_boost #endif // #ifndef SC_BOOST_BIND_APPLY_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/bind/bind_cc.hpp0000644000175000017500000001374614342422106022562 0ustar carstencarsten// // bind/bind_cc.hpp - support for different calling conventions // // Do not include this header directly. // // Copyright (c) 2001 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // template _bi::bind_t SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) ()) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (); typedef _bi::list0 list_type; return _bi::bind_t (f, list_type()); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1), A1 a1) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1); typedef typename _bi::list_av_1::type list_type; return _bi::bind_t (f, list_type(a1)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2); typedef typename _bi::list_av_2::type list_type; return _bi::bind_t (f, list_type(a1, a2)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3); typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4); typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4, B5); typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6); typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7); typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8); typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template _bi::bind_t::type> SC_BOOST_BIND(SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef SC_BOOST_BIND_ST R (SC_BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9); typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } systemc-2.3.4/src/sysc/packages/boost/bind/arg.hpp0000644000175000017500000000132114342422106021734 0ustar carstencarsten#ifndef SC_BOOST_BIND_ARG_HPP_INCLUDED #define SC_BOOST_BIND_ARG_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // bind/arg.hpp // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // namespace sc_boost { template class arg { }; template bool operator==(arg const &, arg const &) { return true; } } // namespace sc_boost #endif // #ifndef SC_BOOST_BIND_ARG_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/bind/protect.hpp0000644000175000017500000001020314342422106022642 0ustar carstencarsten#ifndef SC_BOOST_BIND_PROTECT_HPP_INCLUDED #define SC_BOOST_BIND_PROTECT_HPP_INCLUDED // // protect.hpp // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // namespace sc_boost { namespace _bi { template class protected_bind_t { public: typedef typename F::result_type result_type; explicit protected_bind_t(F f): f_(f) { } result_type operator()() { return f_(); } result_type operator()() const { return f_(); } template result_type operator()(A1 & a1) { return f_(a1); } template result_type operator()(A1 & a1) const { return f_(a1); } template result_type operator()(A1 & a1, A2 & a2) { return f_(a1, a2); } template result_type operator()(A1 & a1, A2 & a2) const { return f_(a1, a2); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3) { return f_(a1, a2, a3); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3) const { return f_(a1, a2, a3); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) { return f_(a1, a2, a3, a4); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const { return f_(a1, a2, a3, a4); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) { return f_(a1, a2, a3, a4, a5); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const { return f_(a1, a2, a3, a4, a5); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) { return f_(a1, a2, a3, a4, a5, a6); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const { return f_(a1, a2, a3, a4, a5, a6); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) { return f_(a1, a2, a3, a4, a5, a6, a7); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const { return f_(a1, a2, a3, a4, a5, a6, a7); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const { return f_(a1, a2, a3, a4, a5, a6, a7, a8); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const { return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); } private: F f_; }; } // namespace _bi template _bi::protected_bind_t protect(F f) { return _bi::protected_bind_t(f); } } // namespace sc_boost #endif // #ifndef SC_BOOST_BIND_PROTECT_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/bind/bind_template.hpp0000644000175000017500000001410714342422106024000 0ustar carstencarsten// // bind/bind_template.hpp // // Do not include this header directly. // // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // typedef typename result_traits::type result_type; result_type operator()() { list0 a; SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } result_type operator()() const { list0 a; SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1) { list1 a(a1); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1) const { list1 a(a1); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2) { list2 a(a1, a2); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2) const { list2 a(a1, a2); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3) { list3 a(a1, a2, a3); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3) const { list3 a(a1, a2, a3); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) { list4 a(a1, a2, a3, a4); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const { list4 a(a1, a2, a3, a4); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) { list5 a(a1, a2, a3, a4, a5); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const { list5 a(a1, a2, a3, a4, a5); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) { list6 a(a1, a2, a3, a4, a5, a6); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const { list6 a(a1, a2, a3, a4, a5, a6); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) { list7 a(a1, a2, a3, a4, a5, a6, a7); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const { list7 a(a1, a2, a3, a4, a5, a6, a7); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) { list8 a(a1, a2, a3, a4, a5, a6, a7, a8); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const { list8 a(a1, a2, a3, a4, a5, a6, a7, a8); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) { list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const { list9 a(a1, a2, a3, a4, a5, a6, a7, a8, a9); SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type eval(A & a) { SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template result_type eval(A & a) const { SC_BOOST_BIND_RETURN l_(type(), f_, a, 0); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, f_, 0); l_.accept(v); } bool compare(this_type const & rhs) const { return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_; } private: F f_; L l_; systemc-2.3.4/src/sysc/packages/boost/bind/make_adaptable.hpp0000644000175000017500000000615314342422106024105 0ustar carstencarsten#ifndef SC_BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED #define SC_BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED // // make_adaptable.hpp // // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // namespace sc_boost { namespace _bi { template class af0 { public: typedef R result_type; explicit af0(F f): f_(f) { } result_type operator()() { return f_(); } result_type operator()() const { return f_(); } private: F f_; }; template class af1 { public: typedef R result_type; typedef A1 argument_type; typedef A1 arg1_type; explicit af1(F f): f_(f) { } result_type operator()(A1 a1) { return f_(a1); } result_type operator()(A1 a1) const { return f_(a1); } private: F f_; }; template class af2 { public: typedef R result_type; typedef A1 first_argument_type; typedef A2 second_argument_type; typedef A1 arg1_type; typedef A2 arg2_type; explicit af2(F f): f_(f) { } result_type operator()(A1 a1, A2 a2) { return f_(a1, a2); } result_type operator()(A1 a1, A2 a2) const { return f_(a1, a2); } private: F f_; }; template class af3 { public: typedef R result_type; typedef A1 arg1_type; typedef A2 arg2_type; typedef A3 arg3_type; explicit af3(F f): f_(f) { } result_type operator()(A1 a1, A2 a2, A3 a3) { return f_(a1, a2, a3); } result_type operator()(A1 a1, A2 a2, A3 a3) const { return f_(a1, a2, a3); } private: F f_; }; template class af4 { public: typedef R result_type; typedef A1 arg1_type; typedef A2 arg2_type; typedef A3 arg3_type; typedef A4 arg4_type; explicit af4(F f): f_(f) { } result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) { return f_(a1, a2, a3, a4); } result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const { return f_(a1, a2, a3, a4); } private: F f_; }; } // namespace _bi template _bi::af0 make_adaptable(F f) { return _bi::af0(f); } template _bi::af1 make_adaptable(F f) { return _bi::af1(f); } template _bi::af2 make_adaptable(F f) { return _bi::af2(f); } template _bi::af3 make_adaptable(F f) { return _bi::af3(f); } template _bi::af4 make_adaptable(F f) { return _bi::af4(f); } } // namespace sc_boost #endif // #ifndef SC_BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/non_type.hpp0000644000175000017500000000116414342422106022107 0ustar carstencarsten// ------------------------------------- // // (C) Copyright Gennaro Prota 2003. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // ------------------------------------------------------ #ifndef SC_BOOST_NON_TYPE_HPP_GP_20030417 #define SC_BOOST_NON_TYPE_HPP_GP_20030417 namespace sc_boost { // Just a simple "envelope" for non-type template parameters. Useful // to work around some MSVC deficiencies. template struct non_type { }; } #endif // include guard systemc-2.3.4/src/sysc/packages/boost/mpl/0000755000175000017500000000000014342422106020331 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/mpl/bool.hpp0000644000175000017500000000213314342422106021774 0ustar carstencarsten #ifndef SC_BOOST_MPL_BOOL_HPP_INCLUDED #define SC_BOOST_MPL_BOOL_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2000-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/bool.hpp,v $ // $Date: 2009/10/14 19:11:02 $ // $Revision: 1.2 $ #include #include #include SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN template< bool C_ > struct bool_ { SC_BOOST_STATIC_CONSTANT(bool, value = C_); typedef integral_c_tag tag; typedef bool_ type; typedef bool value_type; operator bool() const { return this->value; } }; #if !defined(SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION) template< bool C_ > bool const bool_::value; #endif SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE #endif // SC_BOOST_MPL_BOOL_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/integral_c_tag.hpp0000644000175000017500000000157014342422106024007 0ustar carstencarsten #ifndef SC_BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED #define SC_BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/integral_c_tag.hpp,v $ // $Date: 2009/10/14 19:11:02 $ // $Revision: 1.2 $ #include #include SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN struct integral_c_tag { SC_BOOST_STATIC_CONSTANT(int, value = 0); }; SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag) #endif // SC_BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/bool_fwd.hpp0000644000175000017500000000162014342422106022634 0ustar carstencarsten #ifndef SC_BOOST_MPL_BOOL_FWD_HPP_INCLUDED #define SC_BOOST_MPL_BOOL_FWD_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2000-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/bool_fwd.hpp,v $ // $Date: 2009/10/14 19:11:02 $ // $Revision: 1.2 $ #include SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN template< bool C_ > struct bool_; // shorcuts typedef bool_ true_; typedef bool_ false_; SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(bool_) SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(true_) SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(false_) #endif // SC_BOOST_MPL_BOOL_FWD_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/0000755000175000017500000000000014342422106021265 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/0000755000175000017500000000000014342422106022532 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/intel.hpp0000644000175000017500000000121614342422106024356 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/intel.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ // SC_BOOST_INTEL_CXX_VERSION is defined here: #include #endif // SC_BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/msvc.hpp0000644000175000017500000000120214342422106024206 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2002-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/msvc.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ // SC_BOOST_MSVC is defined here: #include #endif // SC_BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/workaround.hpp0000644000175000017500000000120214342422106025431 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2002-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/workaround.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ #include #endif // SC_BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/gcc.hpp0000644000175000017500000000132114342422106023774 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/gcc.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ #if defined(__GNUC__) && !defined(__EDG_VERSION__) # define SC_BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__) #else # define SC_BOOST_MPL_CFG_GCC 0 #endif #endif // SC_BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/static_constant.hpp0000644000175000017500000000150714342422106026446 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2000-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/static_constant.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ #if !defined(SC_BOOST_MPL_PREPROCESSING_MODE) // SC_BOOST_STATIC_CONSTANT is defined here: # include #else // undef the macro for the preprocessing mode # undef SC_BOOST_STATIC_CONSTANT #endif #endif // SC_BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/config/adl.hpp0000644000175000017500000000312414342422106024003 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED #define SC_BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2002-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/config/adl.hpp,v $ // $Date: 2009/10/14 19:11:07 $ // $Revision: 1.2 $ #include #include #include #include // agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC, // but putting everything expect public, user-specializable metafunctions into // a separate global namespace has a nice side effect of reducing the length // of template instantiation symbols, so we apply the workaround on all // platforms that can handle it #if !defined(SC_BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \ && ( SC_BOOST_WORKAROUND(SC_BOOST_MSVC, SC_BOOST_TESTED_AT(1400)) \ || SC_BOOST_WORKAROUND(__BORLANDC__, < 0x600) \ || SC_BOOST_WORKAROUND(__DMC__, SC_BOOST_TESTED_AT(0x840)) \ || SC_BOOST_WORKAROUND(__MWERKS__, SC_BOOST_TESTED_AT(0x3202)) \ || SC_BOOST_WORKAROUND(SC_BOOST_INTEL_CXX_VERSION, SC_BOOST_TESTED_AT(810)) \ ) # define SC_BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE #endif #endif // SC_BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/mpl/aux_/adl_barrier.hpp0000644000175000017500000000337414342422106024253 0ustar carstencarsten #ifndef SC_BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED #define SC_BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED // Copyright Aleksey Gurtovoy 2002-2004 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. // $Source: /Users/acg/CVSROOT/systemc-2.3/src/sysc/packages/boost/mpl/aux_/adl_barrier.hpp,v $ // $Date: 2009/10/14 19:11:05 $ // $Revision: 1.3 $ #include #include #include #if !defined(SC_BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE sc_mpl_ # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace sc_mpl_ { # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE } # define SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \ namespace sc_boost { namespace mpl { \ using ::SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \ } } \ /**/ #if !defined(SC_BOOST_MPL_PREPROCESSING_MODE) namespace SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} } namespace sc_boost { namespace mpl { using namespace SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE; namespace aux { using namespace SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; } }} #endif #else // SC_BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE sc_boost::mpl # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace sc_boost { namespace mpl { # define SC_BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }} # define SC_BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/ #endif #endif // SC_BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/Makefile.am0000644000175000017500000000777414342422106021614 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/packages/boost/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Andy Goodrich, Forte Design Systems, 05 May 2003 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc H_FILES = \ bind.hpp \ config.hpp \ get_pointer.hpp \ mem_fn.hpp \ non_type.hpp \ ref.hpp \ type.hpp \ \ bind/apply.hpp \ bind/arg.hpp \ bind/bind_cc.hpp \ bind/bind_mf_cc.hpp \ bind/bind_template.hpp \ bind/make_adaptable.hpp \ bind/mem_fn_cc.hpp \ bind/mem_fn_template.hpp \ bind/mem_fn_vw.hpp \ bind/placeholders.hpp \ bind/protect.hpp \ \ config/compiler/borland.hpp \ config/compiler/comeau.hpp \ config/compiler/common_edg.hpp \ config/compiler/compaq_cxx.hpp \ config/compiler/digitalmars.hpp \ config/compiler/gcc.hpp \ config/compiler/greenhills.hpp \ config/compiler/hp_acc.hpp \ config/compiler/intel.hpp \ config/compiler/kai.hpp \ config/compiler/metrowerks.hpp \ config/compiler/mpw.hpp \ config/compiler/sgi_mipspro.hpp \ config/compiler/sunpro_cc.hpp \ config/compiler/vacpp.hpp \ config/compiler/visualc.hpp \ config/platform/aix.hpp \ config/platform/amigaos.hpp \ config/platform/beos.hpp \ config/platform/bsd.hpp \ config/platform/cygwin.hpp \ config/platform/hpux.hpp \ config/platform/irix.hpp \ config/platform/linux.hpp \ config/platform/macos.hpp \ config/platform/solaris.hpp \ config/platform/win32.hpp \ config/posix_features.hpp \ config/select_compiler_config.hpp \ config/select_platform_config.hpp \ config/select_stdlib_config.hpp \ config/stdlib/dinkumware.hpp \ config/stdlib/libcomo.hpp \ config/stdlib/libstdcpp3.hpp \ config/stdlib/modena.hpp \ config/stdlib/msl.hpp \ config/stdlib/roguewave.hpp \ config/stdlib/sgi.hpp \ config/stdlib/stlport.hpp \ config/stdlib/vacpp.hpp \ config/suffix.hpp \ config/user.hpp \ \ detail/endian.hpp \ detail/workaround.hpp \ \ mpl/aux_/adl_barrier.hpp \ mpl/aux_/config/adl.hpp \ mpl/aux_/config/gcc.hpp \ mpl/aux_/config/intel.hpp \ mpl/aux_/config/msvc.hpp \ mpl/aux_/config/static_constant.hpp \ mpl/aux_/config/workaround.hpp \ mpl/bool.hpp \ mpl/bool_fwd.hpp \ mpl/integral_c_tag.hpp \ \ utility/addressof.hpp \ utility/enable_if.hpp \ utility/string_view.hpp \ utility/string_view_fwd.hpp EXTRA_DIST += \ LICENSE_1_0.txt localincludedir = $(includedir)/sysc/packages/boost nobase_localinclude_HEADERS = $(H_FILES) INCDIRS = \ bind \ config/compiler \ config/platform \ config/stdlib \ config \ detail \ mpl/aux_/config \ mpl/aux_ \ mpl \ utility uninstall-hook: test ! -d "$(localincludedir)" || ( set -e ; cd "$(localincludedir)"; \ for dir in $(INCDIRS) ; do test ! -d $$dir || rmdir $$dir ; done ; \ cd - ; rmdir "$(localincludedir)" ) ## Taf! systemc-2.3.4/src/sysc/packages/boost/get_pointer.hpp0000644000175000017500000000342514342422106022575 0ustar carstencarsten// Copyright Peter Dimov and David Abrahams 2002. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef SC_GET_POINTER_DWA20021219_HPP # define SC_GET_POINTER_DWA20021219_HPP # include namespace sc_boost { // get_pointer(p) extracts a ->* capable pointer from p template T * get_pointer(T * p) { return p; } // get_pointer(shared_ptr const & p) has been moved to shared_ptr.hpp #if !defined( SC_BOOST_NO_AUTO_PTR ) #if defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L)) #if defined( SC_BOOST_GCC ) #if SC_BOOST_GCC >= 40600 #define SC_BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS #endif // SC_BOOST_GCC >= 40600 #elif defined( __clang__ ) && defined( __has_warning ) #if __has_warning("-Wdeprecated-declarations") #define SC_BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS #endif // __has_warning("-Wdeprecated-declarations") #endif #endif // defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L)) #if defined( SC_BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS ) // Disable libstdc++ warnings about std::auto_ptr being deprecated in C++11 mode #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #define SC_BOOST_CORE_DETAIL_DISABLED_DEPRECATED_WARNINGS #endif template T * get_pointer(std::auto_ptr const& p) { return p.get(); } #if defined( SC_BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS ) #pragma GCC diagnostic pop #undef SC_BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS #endif #endif // !defined( BOOST_NO_AUTO_PTR ) } // namespace sc_boost #endif // SC_GET_POINTER_DWA20021219_HPP systemc-2.3.4/src/sysc/packages/boost/config/0000755000175000017500000000000014342422106021006 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/config/platform/0000755000175000017500000000000014342422106022632 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/config/platform/solaris.hpp0000644000175000017500000000105114342422106025014 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // sun specific config options: #define SC_BOOST_PLATFORM "Sun Solaris" #define SC_BOOST_HAS_GETTIMEOFDAY // boilerplate code: #define SC_BOOST_HAS_UNISTD_H #include systemc-2.3.4/src/sysc/packages/boost/config/platform/hpux.hpp0000644000175000017500000000400114342422106024322 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001 - 2003. // (C) Copyright David Abrahams 2002. // (C) Copyright Toon Knapen 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // hpux specific config options: #define SC_BOOST_PLATFORM "HP-UX" // In principle, HP-UX has a nice under the name // However, it has the following problem: // Use of UINT32_C(0) results in "0u l" for the preprocessed source // (verifyable with gcc 2.95.3, assumed for HP aCC) // #define SC_BOOST_HAS_STDINT_H #define SC_BOOST_NO_SWPRINTF #define SC_BOOST_NO_CWCTYPE #if defined(__GNUC__) # if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3)) // GNU C on HP-UX does not support threads (checked up to gcc 3.3) # define SC_BOOST_DISABLE_THREADS # elif !defined(SC_BOOST_DISABLE_THREADS) // threads supported from gcc-3.3 onwards: # define SC_BOOST_HAS_THREADS # define SC_BOOST_HAS_PTHREADS # endif #endif // boilerplate code: #define SC_BOOST_HAS_UNISTD_H #include // the following are always available: #ifndef SC_BOOST_HAS_GETTIMEOFDAY # define SC_BOOST_HAS_GETTIMEOFDAY #endif #ifndef SC_BOOST_HAS_SCHED_YIELD # define SC_BOOST_HAS_SCHED_YIELD #endif #ifndef SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE # define SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE #endif #ifndef SC_BOOST_HAS_NL_TYPES_H # define SC_BOOST_HAS_NL_TYPES_H #endif #ifndef SC_BOOST_HAS_NANOSLEEP # define SC_BOOST_HAS_NANOSLEEP #endif #ifndef SC_BOOST_HAS_GETTIMEOFDAY # define SC_BOOST_HAS_GETTIMEOFDAY #endif #ifndef SC_BOOST_HAS_DIRENT_H # define SC_BOOST_HAS_DIRENT_H #endif #ifndef SC_BOOST_HAS_CLOCK_GETTIME # define SC_BOOST_HAS_CLOCK_GETTIME #endif #ifndef SC_BOOST_HAS_SIGACTION # define SC_BOOST_HAS_SIGACTION #endif systemc-2.3.4/src/sysc/packages/boost/config/platform/beos.hpp0000644000175000017500000000116414342422106024275 0ustar carstencarsten// (C) Copyright John Maddock 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // BeOS specific config options: #define SC_BOOST_PLATFORM "BeOS" #define SC_BOOST_NO_CWCHAR #define SC_BOOST_NO_CWCTYPE #define SC_BOOST_HAS_UNISTD_H #define SC_BOOST_HAS_BETHREADS #ifndef SC_BOOST_DISABLE_THREADS # define SC_BOOST_HAS_THREADS #endif // boilerplate code: #include systemc-2.3.4/src/sysc/packages/boost/config/platform/linux.hpp0000644000175000017500000000472114342422106024506 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // linux specific config options: #define SC_BOOST_PLATFORM "linux" // make sure we have __GLIBC_PREREQ if available at all #include // // added to glibc 2.1.1 // We can only test for 2.1 though: // #if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) // defines int64_t unconditionally, but defines // int64_t only if __GNUC__. Thus, assume a fully usable // only when using GCC. # if defined __GNUC__ # define SC_BOOST_HAS_STDINT_H # endif #endif #if defined(__LIBCOMO__) // // como on linux doesn't have std:: c functions: // NOTE: versions of libcomo prior to beta28 have octal version numbering, // e.g. version 25 is 21 (dec) // # if __LIBCOMO_VERSION__ <= 20 # define SC_BOOST_NO_STDC_NAMESPACE # endif # if __LIBCOMO_VERSION__ <= 21 # define SC_BOOST_NO_SWPRINTF # endif #endif // // If glibc is past version 2 then we definitely have // gettimeofday, earlier versions may or may not have it: // #if defined(__GLIBC__) && (__GLIBC__ >= 2) # define SC_BOOST_HAS_GETTIMEOFDAY #endif #ifdef __USE_POSIX199309 # define SC_BOOST_HAS_NANOSLEEP #endif #if defined(__GLIBC__) && defined(__GLIBC_PREREQ) // __GLIBC_PREREQ is available since 2.1.2 // swprintf is available since glibc 2.2.0 # if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98)) # define SC_BOOST_NO_SWPRINTF # endif #else # define SC_BOOST_NO_SWPRINTF #endif // boilerplate code: #define SC_BOOST_HAS_UNISTD_H #include #ifndef __GNUC__ // // if the compiler is not gcc we still need to be able to parse // the GNU system headers, some of which (mainly ) // use GNU specific extensions: // # ifndef __extension__ # define __extension__ # endif # ifndef __const__ # define __const__ const # endif # ifndef __volatile__ # define __volatile__ volatile # endif # ifndef __signed__ # define __signed__ signed # endif # ifndef __typeof__ # define __typeof__ typeof # endif # ifndef __inline__ # define __inline__ inline # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/platform/cygwin.hpp0000644000175000017500000000242014342422106024641 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // cygwin specific config options: #define SC_BOOST_PLATFORM "Cygwin" #define SC_BOOST_NO_CWCTYPE #define SC_BOOST_NO_CWCHAR #define SC_BOOST_NO_SWPRINTF #define SC_BOOST_HAS_DIRENT_H // // Threading API: // See if we have POSIX threads, if we do use them, otherwise // revert to native Win threads. #define SC_BOOST_HAS_UNISTD_H #include #if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(SC_BOOST_HAS_WINTHREADS) # define SC_BOOST_HAS_PTHREADS # define SC_BOOST_HAS_SCHED_YIELD # define SC_BOOST_HAS_GETTIMEOFDAY # define SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE # define SC_BOOST_HAS_SIGACTION #else # if !defined(SC_BOOST_HAS_WINTHREADS) # define SC_BOOST_HAS_WINTHREADS # endif # define SC_BOOST_HAS_FTIME #endif // // find out if we have a stdint.h, there should be a better way to do this: // #include #ifdef _STDINT_H #define SC_BOOST_HAS_STDINT_H #endif // boilerplate code: #include systemc-2.3.4/src/sysc/packages/boost/config/platform/macos.hpp0000644000175000017500000000436514342422106024455 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001 - 2002. // (C) Copyright Bill Kempf 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Mac OS specific config options: #define SC_BOOST_PLATFORM "Mac OS" #if __MACH__ && !defined(_MSL_USING_MSL_C) // Using the Mac OS X system BSD-style C library. # ifndef SC_BOOST_HAS_UNISTD_H # define SC_BOOST_HAS_UNISTD_H # endif // // Begin by including our boilerplate code for POSIX // feature detection, this is safe even when using // the MSL as Metrowerks supply their own // to replace the platform-native BSD one. G++ users // should also always be able to do this on MaxOS X. // # include # ifndef SC_BOOST_HAS_STDINT_H # define SC_BOOST_HAS_STDINT_H # endif // // BSD runtime has pthreads, sigaction, sched_yield and gettimeofday, // of these only pthreads are advertised in , so set the // other options explicitly: // # define SC_BOOST_HAS_SCHED_YIELD # define SC_BOOST_HAS_GETTIMEOFDAY # define SC_BOOST_HAS_SIGACTION # if (__GNUC__ < 3) && !defined( __APPLE_CC__) // GCC strange "ignore std" mode works better if you pretend everything // is in the std namespace, for the most part. # define SC_BOOST_NO_STDC_NAMESPACE # endif #else // Using the MSL C library. // We will eventually support threads in non-Carbon builds, but we do // not support this yet. # if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON ) # if !defined(SC_BOOST_HAS_PTHREADS) # define SC_BOOST_HAS_MPTASKS # elif ( __dest_os == __mac_os_x ) // We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the // gettimeofday and no posix. # define SC_BOOST_HAS_GETTIMEOFDAY # endif // The MP task implementation of Boost Threads aims to replace MP-unsafe // parts of the MSL, so we turn on threads unconditionally. # define SC_BOOST_HAS_THREADS // The remote call manager depends on this. # define SC_BOOST_BIND_ENABLE_PASCAL # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/platform/aix.hpp0000644000175000017500000000165314342422106024131 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // IBM/Aix specific config options: #define SC_BOOST_PLATFORM "IBM Aix" #define SC_BOOST_HAS_UNISTD_H #define SC_BOOST_HAS_NL_TYPES_H #define SC_BOOST_HAS_NANOSLEEP #define SC_BOOST_HAS_CLOCK_GETTIME // This needs support in "sysc/packages/boost/cstdint.hpp" exactly like FreeBSD. // This platform has header named which includes all // the things needed. #define SC_BOOST_HAS_STDINT_H // Threading API's: #define SC_BOOST_HAS_PTHREADS #define SC_BOOST_HAS_PTHREAD_DELAY_NP #define SC_BOOST_HAS_SCHED_YIELD //#define SC_BOOST_HAS_PTHREAD_YIELD // boilerplate code: #include systemc-2.3.4/src/sysc/packages/boost/config/platform/bsd.hpp0000644000175000017500000000367314342422106024124 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001. // (C) Copyright Douglas Gregor 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // generic BSD config options: #if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) #error "This platform is not BSD" #endif #ifdef __FreeBSD__ #define SC_BOOST_PLATFORM "FreeBSD " SC_BOOST_STRINGIZE(__FreeBSD__) #elif defined(__NetBSD__) #define SC_BOOST_PLATFORM "NetBSD " SC_BOOST_STRINGIZE(__NetBSD__) #elif defined(__OpenBSD__) #define SC_BOOST_PLATFORM "OpenBSD " SC_BOOST_STRINGIZE(__OpenBSD__) #elif defined(__DragonFly__) #define SC_BOOST_PLATFORM "DragonFly " SC_BOOST_STRINGIZE(__DragonFly__) #endif // // is this the correct version check? // FreeBSD has but does not // advertise the fact in : // #if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) # define SC_BOOST_HAS_NL_TYPES_H #endif // // FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in // and not in // #if defined(__FreeBSD__) && (__FreeBSD__ <= 3) # define SC_BOOST_HAS_PTHREADS #endif // // No wide character support in the BSD header files: // #if !(defined(__FreeBSD__) && (__FreeBSD__ >= 5)) # define SC_BOOST_NO_CWCHAR #endif // // The BSD has macros only, no functions: // #if !defined(__OpenBSD__) # define SC_BOOST_NO_CTYPE_FUNCTIONS #endif // // thread API's not auto detected: // #define SC_BOOST_HAS_SCHED_YIELD #define SC_BOOST_HAS_NANOSLEEP #define SC_BOOST_HAS_GETTIMEOFDAY #define SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE #define SC_BOOST_HAS_SIGACTION // boilerplate code: #define SC_BOOST_HAS_UNISTD_H #include systemc-2.3.4/src/sysc/packages/boost/config/platform/amigaos.hpp0000644000175000017500000000071114342422106024762 0ustar carstencarsten// (C) Copyright John Maddock 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. #define SC_BOOST_PLATFORM "AmigaOS" #define SC_BOOST_DISABLE_THREADS #define SC_BOOST_NO_CWCHAR #define SC_BOOST_NO_STD_WSTRING #define SC_BOOST_NO_INTRINSIC_WCHAR_T systemc-2.3.4/src/sysc/packages/boost/config/platform/irix.hpp0000644000175000017500000000146514342422106024324 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // SGI Irix specific config options: #define SC_BOOST_PLATFORM "SGI Irix" #define SC_BOOST_NO_SWPRINTF // // these are not auto detected by POSIX feature tests: // #define SC_BOOST_HAS_GETTIMEOFDAY #define SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE #ifdef __GNUC__ // GNU C on IRIX does not support threads (checked up to gcc 3.3) # define SC_BOOST_DISABLE_THREADS #endif // boilerplate code: #define SC_BOOST_HAS_UNISTD_H #include systemc-2.3.4/src/sysc/packages/boost/config/platform/win32.hpp0000644000175000017500000000332214342422106024305 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Bill Kempf 2001. // (C) Copyright Aleksey Gurtovoy 2003. // (C) Copyright Rene Rivera 2005. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Win32 specific config options: #define SC_BOOST_PLATFORM "Win32" // Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION. #if defined(__MINGW32__) # include <_mingw.h> #endif #if defined(__GNUC__) && !defined(SC_BOOST_NO_SWPRINTF) # define SC_BOOST_NO_SWPRINTF #endif #if !defined(__GNUC__) && !defined(SC_BOOST_HAS_DECLSPEC) # define SC_BOOST_HAS_DECLSPEC #endif #if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0))) # define SC_BOOST_HAS_STDINT_H # if !defined(__STDC_LIMIT_MACROS) # define __STDC_LIMIT_MACROS # endif # define SC_BOOST_HAS_DIRENT_H # define SC_BOOST_HAS_UNISTD_H #endif // // Win32 will normally be using native Win32 threads, // but there is a pthread library avaliable as an option, // we used to disable this when SC_BOOST_DISABLE_WIN32 was // defined but no longer - this should allow some // files to be compiled in strict mode - while maintaining // a consistent setting of SC_BOOST_HAS_THREADS across // all translation units (needed for shared_ptr etc). // #ifdef _WIN32_WCE # define SC_BOOST_NO_ANSI_APIS #endif #ifndef SC_BOOST_HAS_PTHREADS # define SC_BOOST_HAS_WINTHREADS #endif #ifndef SC_BOOST_DISABLE_WIN32 // WEK: Added #define SC_BOOST_HAS_FTIME #define SC_BOOST_WINDOWS 1 #endif systemc-2.3.4/src/sysc/packages/boost/config/posix_features.hpp0000644000175000017500000000676414342422106024574 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // All POSIX feature tests go in this file, // Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well // _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's // may be present but none-functional unless _POSIX_C_SOURCE and // _XOPEN_SOURCE have been defined to the right value (it's up // to the user to do this *before* including any header, although // in most cases the compiler will do this for you). # if defined(SC_BOOST_HAS_UNISTD_H) # include // XOpen has , but is this the correct version check? # if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3) # define SC_BOOST_HAS_NL_TYPES_H # endif // POSIX version 6 requires # if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) # define SC_BOOST_HAS_STDINT_H # endif // POSIX version 2 requires # if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) # define SC_BOOST_HAS_DIRENT_H # endif // POSIX version 3 requires to have sigaction: # if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L) # define SC_BOOST_HAS_SIGACTION # endif // POSIX defines _POSIX_THREADS > 0 for pthread support, // however some platforms define _POSIX_THREADS without // a value, hence the (_POSIX_THREADS+0 >= 0) check. // Strictly speaking this may catch platforms with a // non-functioning stub , but such occurrences should // occur very rarely if at all. # if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(SC_BOOST_HAS_WINTHREADS) && !defined(SC_BOOST_HAS_MPTASKS) # define SC_BOOST_HAS_PTHREADS # endif // SC_BOOST_HAS_NANOSLEEP: // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME: # if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \ || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) # define SC_BOOST_HAS_NANOSLEEP # endif // SC_BOOST_HAS_CLOCK_GETTIME: // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME // but at least one platform - linux - defines that flag without // defining clock_gettime): # if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) # define SC_BOOST_HAS_CLOCK_GETTIME # endif // SC_BOOST_HAS_SCHED_YIELD: // This is predicated on _POSIX_PRIORITY_SCHEDULING or // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME. # if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\ || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\ || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) # define SC_BOOST_HAS_SCHED_YIELD # endif // SC_BOOST_HAS_GETTIMEOFDAY: // SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE: // These are predicated on _XOPEN_VERSION, and appears to be first released // in issue 4, version 2 (_XOPEN_VERSION > 500). # if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500) # define SC_BOOST_HAS_GETTIMEOFDAY # if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500) # define SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE # endif # endif # endif systemc-2.3.4/src/sysc/packages/boost/config/suffix.hpp0000644000175000017500000004352514342422106023034 0ustar carstencarsten// Boost config.hpp configuration header file ------------------------------// // (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright Bill Kempf 2002. // (C) Copyright Jens Maurer 2002. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Gennaro Prota 2003. // (C) Copyright Eric Friedman 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Boost config.hpp policy and rationale documentation has been moved to // http://www.boost.org/libs/config // // This file is intended to be stable, and relatively unchanging. // It should contain boilerplate code only - no compiler specific // code unless it is unavoidable - no changes unless unavoidable. #ifndef SC_BOOST_CONFIG_SUFFIX_HPP #define SC_BOOST_CONFIG_SUFFIX_HPP // // look for long long by looking for the appropriate macros in . // Note that we use limits.h rather than climits for maximal portability, // remember that since these just declare a bunch of macros, there should be // no namespace issues from this. // #include # if !defined(SC_BOOST_HAS_LONG_LONG) \ && !defined(SC_BOOST_MSVC) && !defined(__BORLANDC__) \ && (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) # define SC_BOOST_HAS_LONG_LONG #endif // TODO: Remove the following lines after the 1.33 release because the presence // of an integral 64 bit type has nothing to do with support for long long. #if !defined(SC_BOOST_HAS_LONG_LONG) && !defined(SC_BOOST_NO_INTEGRAL_INT64_T) && !defined(__DECCXX_VER) # define SC_BOOST_NO_INTEGRAL_INT64_T #endif // GCC 3.x will clean up all of those nasty macro definitions that // SC_BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine // it under GCC 3.x. #if defined(__GNUC__) && (__GNUC__ >= 3) && defined(SC_BOOST_NO_CTYPE_FUNCTIONS) # undef SC_BOOST_NO_CTYPE_FUNCTIONS #endif // // Assume any extensions are in namespace std:: unless stated otherwise: // # ifndef SC_BOOST_STD_EXTENSION_NAMESPACE # define SC_BOOST_STD_EXTENSION_NAMESPACE std # endif // // If cv-qualified specializations are not allowed, then neither are cv-void ones: // # if defined(SC_BOOST_NO_CV_SPECIALIZATIONS) \ && !defined(SC_BOOST_NO_CV_VOID_SPECIALIZATIONS) # define SC_BOOST_NO_CV_VOID_SPECIALIZATIONS # endif // // If there is no numeric_limits template, then it can't have any compile time // constants either! // # if defined(SC_BOOST_NO_LIMITS) \ && !defined(SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # define SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS # define SC_BOOST_NO_LONG_LONG_NUMERIC_LIMITS # endif // // if there is no long long then there is no specialisation // for numeric_limits either: // #if !defined(SC_BOOST_HAS_LONG_LONG) && !defined(SC_BOOST_NO_LONG_LONG_NUMERIC_LIMITS) # define SC_BOOST_NO_LONG_LONG_NUMERIC_LIMITS #endif // // if there is no __int64 then there is no specialisation // for numeric_limits<__int64> either: // #if !defined(SC_BOOST_HAS_MS_INT64) && !defined(SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS) # define SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS #endif // // if member templates are supported then so is the // VC6 subset of member templates: // # if !defined(SC_BOOST_NO_MEMBER_TEMPLATES) \ && !defined(SC_BOOST_MSVC6_MEMBER_TEMPLATES) # define SC_BOOST_MSVC6_MEMBER_TEMPLATES # endif // // Without partial specialization, can't test for partial specialisation bugs: // # if defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ && !defined(SC_BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) # define SC_BOOST_BCB_PARTIAL_SPECIALIZATION_BUG # endif // // Without partial specialization, we can't have array-type partial specialisations: // # if defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ && !defined(SC_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) # define SC_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS # endif // // Without partial specialization, std::iterator_traits can't work: // # if defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ && !defined(SC_BOOST_NO_STD_ITERATOR_TRAITS) # define SC_BOOST_NO_STD_ITERATOR_TRAITS # endif // // Without member template support, we can't have template constructors // in the standard library either: // # if defined(SC_BOOST_NO_MEMBER_TEMPLATES) \ && !defined(SC_BOOST_MSVC6_MEMBER_TEMPLATES) \ && !defined(SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) # define SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS # endif // // Without member template support, we can't have a conforming // std::allocator template either: // # if defined(SC_BOOST_NO_MEMBER_TEMPLATES) \ && !defined(SC_BOOST_MSVC6_MEMBER_TEMPLATES) \ && !defined(SC_BOOST_NO_STD_ALLOCATOR) # define SC_BOOST_NO_STD_ALLOCATOR # endif // // without ADL support then using declarations will break ADL as well: // #if defined(SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) # define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #endif // // If we have a standard allocator, then we have a partial one as well: // #if !defined(SC_BOOST_NO_STD_ALLOCATOR) # define SC_BOOST_HAS_PARTIAL_STD_ALLOCATOR #endif // // We can't have a working std::use_facet if there is no std::locale: // # if defined(SC_BOOST_NO_STD_LOCALE) && !defined(SC_BOOST_NO_STD_USE_FACET) # define SC_BOOST_NO_STD_USE_FACET # endif // // We can't have a std::messages facet if there is no std::locale: // # if defined(SC_BOOST_NO_STD_LOCALE) && !defined(SC_BOOST_NO_STD_MESSAGES) # define SC_BOOST_NO_STD_MESSAGES # endif // // We can't have a working std::wstreambuf if there is no std::locale: // # if defined(SC_BOOST_NO_STD_LOCALE) && !defined(SC_BOOST_NO_STD_WSTREAMBUF) # define SC_BOOST_NO_STD_WSTREAMBUF # endif // // We can't have a if there is no : // # if defined(SC_BOOST_NO_CWCHAR) && !defined(SC_BOOST_NO_CWCTYPE) # define SC_BOOST_NO_CWCTYPE # endif // // We can't have a swprintf if there is no : // # if defined(SC_BOOST_NO_CWCHAR) && !defined(SC_BOOST_NO_SWPRINTF) # define SC_BOOST_NO_SWPRINTF # endif // // If Win32 support is turned off, then we must turn off // threading support also, unless there is some other // thread API enabled: // #if defined(SC_BOOST_DISABLE_WIN32) && defined(_WIN32) \ && !defined(SC_BOOST_DISABLE_THREADS) && !defined(SC_BOOST_HAS_PTHREADS) # define SC_BOOST_DISABLE_THREADS #endif // // Turn on threading support if the compiler thinks that it's in // multithreaded mode. We put this here because there are only a // limited number of macros that identify this (if there's any missing // from here then add to the appropriate compiler section): // #if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ || defined(_PTHREADS)) && !defined(SC_BOOST_HAS_THREADS) # define SC_BOOST_HAS_THREADS #endif // // Turn threading support off if SC_BOOST_DISABLE_THREADS is defined: // #if defined(SC_BOOST_DISABLE_THREADS) && defined(SC_BOOST_HAS_THREADS) # undef SC_BOOST_HAS_THREADS #endif // // Turn threading support off if we don't recognise the threading API: // #if defined(SC_BOOST_HAS_THREADS) && !defined(SC_BOOST_HAS_PTHREADS)\ && !defined(SC_BOOST_HAS_WINTHREADS) && !defined(SC_BOOST_HAS_BETHREADS)\ && !defined(SC_BOOST_HAS_MPTASKS) # undef SC_BOOST_HAS_THREADS #endif // // Turn threading detail macros off if we don't (want to) use threading // #ifndef SC_BOOST_HAS_THREADS # undef SC_BOOST_HAS_PTHREADS # undef SC_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE # undef SC_BOOST_HAS_WINTHREADS # undef SC_BOOST_HAS_BETHREADS # undef SC_BOOST_HAS_MPTASKS #endif // // If the compiler claims to be C99 conformant, then it had better // have a : // # if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) # define SC_BOOST_HAS_STDINT_H # endif // // Define SC_BOOST_NO_SLIST and SC_BOOST_NO_HASH if required. // Note that this is for backwards compatibility only. // # ifndef SC_BOOST_HAS_SLIST # define SC_BOOST_NO_SLIST # endif # ifndef SC_BOOST_HAS_HASH # define SC_BOOST_NO_HASH # endif // SC_BOOST_HAS_ABI_HEADERS // This macro gets set if we have headers that fix the ABI, // and prevent ODR violations when linking to external libraries: #if defined(SC_BOOST_ABI_PREFIX) && defined(SC_BOOST_ABI_SUFFIX) && !defined(SC_BOOST_HAS_ABI_HEADERS) # define SC_BOOST_HAS_ABI_HEADERS #endif #if defined(SC_BOOST_HAS_ABI_HEADERS) && defined(SC_BOOST_DISABLE_ABI_HEADERS) # undef SC_BOOST_HAS_ABI_HEADERS #endif // SC_BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// // Because std::size_t usage is so common, even in boost headers which do not // otherwise use the C library, the workaround is included here so // that ugly workaround code need not appear in many other boost headers. // NOTE WELL: This is a workaround for non-conforming compilers; // must still be #included in the usual places so that inclusion // works as expected with standard conforming compilers. The resulting // double inclusion of is harmless. # ifdef SC_BOOST_NO_STDC_NAMESPACE # include namespace std { using ::ptrdiff_t; using ::size_t; } # endif // Workaround for the unfortunate min/max macros defined by some platform headers #define SC_BOOST_PREVENT_MACRO_SUBSTITUTION #ifndef SC_BOOST_USING_STD_MIN # define SC_BOOST_USING_STD_MIN() using std::min #endif #ifndef SC_BOOST_USING_STD_MAX # define SC_BOOST_USING_STD_MAX() using std::max #endif // SC_BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// # ifdef SC_BOOST_NO_STD_MIN_MAX namespace std { template inline const _Tp& min SC_BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { return __b < __a ? __b : __a; } template inline const _Tp& max SC_BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { return __a < __b ? __b : __a; } } # endif // SC_BOOST_STATIC_CONSTANT workaround --------------------------------------- // // On compilers which don't allow in-class initialization of static integral // constant members, we must use enums as a workaround if we want the constants // to be available at compile-time. This macro gives us a convenient way to // declare such constants. # ifdef SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION # define SC_BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } # else # define SC_BOOST_STATIC_CONSTANT(type, assignment) static const type assignment # endif // SC_BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// // When the standard library does not have a conforming std::use_facet there // are various workarounds available, but they differ from library to library. // The same problem occurs with has_facet. // These macros provide a consistent way to access a locale's facets. // Usage: // replace // std::use_facet(loc); // with // SC_BOOST_USE_FACET(Type, loc); // Note do not add a std:: prefix to the front of SC_BOOST_USE_FACET! // Use for SC_BOOST_HAS_FACET is analagous. #if defined(SC_BOOST_NO_STD_USE_FACET) # ifdef SC_BOOST_HAS_TWO_ARG_USE_FACET # define SC_BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast(0)) # define SC_BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(0)) # elif defined(SC_BOOST_HAS_MACRO_USE_FACET) # define SC_BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) # define SC_BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) # elif defined(SC_BOOST_HAS_STLP_USE_FACET) # define SC_BOOST_USE_FACET(Type, loc) (*std::_Use_facet(loc)) # define SC_BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) # endif #else # define SC_BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) # define SC_BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) #endif // SC_BOOST_NESTED_TEMPLATE workaround ------------------------------------------// // Member templates are supported by some compilers even though they can't use // the A::template member syntax, as a workaround replace: // // typedef typename A::template rebind binder; // // with: // // typedef typename A::SC_BOOST_NESTED_TEMPLATE rebind binder; #ifndef SC_BOOST_NO_MEMBER_TEMPLATE_KEYWORD # define SC_BOOST_NESTED_TEMPLATE template #else # define SC_BOOST_NESTED_TEMPLATE #endif // SC_BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// // Normally evaluates to nothing, unless SC_BOOST_NO_UNREACHABLE_RETURN_DETECTION // is defined, in which case it evaluates to return x; Use when you have a return // statement that can never be reached. #ifdef SC_BOOST_NO_UNREACHABLE_RETURN_DETECTION # define SC_BOOST_UNREACHABLE_RETURN(x) return x; #else # define SC_BOOST_UNREACHABLE_RETURN(x) #endif // SC_BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// // // Some compilers don't support the use of `typename' for dependent // types in deduced contexts, e.g. // // template void f(T, typename T::type); // ^^^^^^^^ // Replace these declarations with: // // template void f(T, SC_BOOST_DEDUCED_TYPENAME T::type); #ifndef SC_BOOST_NO_DEDUCED_TYPENAME # define SC_BOOST_DEDUCED_TYPENAME typename #else # define SC_BOOST_DEDUCED_TYPENAME #endif // long long workaround ------------------------------------------// // On gcc (and maybe other compilers?) long long is alway supported // but it's use may generate either warnings (with -ansi), or errors // (with -pedantic -ansi) unless it's use is prefixed by __extension__ // #if defined(SC_BOOST_HAS_LONG_LONG) namespace sc_boost{ # ifdef __GNUC__ __extension__ typedef long long long_long_type; __extension__ typedef unsigned long long ulong_long_type; # else typedef long long long_long_type; typedef unsigned long long ulong_long_type; # endif } #endif // SC_BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// // // Some compilers have problems with function templates whose // template parameters don't appear in the function parameter // list (basically they just link one instantiation of the // template in the final executable). These macros provide a // uniform way to cope with the problem with no effects on the // calling syntax. // Example: // // #include // #include // #include // // template // void f() { std::cout << n << ' '; } // // template // void g() { std::cout << typeid(T).name() << ' '; } // // int main() { // f<1>(); // f<2>(); // // g(); // g(); // } // // With VC++ 6.0 the output is: // // 2 2 double double // // To fix it, write // // template // void f(SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } // // template // void g(SC_BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } // #if defined SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS # include "sysc/packages/boost/type.hpp" # include "sysc/packages/boost/non_type.hpp" # define SC_BOOST_EXPLICIT_TEMPLATE_TYPE(t) sc_boost::type* = 0 # define SC_BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) sc_boost::type* # define SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) sc_boost::non_type* = 0 # define SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) sc_boost::non_type* # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ , SC_BOOST_EXPLICIT_TEMPLATE_TYPE(t) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ , SC_BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ , SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ , SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) #else // no workaround needed: expand to nothing # define SC_BOOST_EXPLICIT_TEMPLATE_TYPE(t) # define SC_BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) # define SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) # define SC_BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) # define SC_BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) #endif // defined SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS // ---------------------------------------------------------------------------// // // Helper macro SC_BOOST_STRINGIZE: // Converts the parameter X to a string after macro replacement // on X has been performed. // #define SC_BOOST_STRINGIZE(X) SC_BOOST_DO_STRINGIZE(X) #define SC_BOOST_DO_STRINGIZE(X) #X // // Helper macro SC_BOOST_JOIN: // The following piece of macro magic joins the two // arguments together, even when one of the arguments is // itself a macro (see 16.3.1 in C++ standard). The key // is that macro expansion of macro arguments does not // occur in SC_BOOST_DO_JOIN2 but does in SC_BOOST_DO_JOIN. // #define SC_BOOST_JOIN( X, Y ) SC_BOOST_DO_JOIN( X, Y ) #define SC_BOOST_DO_JOIN( X, Y ) SC_BOOST_DO_JOIN2(X,Y) #define SC_BOOST_DO_JOIN2( X, Y ) X##Y // // Set some default values for compiler/library/platform names. // These are for debugging config setup only: // # ifndef SC_BOOST_COMPILER # define SC_BOOST_COMPILER "Unknown ISO C++ Compiler" # endif # ifndef SC_BOOST_STDLIB # define SC_BOOST_STDLIB "Unknown ISO standard library" # endif # ifndef SC_BOOST_PLATFORM # if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ || defined(_POSIX_SOURCE) # define SC_BOOST_PLATFORM "Generic Unix" # else # define SC_BOOST_PLATFORM "Unknown" # endif # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/select_stdlib_config.hpp0000644000175000017500000000476114342422106025674 0ustar carstencarsten// Boost compiler configuration selection header file // (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001 - 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // locate which std lib we are using and define SC_BOOST_STDLIB_CONFIG as needed: // we need to include a std lib header here in order to detect which // library is in use, use as it's about the smallest // of the std lib headers - do not rely on this header being included - // users can short-circuit this header if they know whose std lib // they are using. #include #if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) // STLPort library; this _must_ come first, otherwise since // STLport typically sits on top of some other library, we // can end up detecting that first rather than STLport: # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/stlport.hpp" #elif defined(__LIBCOMO__) // Comeau STL: #define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/libcomo.hpp" #elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) // Rogue Wave library: # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/roguewave.hpp" #elif defined(__GLIBCPP__) || defined(__GLIBCXX__) // GNU libstdc++ 3 # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/libstdcpp3.hpp" #elif defined(__STL_CONFIG_H) // generic SGI STL # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/sgi.hpp" #elif defined(__MSL_CPP__) // MSL standard lib: # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/msl.hpp" #elif defined(__IBMCPP__) // take the default VACPP std lib # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/vacpp.hpp" #elif defined(MSIPL_COMPILE_H) // Modena C++ standard library # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/modena.hpp" #elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) // Dinkumware Library (this has to appear after any possible replacement libraries): # define SC_BOOST_STDLIB_CONFIG "sysc/packages/boost/config/stdlib/dinkumware.hpp" #elif defined (SC_BOOST_ASSERT_CONFIG) // this must come last - generate an error if we don't // recognise the library: # error "Unknown standard library - please configure and report the results to boost.org" #endif systemc-2.3.4/src/sysc/packages/boost/config/user.hpp0000644000175000017500000001217414342422106022502 0ustar carstencarsten// boost/config/user.hpp ---------------------------------------------------// // (C) Copyright John Maddock 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // Do not check in modified versions of this file, // This file may be customized by the end user, but not by boost. // // Use this file to define a site and compiler specific // configuration policy: // // define this to locate a compiler config file: // #define SC_BOOST_COMPILER_CONFIG // define this to locate a stdlib config file: // #define SC_BOOST_STDLIB_CONFIG // define this to locate a platform config file: // #define SC_BOOST_PLATFORM_CONFIG // define this to disable compiler config, // use if your compiler config has nothing to set: // #define SC_BOOST_NO_COMPILER_CONFIG // define this to disable stdlib config, // use if your stdlib config has nothing to set: // #define SC_BOOST_NO_STDLIB_CONFIG // define this to disable platform config, // use if your platform config has nothing to set: // #define SC_BOOST_NO_PLATFORM_CONFIG // define this to disable all config options, // excluding the user config. Use if your // setup is fully ISO compliant, and has no // useful extensions, or for autoconf generated // setups: // #define SC_BOOST_NO_CONFIG // define this to make the config "optimistic" // about unknown compiler versions. Normally // unknown compiler versions are assumed to have // all the defects of the last known version, however // setting this flag, causes the config to assume // that unknown compiler versions are fully conformant // with the standard: // #define SC_BOOST_STRICT_CONFIG // define this to cause the config to halt compilation // with an #error if it encounters anything unknown -- // either an unknown compiler version or an unknown // compiler/platform/library: // #define SC_BOOST_ASSERT_CONFIG // define if you want to disable threading support, even // when available: // #define SC_BOOST_DISABLE_THREADS // define when you want to disable Win32 specific features // even when available: // #define SC_BOOST_DISABLE_WIN32 // SC_BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any // prefix/suffix headers that normally control things like struct // packing and alignment. // #define SC_BOOST_DISABLE_ABI_HEADERS // SC_BOOST_ABI_PREFIX: A prefix header to include in place of whatever // boost.config would normally select, any replacement should set up // struct packing and alignment options as required. // #define SC_BOOST_ABI_PREFIX my-header-name // SC_BOOST_ABI_SUFFIX: A suffix header to include in place of whatever // boost.config would normally select, any replacement should undo // the effects of the prefix header. // #define SC_BOOST_ABI_SUFFIX my-header-name // SC_BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, // to be linked as dll's rather than static libraries on Microsoft Windows // (this macro is used to turn on __declspec(dllimport) modifiers, so that // the compiler knows which symbols to look for in a dll rather than in a // static library). Note that there may be some libraries that can only // be statically linked (Boost.Test for example) and others which may only // be dynamically linked (Boost.Threads for example), in these cases this // macro has no effect. // #define SC_BOOST_ALL_DYN_LINK // SC_BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll // rather than a static library on Microsoft Windows: replace the WHATEVER // part of the macro name with the name of the library that you want to // dynamically link to, for example use SC_BOOST_DATE_TIME_DYN_LINK or // SC_BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) // modifiers, so that the compiler knows which symbols to look for in a dll // rather than in a static library). // Note that there may be some libraries that can only be statically linked // (Boost.Test for example) and others which may only be dynamically linked // (Boost.Threads for example), in these cases this macro is unsupported. // #define SC_BOOST_WHATEVER_DYN_LINK // SC_BOOST_ALL_NO_LIB: Tells the config system not to automatically select // which libraries to link against. // Normally if a compiler supports #pragma lib, then the correct library // build variant will be automatically selected and linked against, // simply by the act of including one of that library's headers. // This macro turns that feature off. // #define SC_BOOST_ALL_NO_LIB // SC_BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically // select which library to link against for library "whatever", // replace WHATEVER in the macro name with the name of the library; // for example SC_BOOST_DATE_TIME_NO_LIB or SC_BOOST_REGEX_NO_LIB. // Normally if a compiler supports #pragma lib, then the correct library // build variant will be automatically selected and linked against, simply // by the act of including one of that library's headers. This macro turns // that feature off. // #define SC_BOOST_WHATEVER_NO_LIB systemc-2.3.4/src/sysc/packages/boost/config/stdlib/0000755000175000017500000000000014342422106022267 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/config/stdlib/modena.hpp0000644000175000017500000000124514342422106024245 0ustar carstencarsten// (C) Copyright Jens Maurer 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Modena C++ standard library (comes with KAI C++) #if !defined(MSIPL_COMPILE_H) # include # if !defined(__MSIPL_COMPILE_H) # error "This is not the Modena C++ library!" # endif #endif #ifndef MSIPL_NL_TYPES #define SC_BOOST_NO_STD_MESSAGES #endif #ifndef MSIPL_WCHART #define SC_BOOST_NO_STD_WSTRING #endif #define SC_BOOST_STDLIB "Modena C++ standard library" systemc-2.3.4/src/sysc/packages/boost/config/stdlib/sgi.hpp0000644000175000017500000000616114342422106023566 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001. // (C) Copyright Jens Maurer 2001 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // generic SGI STL: #if !defined(__STL_CONFIG_H) # include # if !defined(__STL_CONFIG_H) # error "This is not the SGI STL!" # endif #endif // // No std::iterator traits without partial specialisation: // #if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) # define SC_BOOST_NO_STD_ITERATOR_TRAITS #endif // // No std::stringstream with gcc < 3 // #if defined(__GNUC__) && (__GNUC__ < 3) && \ ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \ !defined(__STL_USE_NEW_IOSTREAMS) || \ defined(__APPLE_CC__) // Note that we only set this for GNU C++ prior to 2.95 since the // latest patches for that release do contain a minimal // If you are running a 2.95 release prior to 2.95.3 then this will need // setting, but there is no way to detect that automatically (other // than by running the configure script). // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't // have . # define SC_BOOST_NO_STRINGSTREAM #endif // // Assume no std::locale without own iostreams (this may be an // incorrect assumption in some cases): // #if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS) # define SC_BOOST_NO_STD_LOCALE #endif // // Original native SGI streams have non-standard std::messages facet: // #if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS) # define SC_BOOST_NO_STD_LOCALE #endif // // SGI's new iostreams have missing "const" in messages<>::open // #if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS) # define SC_BOOST_NO_STD_MESSAGES #endif // // No template iterator constructors, or std::allocator // without member templates: // #if !defined(__STL_MEMBER_TEMPLATES) # define SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS # define SC_BOOST_NO_STD_ALLOCATOR #endif // // We always have SGI style hash_set, hash_map, and slist: // #define SC_BOOST_HAS_HASH #define SC_BOOST_HAS_SLIST // // If this is GNU libstdc++2, then no and no std::wstring: // #if (defined(__GNUC__) && (__GNUC__ < 3)) # include # if defined(__BASTRING__) # define SC_BOOST_NO_LIMITS // Note: will provide compile-time constants # undef SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # define SC_BOOST_NO_STD_WSTRING # endif #endif // // There is no standard iterator unless we have namespace support: // #if !defined(__STL_USE_NAMESPACES) # define SC_BOOST_NO_STD_ITERATOR #endif // // Intrinsic type_traits support. // The SGI STL has it's own __type_traits class, which // has intrinsic compiler support with SGI's compilers. // Whatever map SGI style type traits to boost equivalents: // #define SC_BOOST_HAS_SGI_TYPE_TRAITS #define SC_BOOST_STDLIB "SGI standard library" systemc-2.3.4/src/sysc/packages/boost/config/stdlib/stlport.hpp0000644000175000017500000001473014342422106024514 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // (C) Copyright Darin Adler 2001. // (C) Copyright Jens Maurer 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // STLPort standard library config: #if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) # include # if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) # error "This is not STLPort!" # endif #endif // // __STL_STATIC_CONST_INIT_BUG implies SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS // for versions prior to 4.1(beta) // #if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400) # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS #endif // // If STLport thinks that there is no partial specialisation, then there is no // std::iterator traits: // #if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION)) # define SC_BOOST_NO_STD_ITERATOR_TRAITS #endif // // No new style iostreams on GCC without STLport's iostreams enabled: // #if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS)) # define SC_BOOST_NO_STRINGSTREAM #endif // // No new iostreams implies no std::locale, and no std::stringstream: // #if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS) # define SC_BOOST_NO_STD_LOCALE # define SC_BOOST_NO_STRINGSTREAM #endif // // If the streams are not native, and we have a "using ::x" compiler bug // then the io stream facets are not available in namespace std:: // #ifdef _STLPORT_VERSION # if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(SC_BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) # define SC_BOOST_NO_STD_LOCALE # endif #else # if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(SC_BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) # define SC_BOOST_NO_STD_LOCALE # endif #endif // // Without member template support enabled, their are no template // iterate constructors, and no std::allocator: // #if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES)) # define SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS # define SC_BOOST_NO_STD_ALLOCATOR #endif // // however we always have at least a partial allocator: // #define SC_BOOST_HAS_PARTIAL_STD_ALLOCATOR #if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) # define SC_BOOST_NO_STD_ALLOCATOR #endif #if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(SC_BOOST_MSVC) && (SC_BOOST_MSVC <= 1300) # define SC_BOOST_NO_STD_ALLOCATOR #endif // // If STLport thinks there is no wchar_t at all, then we have to disable // the support for the relevant specilazations of std:: templates. // #if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT) # ifndef SC_BOOST_NO_STD_WSTRING # define SC_BOOST_NO_STD_WSTRING # endif # ifndef SC_BOOST_NO_STD_WSTREAMBUF # define SC_BOOST_NO_STD_WSTREAMBUF # endif #endif // // We always have SGI style hash_set, hash_map, and slist: // #define SC_BOOST_HAS_HASH #define SC_BOOST_HAS_SLIST // // STLport does a good job of importing names into namespace std::, // but doesn't always get them all, define SC_BOOST_NO_STDC_NAMESPACE, since our // workaround does not conflict with STLports: // // // Harold Howe says: // Borland switched to STLport in BCB6. Defining SC_BOOST_NO_STDC_NAMESPACE with // BCB6 does cause problems. If we detect C++ Builder, then don't define // SC_BOOST_NO_STDC_NAMESPACE // #if !defined(__BORLANDC__) && !defined(__DMC__) // // If STLport is using it's own namespace, and the real names are in // the global namespace, then we duplicate STLport's using declarations // (by defining SC_BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't // necessarily import all the names we need into namespace std:: // # if (defined(__STL_IMPORT_VENDOR_CSTD) \ || defined(__STL_USE_OWN_NAMESPACE) \ || defined(_STLP_IMPORT_VENDOR_CSTD) \ || defined(_STLP_USE_OWN_NAMESPACE)) \ && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD)) # define SC_BOOST_NO_STDC_NAMESPACE # define SC_BOOST_NO_EXCEPTION_STD_NAMESPACE # endif #elif defined(__BORLANDC__) && __BORLANDC__ < 0x560 // STLport doesn't import std::abs correctly: #include namespace std { using ::abs; } // and strcmp/strcpy don't get imported either ('cos they are macros) #include #ifdef strcpy # undef strcpy #endif #ifdef strcmp # undef strcmp #endif #ifdef _STLP_VENDOR_CSTD namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; } #endif #endif // // std::use_facet may be non-standard, uses a class instead: // #if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) # define SC_BOOST_NO_STD_USE_FACET # define SC_BOOST_HAS_STLP_USE_FACET #endif // // If STLport thinks there are no wide functions, etc. is not working; but // only if SC_BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import // into std:: ourselves). // #if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(SC_BOOST_NO_STDC_NAMESPACE) # define SC_BOOST_NO_CWCHAR # define SC_BOOST_NO_CWCTYPE #endif // // If STLport for some reason was configured so that it thinks that wchar_t // is not an intrinsic type, then we have to disable the support for it as // well (we would be missing required specializations otherwise). // #if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT) # undef SC_BOOST_NO_INTRINSIC_WCHAR_T # define SC_BOOST_NO_INTRINSIC_WCHAR_T #endif // // Borland ships a version of STLport with C++ Builder 6 that lacks // hashtables and the like: // #if defined(__BORLANDC__) && (__BORLANDC__ == 0x560) # undef SC_BOOST_HAS_HASH #endif // // gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max // #if defined(__GNUC__) && (__GNUC__ < 3) # include // for std::min and std::max # define SC_BOOST_USING_STD_MIN() ((void)0) # define SC_BOOST_USING_STD_MAX() ((void)0) namespace sc_boost { using std::min; using std::max; } #endif #define SC_BOOST_STDLIB "STLPort standard library version " SC_BOOST_STRINGIZE(__SGI_STL_PORT) systemc-2.3.4/src/sysc/packages/boost/config/stdlib/dinkumware.hpp0000644000175000017500000000713414342422106025153 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright David Abrahams 2002. // (C) Copyright Guillaume Melquiond 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Dinkumware standard library config: #if !defined(_YVALS) && !defined(_CPPLIB_VER) #include #if !defined(_YVALS) && !defined(_CPPLIB_VER) #error This is not the Dinkumware lib! #endif #endif #if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306) // full dinkumware 3.06 and above // fully conforming provided the compiler supports it: # if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700)) // can be defined in yvals.h # define SC_BOOST_NO_STDC_NAMESPACE # endif # if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(SC_BOOST_MSVC) # define SC_BOOST_NO_STD_ALLOCATOR # endif # define SC_BOOST_HAS_PARTIAL_STD_ALLOCATOR # if defined(SC_BOOST_MSVC) && (SC_BOOST_MSVC < 1300) // if this lib version is set up for vc6 then there is no std::use_facet: # define SC_BOOST_NO_STD_USE_FACET # define SC_BOOST_HAS_TWO_ARG_USE_FACET // C lib functions aren't in namespace std either: # define SC_BOOST_NO_STDC_NAMESPACE // and nor is # define SC_BOOST_NO_EXCEPTION_STD_NAMESPACE # endif // There's no numeric_limits support unless _LONGLONG is defined: # if !defined(_LONGLONG) && (_CPPLIB_VER <= 310) # define SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS # endif // 3.06 appears to have (non-sgi versions of) & , // and no at all #else # define SC_BOOST_MSVC_STD_ITERATOR 1 # define SC_BOOST_NO_STD_ITERATOR # define SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS # define SC_BOOST_NO_STD_ALLOCATOR # define SC_BOOST_NO_STDC_NAMESPACE # define SC_BOOST_NO_STD_USE_FACET # define SC_BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN # define SC_BOOST_HAS_MACRO_USE_FACET # ifndef _CPPLIB_VER // Updated Dinkum library defines this, and provides // its own min and max definitions. # define SC_BOOST_NO_STD_MIN_MAX # define SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS # endif #endif // // std extension namespace is stdext for vc7.1 and later, // the same applies to other compilers that sit on top // of vc7.1 (Intel and Comeau): // #if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__) # define SC_BOOST_STD_EXTENSION_NAMESPACE stdext #endif #if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306) // if we're using a dinkum lib that's // been configured for VC6/7 then there is // no iterator traits (true even for icl) # define SC_BOOST_NO_STD_ITERATOR_TRAITS #endif #if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310) // Intel C++ chokes over any non-trivial use of // this may be an overly restrictive define, but regex fails without it: # define SC_BOOST_NO_STD_LOCALE #endif #ifdef _CPPLIB_VER # define SC_BOOST_DINKUMWARE_STDLIB _CPPLIB_VER #else # define SC_BOOST_DINKUMWARE_STDLIB 1 #endif #ifdef _CPPLIB_VER # define SC_BOOST_STDLIB "Dinkumware standard library version " SC_BOOST_STRINGIZE(_CPPLIB_VER) #else # define SC_BOOST_STDLIB "Dinkumware standard library version 1.x" #endif systemc-2.3.4/src/sysc/packages/boost/config/stdlib/libcomo.hpp0000644000175000017500000000240614342422106024426 0ustar carstencarsten// (C) Copyright John Maddock 2002 - 2003. // (C) Copyright Jens Maurer 2002 - 2003. // (C) Copyright Beman Dawes 2002 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Comeau STL: #if !defined(__LIBCOMO__) # include # if !defined(__LIBCOMO__) # error "This is not the Comeau STL!" # endif #endif // // std::streambuf is non-standard // NOTE: versions of libcomo prior to beta28 have octal version numbering, // e.g. version 25 is 21 (dec) #if __LIBCOMO_VERSION__ <= 22 # define SC_BOOST_NO_STD_WSTREAMBUF #endif #if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32) #define SC_BOOST_NO_SWPRINTF #endif #if __LIBCOMO_VERSION__ >= 31 # define SC_BOOST_HAS_HASH # define SC_BOOST_HAS_SLIST #endif // // Intrinsic type_traits support. // The SGI STL has it's own __type_traits class, which // has intrinsic compiler support with SGI's compilers. // Whatever map SGI style type traits to boost equivalents: // #define SC_BOOST_HAS_SGI_TYPE_TRAITS #define SC_BOOST_STDLIB "Comeau standard library " SC_BOOST_STRINGIZE(__LIBCOMO_VERSION__) systemc-2.3.4/src/sysc/packages/boost/config/stdlib/msl.hpp0000644000175000017500000000244714342422106023602 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Darin Adler 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Metrowerks standard library: #ifndef __MSL_CPP__ # include # ifndef __MSL_CPP__ # error This is not the MSL standard library! # endif #endif #if __MSL_CPP__ >= 0x6000 // Pro 6 # define SC_BOOST_HAS_HASH # define SC_BOOST_STD_EXTENSION_NAMESPACE Metrowerks #endif #define SC_BOOST_HAS_SLIST #if __MSL_CPP__ < 0x6209 # define SC_BOOST_NO_STD_MESSAGES #endif // check C lib version for #include #if defined(__MSL__) && (__MSL__ >= 0x5000) # define SC_BOOST_HAS_STDINT_H # if !defined(__PALMOS_TRAPS__) # define SC_BOOST_HAS_UNISTD_H # endif // boilerplate code: # include #endif #if defined(_MWMT) || _MSL_THREADSAFE # define SC_BOOST_HAS_THREADS #endif #ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG # define SC_BOOST_NO_STD_USE_FACET # define SC_BOOST_HAS_TWO_ARG_USE_FACET #endif #define SC_BOOST_STDLIB "Metrowerks Standard Library version " SC_BOOST_STRINGIZE(__MSL_CPP__) systemc-2.3.4/src/sysc/packages/boost/config/stdlib/libstdcpp3.hpp0000644000175000017500000000435214342422106025053 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Jens Maurer 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // config for libstdc++ v3 // not much to go in here: #ifdef __GLIBCXX__ #define SC_BOOST_STDLIB "GNU libstdc++ version " SC_BOOST_STRINGIZE(__GLIBCXX__) #else #define SC_BOOST_STDLIB "GNU libstdc++ version " SC_BOOST_STRINGIZE(__GLIBCPP__) #endif #if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T) # define SC_BOOST_NO_CWCHAR # define SC_BOOST_NO_CWCTYPE # define SC_BOOST_NO_STD_WSTRING # define SC_BOOST_NO_STD_WSTREAMBUF #endif #if defined(__osf__) && !defined(_REENTRANT) \ && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) ) // GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header // file is included, therefore for consistency we define it here as well. # define _REENTRANT #endif #ifdef __GLIBCXX__ // gcc 3.4 and greater: # if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ || defined(_GLIBCXX__PTHREADS) // // If the std lib has thread support turned on, then turn it on in Boost // as well. We do this because some gcc-3.4 std lib headers define _REENTANT // while others do not... // # define SC_BOOST_HAS_THREADS # else # define SC_BOOST_DISABLE_THREADS # endif #elif defined(__GLIBCPP__) \ && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \ && !defined(_GLIBCPP__PTHREADS) // disable thread support if the std lib was built single threaded: # define SC_BOOST_DISABLE_THREADS #endif #if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT) // linux on arm apparently doesn't define _REENTRANT // so just turn on threading support whenever the std lib is thread safe: # define SC_BOOST_HAS_THREADS #endif #if !defined(_GLIBCPP_USE_LONG_LONG) \ && !defined(_GLIBCXX_USE_LONG_LONG)\ && defined(SC_BOOST_HAS_LONG_LONG) // May have been set by compiler/*.hpp, but "long long" without library // support is useless. # undef SC_BOOST_HAS_LONG_LONG #endif systemc-2.3.4/src/sysc/packages/boost/config/stdlib/roguewave.hpp0000644000175000017500000000752714342422106025017 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001. // (C) Copyright David Abrahams 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Rogue Wave std lib: #if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) # include # if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) # error This is not the Rogue Wave standard library # endif #endif // // figure out a consistent version number: // #ifndef _RWSTD_VER # define SC_BOOST_RWSTD_VER 0x010000 #elif _RWSTD_VER < 0x010000 # define SC_BOOST_RWSTD_VER (_RWSTD_VER << 8) #else # define SC_BOOST_RWSTD_VER _RWSTD_VER #endif #ifndef _RWSTD_VER # define SC_BOOST_STDLIB "Rogue Wave standard library version (Unknown version)" #else # define SC_BOOST_STDLIB "Rogue Wave standard library version " SC_BOOST_STRINGIZE(_RWSTD_VER) #endif // // Prior to version 2.2.0 the primary template for std::numeric_limits // does not have compile time constants, even though specializations of that // template do: // #if SC_BOOST_RWSTD_VER < 0x020200 # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS #endif // Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the // library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817): #if SC_BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550)) # define SC_BOOST_NO_LONG_LONG_NUMERIC_LIMITS # endif // // Borland version of numeric_limits lacks __int64 specialisation: // #ifdef __BORLANDC__ # define SC_BOOST_NO_MS_INT64_NUMERIC_LIMITS #endif // // No std::iterator if it can't figure out default template args: // #if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (SC_BOOST_RWSTD_VER < 0x020000) # define SC_BOOST_NO_STD_ITERATOR #endif // // No iterator traits without partial specialization: // #if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC) # define SC_BOOST_NO_STD_ITERATOR_TRAITS #endif // // Prior to version 2.0, std::auto_ptr was buggy, and there were no // new-style iostreams, and no conformant std::allocator: // #if (SC_BOOST_RWSTD_VER < 0x020000) # define SC_BOOST_NO_AUTO_PTR # define SC_BOOST_NO_STRINGSTREAM # define SC_BOOST_NO_STD_ALLOCATOR # define SC_BOOST_NO_STD_LOCALE #endif // // No template iterator constructors without member template support: // #if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES) # define SC_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS #endif // // RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use // (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR // on HP aCC systems even though the allocator is in fact broken): // #if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100) # define SC_BOOST_NO_STD_ALLOCATOR #endif // // If we have a std::locale, we still may not have std::use_facet: // #if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(SC_BOOST_NO_STD_LOCALE) # define SC_BOOST_NO_STD_USE_FACET # define SC_BOOST_HAS_TWO_ARG_USE_FACET #endif // // There's no std::distance prior to version 2, or without // partial specialization support: // #if (SC_BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) #define SC_BOOST_NO_STD_DISTANCE #endif // // Some versions of the rogue wave library don't have assignable // OutputIterators: // #if SC_BOOST_RWSTD_VER < 0x020100 # define SC_BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN #endif // // Disable SC_BOOST_HAS_LONG_LONG when the library has no support for it. // #if !defined(_RWSTD_LONG_LONG) && defined(SC_BOOST_HAS_LONG_LONG) # undef SC_BOOST_HAS_LONG_LONG #endif systemc-2.3.4/src/sysc/packages/boost/config/stdlib/vacpp.hpp0000644000175000017500000000076014342422106024114 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. #if __IBMCPP__ <= 501 # define SC_BOOST_NO_STD_ALLOCATOR #endif #define SC_BOOST_HAS_MACRO_USE_FACET #define SC_BOOST_NO_STD_MESSAGES #define SC_BOOST_STDLIB "Visual Age default standard library" systemc-2.3.4/src/sysc/packages/boost/config/select_compiler_config.hpp0000644000175000017500000000565714342422106026232 0ustar carstencarsten// Boost compiler configuration selection header file // (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Martin Wille 2003. // (C) Copyright Guillaume Melquiond 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // locate which compiler we are using and define // SC_BOOST_COMPILER_CONFIG as needed: # if defined __COMO__ // Comeau C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/comeau.hpp" #elif defined __DMC__ // Digital Mars C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/digitalmars.hpp" #elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) // Intel # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/intel.hpp" # elif defined __GNUC__ // GNU C++: # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/gcc.hpp" #elif defined __KCC // Kai C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/kai.hpp" #elif defined __sgi // SGI MIPSpro C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/sgi_mipspro.hpp" #elif defined __DECCXX // Compaq Tru64 Unix cxx # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/compaq_cxx.hpp" #elif defined __ghs // Greenhills C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/greenhills.hpp" #elif defined __BORLANDC__ // Borland # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/borland.hpp" #elif defined __MWERKS__ // Metrowerks CodeWarrior # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/metrowerks.hpp" #elif defined __SUNPRO_CC // Sun Workshop Compiler C++ # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/sunpro_cc.hpp" #elif defined __HP_aCC // HP aCC # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/hp_acc.hpp" #elif defined(__MRC__) || defined(__SC__) // MPW MrCpp or SCpp # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/mpw.hpp" #elif defined(__IBMCPP__) // IBM Visual Age # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/vacpp.hpp" #elif defined _MSC_VER // Microsoft Visual C++ // // Must remain the last #elif since some other vendors (Metrowerks, for // example) also #define _MSC_VER # define SC_BOOST_COMPILER_CONFIG "sysc/packages/boost/config/compiler/visualc.hpp" #elif defined (SC_BOOST_ASSERT_CONFIG) // this must come last - generate an error if we don't // recognise the compiler: # error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)" #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/0000755000175000017500000000000014342422106022620 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/config/compiler/hp_acc.hpp0000644000175000017500000000420614342422106024550 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001 - 2003. // (C) Copyright Aleksey Gurtovoy 2002. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Toon Knapen 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // HP aCC C++ compiler setup: #if (__HP_aCC <= 33100) # define SC_BOOST_NO_INTEGRAL_INT64_T # define SC_BOOST_NO_OPERATORS_IN_NAMESPACE # if !defined(_NAMESPACE_STD) # define SC_BOOST_NO_STD_LOCALE # define SC_BOOST_NO_STRINGSTREAM # endif #endif #if (__HP_aCC <= 33300) // member templates are sufficiently broken that we disable them for now # define SC_BOOST_NO_MEMBER_TEMPLATES # define SC_BOOST_NO_DEPENDENT_NESTED_DERIVATIONS # define SC_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE #endif #if (__HP_aCC <= 33900) || !defined(SC_BOOST_STRICT_CONFIG) # define SC_BOOST_NO_UNREACHABLE_RETURN_DETECTION # define SC_BOOST_NO_TEMPLATE_TEMPLATES # define SC_BOOST_NO_SWPRINTF # define SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # define SC_BOOST_NO_IS_ABSTRACT // std lib config should set this one already: //# define SC_BOOST_NO_STD_ALLOCATOR #endif // optional features rather than defects: #if (__HP_aCC >= 33900) # define SC_BOOST_HAS_LONG_LONG # define SC_BOOST_HAS_PARTIAL_STD_ALLOCATOR #endif #if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 ) # define SC_BOOST_NO_MEMBER_TEMPLATE_KEYWORD #endif #define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS #define SC_BOOST_COMPILER "HP aCC version " SC_BOOST_STRINGIZE(__HP_aCC) // // versions check: // we don't support HP aCC prior to version 0: #if __HP_aCC < 33000 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 0: #if (__HP_aCC > 53800) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/sunpro_cc.hpp0000644000175000017500000000607314342422106025332 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Jens Maurer 2001 - 2003. // (C) Copyright Peter Dimov 2002. // (C) Copyright Aleksey Gurtovoy 2002 - 2003. // (C) Copyright David Abrahams 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Sun C++ compiler setup: # if __SUNPRO_CC <= 0x500 # define SC_BOOST_NO_MEMBER_TEMPLATES # define SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING # endif # if (__SUNPRO_CC <= 0x520) // // Sunpro 5.2 and earler: // // although sunpro 5.2 supports the syntax for // inline initialization it often gets the value // wrong, especially where the value is computed // from other constants (J Maddock 6th May 2001) # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION // Although sunpro 5.2 supports the syntax for // partial specialization, it often seems to // bind to the wrong specialization. Better // to disable it until suppport becomes more stable // (J Maddock 6th May 2001). # define SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION # endif # if (__SUNPRO_CC <= 0x530) // Requesting debug info (-g) with Boost.Python results // in an internal compiler error for "static const" // initialized in-class. // >> Assertion: (../links/dbg_cstabs.cc, line 611) // while processing ../test.cpp at line 0. // (Jens Maurer according to Gottfried Ganauge 04 Mar 2002) # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION // SunPro 5.3 has better support for partial specialization, // but breaks when compiling std::less > // (Jens Maurer 4 Nov 2001). // std::less specialization fixed as reported by George // Heintzelman; partial specialization re-enabled // (Peter Dimov 17 Jan 2002) //# define SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // integral constant expressions with 64 bit numbers fail # define SC_BOOST_NO_INTEGRAL_INT64_T # endif # if (__SUNPRO_CC < 0x570) # define SC_BOOST_NO_TEMPLATE_TEMPLATES // see http://lists.boost.org/MailArchives/boost/msg47184.php // and http://lists.boost.org/MailArchives/boost/msg47220.php # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION # define SC_BOOST_NO_SFINAE # define SC_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS # define SC_BOOST_NO_IS_ABSTRACT # endif #define SC_BOOST_COMPILER "Sun compiler version " SC_BOOST_STRINGIZE(__SUNPRO_CC) // // versions check: // we don't support sunpro prior to version 4: #if __SUNPRO_CC < 0x400 #error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 0x570: #if (__SUNPRO_CC > 0x570) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/common_edg.hpp0000644000175000017500000000337414342422106025447 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // (C) Copyright Jens Maurer 2001. // (C) Copyright David Abrahams 2002. // (C) Copyright Aleksey Gurtovoy 2002. // (C) Copyright Markus Schoepflin 2005. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // // Options common to all edg based compilers. // // This is included from within the individual compiler mini-configs. #ifndef __EDG_VERSION__ # error This file requires that __EDG_VERSION__ be defined. #endif #if (__EDG_VERSION__ <= 238) # define SC_BOOST_NO_INTEGRAL_INT64_T # define SC_BOOST_NO_SFINAE #endif #if (__EDG_VERSION__ <= 240) # define SC_BOOST_NO_VOID_RETURNS #endif #if (__EDG_VERSION__ <= 241) && !defined(SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) # define SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP #endif #if (__EDG_VERSION__ <= 244) && !defined(SC_BOOST_NO_TEMPLATE_TEMPLATES) # define SC_BOOST_NO_TEMPLATE_TEMPLATES #endif #if (__EDG_VERSION__ < 300) && !defined(SC_BOOST_NO_IS_ABSTRACT) # define SC_BOOST_NO_IS_ABSTRACT #endif #if (__EDG_VERSION__ <= 303) && !defined(SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) # define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #endif // See also kai.hpp which checks a Kai-specific symbol for EH # if !defined(__KCC) && !defined(__EXCEPTIONS) # define SC_BOOST_NO_EXCEPTIONS # endif # if !defined(__NO_LONG_LONG) # define SC_BOOST_HAS_LONG_LONG # endif #ifdef c_plusplus // EDG has "long long" in non-strict mode // However, some libraries have insufficient "long long" support // #define SC_BOOST_HAS_LONG_LONG #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/intel.hpp0000644000175000017500000001312714342422106024450 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright Jens Maurer 2001. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Aleksey Gurtovoy 2002 - 2003. // (C) Copyright Guillaume Melquiond 2002 - 2003. // (C) Copyright Beman Dawes 2003. // (C) Copyright Martin Wille 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Intel compiler setup: #include "sysc/packages/boost/config/compiler/common_edg.hpp" #if defined(__INTEL_COMPILER) # define SC_BOOST_INTEL_CXX_VERSION __INTEL_COMPILER #elif defined(__ICL) # define SC_BOOST_INTEL_CXX_VERSION __ICL #elif defined(__ICC) # define SC_BOOST_INTEL_CXX_VERSION __ICC #elif defined(__ECC) # define SC_BOOST_INTEL_CXX_VERSION __ECC #endif #define SC_BOOST_COMPILER "Intel C++ version " SC_BOOST_STRINGIZE(SC_BOOST_INTEL_CXX_VERSION) #define SC_BOOST_INTEL SC_BOOST_INTEL_CXX_VERSION #if defined(_WIN32) || defined(_WIN64) # define SC_BOOST_INTEL_WIN SC_BOOST_INTEL #else # define SC_BOOST_INTEL_LINUX SC_BOOST_INTEL #endif #if (SC_BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER) # define SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS # define SC_BOOST_NO_TEMPLATE_TEMPLATES #endif #if (SC_BOOST_INTEL_CXX_VERSION <= 600) # if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov) // Boost libraries assume strong standard conformance unless otherwise // indicated by a config macro. As configured by Intel, the EDG front-end // requires certain compiler options be set to achieve that strong conformance. // Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt) // and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for // details as they apply to particular versions of the compiler. When the // compiler does not predefine a macro indicating if an option has been set, // this config file simply assumes the option has been set. // Thus SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if // the compiler option is not enabled. # define SC_BOOST_NO_SWPRINTF # endif // Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov) # if defined(_MSC_VER) && (_MSC_VER <= 1200) # define SC_BOOST_NO_VOID_RETURNS # define SC_BOOST_NO_INTEGRAL_INT64_T # endif #endif #if (SC_BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32) # define SC_BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS #endif // See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864 #if SC_BOOST_INTEL_CXX_VERSION < 600 # define SC_BOOST_NO_INTRINSIC_WCHAR_T #else // We should test the macro _WCHAR_T_DEFINED to check if the compiler // supports wchar_t natively. *BUT* there is a problem here: the standard // headers define this macro if they typedef wchar_t. Anyway, we're lucky // because they define it without a value, while Intel C++ defines it // to 1. So we can check its value to see if the macro was defined natively // or not. // Under UNIX, the situation is exactly the same, but the macro _WCHAR_T // is used instead. # if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0) # define SC_BOOST_NO_INTRINSIC_WCHAR_T # endif #endif #if defined(__GNUC__) && !defined(SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) // // Figure out when Intel is emulating this gcc bug: // # if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (SC_BOOST_INTEL <= 900) # define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL # endif #endif // // Verify that we have actually got SC_BOOST_NO_INTRINSIC_WCHAR_T // set correctly, if we don't do this now, we will get errors later // in type_traits code among other things, getting this correct // for the Intel compiler is actually remarkably fragile and tricky: // #if defined(SC_BOOST_NO_INTRINSIC_WCHAR_T) #include namespace sc_boost { template< typename T > struct assert_no_intrinsic_wchar_t; template<> struct assert_no_intrinsic_wchar_t { typedef void type; }; // if you see an error here then you need to unset SC_BOOST_NO_INTRINSIC_WCHAR_T // where it is defined above: typedef assert_no_intrinsic_wchar_t::type assert_no_intrinsic_wchar_t_; } // namespace sc_boost #else namespace sc_boost { template< typename T > struct assert_intrinsic_wchar_t; template<> struct assert_intrinsic_wchar_t {}; // if you see an error here then define SC_BOOST_NO_INTRINSIC_WCHAR_T on the command line: template<> struct assert_intrinsic_wchar_t {}; } // namespace sc_boost #endif #if _MSC_VER+0 >= 1000 # if _MSC_VER >= 1200 # define SC_BOOST_HAS_MS_INT64 # endif # define SC_BOOST_NO_SWPRINTF #elif defined(_WIN32) # define SC_BOOST_DISABLE_WIN32 #endif // I checked version 6.0 build 020312Z, it implements the NRVO. // Correct this as you find out which version of the compiler // implemented the NRVO first. (Daniel Frey) #if (SC_BOOST_INTEL_CXX_VERSION >= 600) # define SC_BOOST_HAS_NRVO #endif // // versions check: // we don't support Intel prior to version 5.0: #if SC_BOOST_INTEL_CXX_VERSION < 500 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version: #if (SC_BOOST_INTEL_CXX_VERSION > 900) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # elif defined(_MSC_VER) # pragma message("Unknown compiler version - please run the configure tests and report the results") # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/digitalmars.hpp0000644000175000017500000000275714342422106025644 0ustar carstencarsten// Copyright (C) Christof Meerwald 2003 // Copyright (C) Dan Watkins 2003 // // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // Digital Mars C++ compiler setup: #define SC_BOOST_COMPILER __DMC_VERSION_STRING__ #define SC_BOOST_HAS_LONG_LONG #define SC_BOOST_HAS_PRAGMA_ONCE #if (__DMC__ <= 0x833) #define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #define SC_BOOST_NO_TEMPLATE_TEMPLATES #define SC_BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING #define SC_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS #define SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS #endif #if (__DMC__ <= 0x840) || !defined(SC_BOOST_STRICT_CONFIG) #define SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS #define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS #define SC_BOOST_NO_OPERATORS_IN_NAMESPACE #define SC_BOOST_NO_UNREACHABLE_RETURN_DETECTION #define SC_BOOST_NO_SFINAE #define SC_BOOST_NO_USING_TEMPLATE #define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #endif // // has macros: #if (__DMC__ >= 0x840) #define SC_BOOST_HAS_DIRENT_H #define SC_BOOST_HAS_STDINT_H #define SC_BOOST_HAS_WINTHREADS #endif // check for exception handling support: #ifndef _CPPUNWIND # define SC_BOOST_NO_EXCEPTIONS #endif #if (__DMC__ < 0x840) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/kai.hpp0000644000175000017500000000211014342422106024067 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright David Abrahams 2002. // (C) Copyright Aleksey Gurtovoy 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Kai C++ compiler setup: #include "sysc/packages/boost/config/compiler/common_edg.hpp" # if (__KCC_VERSION <= 4001) || !defined(SC_BOOST_STRICT_CONFIG) // at least on Sun, the contents of is not in namespace std # define SC_BOOST_NO_STDC_NAMESPACE # endif // see also common_edg.hpp which needs a special check for __KCC # if !defined(_EXCEPTIONS) # define SC_BOOST_NO_EXCEPTIONS # endif #define SC_BOOST_COMPILER "Kai C++ version " SC_BOOST_STRINGIZE(__KCC_VERSION) // // last known and checked version is 4001: #if (__KCC_VERSION > 4001) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/metrowerks.hpp0000644000175000017500000000604714342422106025542 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Darin Adler 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright David Abrahams 2001 - 2002. // (C) Copyright Beman Dawes 2001 - 2003. // (C) Copyright Stefan Slapeta 2004. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Metrowerks C++ compiler setup: // locale support is disabled when linking with the dynamic runtime # ifdef _MSL_NO_LOCALE # define SC_BOOST_NO_STD_LOCALE # endif # if __MWERKS__ <= 0x2301 // 5.3 # define SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING # define SC_BOOST_NO_POINTER_TO_MEMBER_CONST # define SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # define SC_BOOST_NO_MEMBER_TEMPLATE_KEYWORD # endif # if __MWERKS__ <= 0x2401 // 6.2 //# define SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING # endif # if(__MWERKS__ <= 0x2407) // 7.x # define SC_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS # define SC_BOOST_NO_UNREACHABLE_RETURN_DETECTION # endif # if(__MWERKS__ <= 0x3003) // 8.x # define SC_BOOST_NO_SFINAE # endif // the "|| !defined(SC_BOOST_STRICT_CONFIG)" part should apply to the last // tested version *only*: # if(__MWERKS__ <= 0x3206) || !defined(SC_BOOST_STRICT_CONFIG) // 9.5 # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS # define SC_BOOST_NO_IS_ABSTRACT # endif #if !__option(wchar_type) # define SC_BOOST_NO_INTRINSIC_WCHAR_T #endif #if !__option(exceptions) # define SC_BOOST_NO_EXCEPTIONS #endif #if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh) # if __MWERKS__ == 0x3000 # define SC_BOOST_COMPILER_VERSION 8.0 # elif __MWERKS__ == 0x3001 # define SC_BOOST_COMPILER_VERSION 8.1 # elif __MWERKS__ == 0x3002 # define SC_BOOST_COMPILER_VERSION 8.2 # elif __MWERKS__ == 0x3003 # define SC_BOOST_COMPILER_VERSION 8.3 # elif __MWERKS__ == 0x3200 # define SC_BOOST_COMPILER_VERSION 9.0 # elif __MWERKS__ == 0x3201 # define SC_BOOST_COMPILER_VERSION 9.1 # elif __MWERKS__ == 0x3202 # define SC_BOOST_COMPILER_VERSION 9.2 # elif __MWERKS__ == 0x3204 # define SC_BOOST_COMPILER_VERSION 9.3 # elif __MWERKS__ == 0x3205 # define SC_BOOST_COMPILER_VERSION 9.4 # elif __MWERKS__ == 0x3206 # define SC_BOOST_COMPILER_VERSION 9.5 # else # define SC_BOOST_COMPILER_VERSION __MWERKS__ # endif #else # define SC_BOOST_COMPILER_VERSION __MWERKS__ #endif #define SC_BOOST_COMPILER "Metrowerks CodeWarrior C++ version " SC_BOOST_STRINGIZE(SC_BOOST_COMPILER_VERSION) // // versions check: // we don't support Metrowerks prior to version 5.3: #if __MWERKS__ < 0x2301 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version: #if (__MWERKS__ > 0x3205) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/greenhills.hpp0000644000175000017500000000150614342422106025467 0ustar carstencarsten// (C) Copyright John Maddock 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Greenhills C++ compiler setup: #define SC_BOOST_COMPILER "Greenhills C++ version " SC_BOOST_STRINGIZE(__ghs) #include "sysc/packages/boost/config/compiler/common_edg.hpp" // // versions check: // we don't support Greenhills prior to version 0: #if __ghs < 0 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 0: #if (__ghs > 0) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/gcc.hpp0000644000175000017500000000647314342422106024077 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001 - 2002. // (C) Copyright Jens Maurer 2001 - 2002. // (C) Copyright Beman Dawes 2001 - 2003. // (C) Copyright Douglas Gregor 2002. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Synge Todo 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // GNU C++ compiler setup: // // Define SC_BOOST_GCC so we know this is "real" GCC and not some pretender: // #define SC_BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #if !defined(__CUDACC__) #define SC_BOOST_GCC SC_BOOST_GCC_VERSION #endif #if __GNUC__ < 3 # if __GNUC_MINOR__ == 91 // egcs 1.1 won't parse shared_ptr.hpp without this: # define SC_BOOST_NO_AUTO_PTR # endif # if __GNUC_MINOR__ < 95 // // Prior to gcc 2.95 member templates only partly // work - define SC_BOOST_MSVC6_MEMBER_TEMPLATES // instead since inline member templates mostly work. // # define SC_BOOST_NO_MEMBER_TEMPLATES # if __GNUC_MINOR__ >= 9 # define SC_BOOST_MSVC6_MEMBER_TEMPLATES # endif # endif # if __GNUC_MINOR__ < 96 # define SC_BOOST_NO_SFINAE # endif # if __GNUC_MINOR__ <= 97 # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS # define SC_BOOST_NO_OPERATORS_IN_NAMESPACE # endif # define SC_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE # define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL # define SC_BOOST_NO_IS_ABSTRACT #elif __GNUC__ == 3 // // gcc-3.x problems: // // Bug specific to gcc 3.1 and 3.2: // # if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2)) # define SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS # endif # if __GNUC_MINOR__ < 4 # define SC_BOOST_NO_IS_ABSTRACT # endif #endif #ifndef __EXCEPTIONS # define SC_BOOST_NO_EXCEPTIONS #endif // // Threading support: Turn this on unconditionally here (except for // those platforms where we can know for sure). It will get turned off again // later if no threading API is detected. // #if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) # define SC_BOOST_HAS_THREADS #endif // // gcc has "long long" // #define SC_BOOST_HAS_LONG_LONG // // gcc implements the named return value optimization since version 3.1 // #if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) #define SC_BOOST_HAS_NRVO #endif #define SC_BOOST_COMPILER "GNU C++ version " __VERSION__ // // versions check: // we don't know gcc prior to version 2.90: #if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90) # error "Compiler not configured - please reconfigure" #endif // // last known and checked version is 4.0 (Pre-release): #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0)) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # else // we don't emit warnings here anymore since there are no defect macros defined for // gcc post 3.4, so any failures are gcc regressions... //# warning "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/comeau.hpp0000644000175000017500000000310214342422106024576 0ustar carstencarsten// (C) Copyright John Maddock 2001. // (C) Copyright Douglas Gregor 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright Aleksey Gurtovoy 2003. // (C) Copyright Beman Dawes 2003. // (C) Copyright Jens Maurer 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Comeau C++ compiler setup: #include "sysc/packages/boost/config/compiler/common_edg.hpp" #if (__COMO_VERSION__ <= 4245) # if defined(_MSC_VER) && _MSC_VER <= 1300 # if _MSC_VER > 100 // only set this in non-strict mode: # define SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP # endif # endif // Void returns don't work when emulating VC 6 (Peter Dimov) # if defined(_MSC_VER) && (_MSC_VER == 1200) # define SC_BOOST_NO_VOID_RETURNS # endif #endif // version 4245 // // enable __int64 support in VC emulation mode // # if defined(_MSC_VER) && (_MSC_VER >= 1200) # define SC_BOOST_HAS_MS_INT64 # endif #define SC_BOOST_COMPILER "Comeau compiler version " SC_BOOST_STRINGIZE(__COMO_VERSION__) // // versions check: // we don't know Comeau prior to version 4245: #if __COMO_VERSION__ < 4245 # error "Compiler not configured - please reconfigure" #endif // // last known and checked version is 4245: #if (__COMO_VERSION__ > 4245) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/compaq_cxx.hpp0000644000175000017500000000101714342422106025472 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Dec Alpha True64 C++ compiler setup: #define SC_BOOST_COMPILER "Dec Alpha True64 " SC_BOOST_STRINGIZE(__DECCXX_VER) #include "sysc/packages/boost/config/compiler/common_edg.hpp" // // versions check: // Nothing to do here? systemc-2.3.4/src/sysc/packages/boost/config/compiler/mpw.hpp0000644000175000017500000000317614342422106024143 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // (C) Copyright Aleksey Gurtovoy 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // MPW C++ compilers setup: # if defined(__SC__) # define SC_BOOST_COMPILER "MPW SCpp version " SC_BOOST_STRINGIZE(__SC__) # elif defined(__MRC__) # define SC_BOOST_COMPILER "MPW MrCpp version " SC_BOOST_STRINGIZE(__MRC__) # else # error "Using MPW compiler configuration by mistake. Please update." # endif // // MPW 8.90: // #if (MPW_CPLUS <= 0x890) || !defined(SC_BOOST_STRICT_CONFIG) # define SC_BOOST_NO_CV_SPECIALIZATIONS # define SC_BOOST_NO_DEPENDENT_NESTED_DERIVATIONS # define SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION # define SC_BOOST_NO_INTRINSIC_WCHAR_T # define SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION # define SC_BOOST_NO_USING_TEMPLATE # define SC_BOOST_NO_CWCHAR # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # define SC_BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */ #endif // // versions check: // we don't support MPW prior to version 8.9: #if MPW_CPLUS < 0x890 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 0x890: #if (MPW_CPLUS > 0x890) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/sgi_mipspro.hpp0000644000175000017500000000127514342422106025671 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // SGI C++ compiler setup: #define SC_BOOST_COMPILER "SGI Irix compiler version " SC_BOOST_STRINGIZE(_COMPILER_VERSION) #include "sysc/packages/boost/config/compiler/common_edg.hpp" // // Threading support: // Turn this on unconditionally here, it will get turned off again later // if no threading API is detected. // #define SC_BOOST_HAS_THREADS // // version check: // probably nothing to do here? systemc-2.3.4/src/sysc/packages/boost/config/compiler/vacpp.hpp0000644000175000017500000000342514342422106024446 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Toon Knapen 2001 - 2003. // (C) Copyright Lie-Quan Lee 2001. // (C) Copyright Markus Schpflin 2002 - 2003. // (C) Copyright Beman Dawes 2002 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Visual Age (IBM) C++ compiler setup: #if __IBMCPP__ <= 501 # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS # define SC_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS #endif #if (__IBMCPP__ <= 502) // Actually the compiler supports inclass member initialization but it // requires a definition for the class member and it doesn't recognize // it as an integral constant expression when used as a template argument. # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION # define SC_BOOST_NO_INTEGRAL_INT64_T # define SC_BOOST_NO_MEMBER_TEMPLATE_KEYWORD #endif #if (__IBMCPP__ <= 600) || !defined(SC_BOOST_STRICT_CONFIG) # define SC_BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS # define SC_BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES 1 #endif // // On AIX thread support seems to be indicated by _THREAD_SAFE: // #ifdef _THREAD_SAFE # define SC_BOOST_HAS_THREADS #endif #define SC_BOOST_COMPILER "IBM Visual Age version " SC_BOOST_STRINGIZE(__IBMCPP__) // // versions check: // we don't support Visual age prior to version 5: #if __IBMCPP__ < 500 #error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 600: #if (__IBMCPP__ > 600) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/borland.hpp0000644000175000017500000001220014342422106024745 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Aleksey Gurtovoy 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Borland C++ compiler setup: // Version 5.0 and below: # if __BORLANDC__ <= 0x0550 // Borland C++Builder 4 and 5: # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS # if __BORLANDC__ == 0x0550 // Borland C++Builder 5, command-line compiler 5.5: # define SC_BOOST_NO_OPERATORS_IN_NAMESPACE # endif # endif // Version 5.51 and below: #if (__BORLANDC__ <= 0x551) # define SC_BOOST_NO_CV_SPECIALIZATIONS # define SC_BOOST_NO_CV_VOID_SPECIALIZATIONS # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # define SC_BOOST_NO_DEDUCED_TYPENAME // workaround for missing WCHAR_MAX/WCHAR_MIN: #include #include #ifndef WCHAR_MAX # define WCHAR_MAX 0xffff #endif #ifndef WCHAR_MIN # define WCHAR_MIN 0 #endif #endif // Version 7.0 (Kylix) and below: #if (__BORLANDC__ <= 0x570) # define SC_BOOST_NO_SFINAE # define SC_BOOST_NO_INTEGRAL_INT64_T # define SC_BOOST_NO_DEPENDENT_NESTED_DERIVATIONS # define SC_BOOST_NO_PRIVATE_IN_AGGREGATE # define SC_BOOST_NO_USING_TEMPLATE # define SC_BOOST_BCB_PARTIAL_SPECIALIZATION_BUG # define SC_BOOST_NO_TEMPLATE_TEMPLATES # define SC_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS // we shouldn't really need this - but too many things choke // without it, this needs more investigation: # define SC_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # define SC_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL # define SC_BOOST_NO_IS_ABSTRACT # ifdef NDEBUG // fix broken so that Boost.test works: # include # undef strcmp # endif // // new bug in 5.61: #if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x570) // this seems to be needed by the command line compiler, but not the IDE: # define SC_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS #endif # ifdef _WIN32 # define SC_BOOST_NO_SWPRINTF # elif defined(linux) || defined(__linux__) || defined(__linux) // we should really be able to do without this // but the wcs* functions aren't imported into std:: # define SC_BOOST_NO_STDC_NAMESPACE // _CPPUNWIND doesn't get automatically set for some reason: # pragma defineonoption SC_BOOST_CPPUNWIND -x # endif #endif // // Post 0x561 we have long long and stdint.h: #if __BORLANDC__ >= 0x561 # ifndef __NO_LONG_LONG # define SC_BOOST_HAS_LONG_LONG # endif // On non-Win32 platforms let the platform config figure this out: # ifdef _WIN32 # define SC_BOOST_HAS_STDINT_H # endif #endif // Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is // defined, then we have 0x560 or greater with the Rogue Wave implementation // which presumably has the std::DBL_MAX bug. #if ((__BORLANDC__ >= 0x550) && (__BORLANDC__ < 0x560)) || defined(_USE_OLD_RW_STL) // is partly broken, some macros define symbols that are really in // namespace std, so you end up having to use illegal constructs like // std::DBL_MAX, as a fix we'll just include float.h and have done with: #include #endif // // __int64: // #if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__) # define SC_BOOST_HAS_MS_INT64 #endif // // check for exception handling support: // #if !defined(_CPPUNWIND) && !defined(SC_BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) # define SC_BOOST_NO_EXCEPTIONS #endif // // all versions have a : // #ifndef __STRICT_ANSI__ # define SC_BOOST_HAS_DIRENT_H #endif // // all versions support __declspec: // #ifndef __STRICT_ANSI__ # define SC_BOOST_HAS_DECLSPEC #endif // // ABI fixing headers: // #if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet #ifndef SC_BOOST_ABI_PREFIX # define SC_BOOST_ABI_PREFIX "sysc/packages/boost/config/abi/borland_prefix.hpp" #endif #ifndef SC_BOOST_ABI_SUFFIX # define SC_BOOST_ABI_SUFFIX "sysc/packages/boost/config/abi/borland_suffix.hpp" #endif #endif // // Disable Win32 support in ANSI mode: // #if __BORLANDC__ < 0x600 # pragma defineonoption SC_BOOST_DISABLE_WIN32 -A #elif defined(__STRICT_ANSI__) # define SC_BOOST_DISABLE_WIN32 #endif // // MSVC compatibility mode does some nasty things: // #if defined(_MSC_VER) && (_MSC_VER <= 1200) # define SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP # define SC_BOOST_NO_VOID_RETURNS #endif #define SC_BOOST_COMPILER "Borland C++ version " SC_BOOST_STRINGIZE(__BORLANDC__) // // versions check: // we don't support Borland prior to version 5.4: #if __BORLANDC__ < 0x540 # error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 1536 (Builder X preview): #if (__BORLANDC__ > 1536) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # else # pragma message( "Unknown compiler version - please run the configure tests and report the results") # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/compiler/visualc.hpp0000644000175000017500000001363714342422106025011 0ustar carstencarsten// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Darin Adler 2001 - 2002. // (C) Copyright Peter Dimov 2001. // (C) Copyright Aleksey Gurtovoy 2002. // (C) Copyright David Abrahams 2002 - 2003. // (C) Copyright Beman Dawes 2002 - 2003. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // Microsoft Visual C++ compiler setup: #define SC_BOOST_MSVC _MSC_VER // turn off the warnings before we #include anything #pragma warning( disable : 4503 ) // warning: decorated name length exceeded #if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 # pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info # define SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # define SC_BOOST_NO_VOID_RETURNS # define SC_BOOST_NO_EXCEPTION_STD_NAMESPACE // disable min/max macro defines on vc6: // #endif #if (_MSC_VER <= 1300) // 1300 == VC++ 7.0 # if !defined(_MSC_EXTENSIONS) && !defined(SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za # define SC_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # endif # define SC_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS # define SC_BOOST_NO_INCLASS_MEMBER_INITIALIZATION # define SC_BOOST_NO_PRIVATE_IN_AGGREGATE # define SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP # define SC_BOOST_NO_INTEGRAL_INT64_T # define SC_BOOST_NO_DEDUCED_TYPENAME # define SC_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE // VC++ 6/7 has member templates but they have numerous problems including // cases of silent failure, so for safety we define: # define SC_BOOST_NO_MEMBER_TEMPLATES // For VC++ experts wishing to attempt workarounds, we define: # define SC_BOOST_MSVC6_MEMBER_TEMPLATES # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS # define SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION # define SC_BOOST_NO_CV_VOID_SPECIALIZATIONS # define SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING # define SC_BOOST_NO_USING_TEMPLATE # define SC_BOOST_NO_SWPRINTF # define SC_BOOST_NO_TEMPLATE_TEMPLATES # define SC_BOOST_NO_SFINAE # define SC_BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS # define SC_BOOST_NO_IS_ABSTRACT // TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? # if (_MSC_VER > 1200) # define SC_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS # endif #endif #if _MSC_VER < 1310 // 1310 == VC++ 7.1 # define SC_BOOST_NO_SWPRINTF #endif #if _MSC_VER <= 1400 // 1400 == VC++ 8.0 # define SC_BOOST_NO_MEMBER_TEMPLATE_FRIENDS #endif #ifndef _NATIVE_WCHAR_T_DEFINED # define SC_BOOST_NO_INTRINSIC_WCHAR_T #endif #ifdef _WIN32_WCE # define SC_BOOST_NO_THREADEX # define SC_BOOST_NO_GETSYSTEMTIMEASFILETIME #endif // // check for exception handling support: #ifndef _CPPUNWIND # define SC_BOOST_NO_EXCEPTIONS #endif // // __int64 support: // #if (_MSC_VER >= 1200) # define SC_BOOST_HAS_MS_INT64 #endif #if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS) # define SC_BOOST_HAS_LONG_LONG #endif // // disable Win32 API's if compiler extentions are // turned off: // #ifndef _MSC_EXTENSIONS # define SC_BOOST_DISABLE_WIN32 #endif // // all versions support __declspec: // #define SC_BOOST_HAS_DECLSPEC // // prefix and suffix headers: // #ifndef SC_BOOST_ABI_PREFIX # define SC_BOOST_ABI_PREFIX "sysc/packages/boost/config/abi/msvc_prefix.hpp" #endif #ifndef SC_BOOST_ABI_SUFFIX # define SC_BOOST_ABI_SUFFIX "sysc/packages/boost/config/abi/msvc_suffix.hpp" #endif // TODO: // these things are mostly bogus. 1200 means version 12.0 of the compiler. The // artificial versions assigned to them only refer to the versions of some IDE // these compilers have been shipped with, and even that is not all of it. Some // were shipped with freely downloadable SDKs, others as crosscompilers in eVC. // IOW, you can't use these 'versions' in any sensible way. Sorry. # if defined(UNDER_CE) # if _MSC_VER < 1200 // Note: these are so far off, they are not really supported # elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 # define SC_BOOST_COMPILER_VERSION evc4.0 # error unknown CE compiler # else # error unknown CE compiler # endif # else # if _MSC_VER < 1200 // Note: these are so far off, they are not really supported # define SC_BOOST_COMPILER_VERSION 5.0 # elif _MSC_VER < 1300 # define SC_BOOST_COMPILER_VERSION 6.0 # elif _MSC_VER < 1310 # define SC_BOOST_COMPILER_VERSION 7.0 # elif _MSC_VER < 1400 # define SC_BOOST_COMPILER_VERSION 7.1 # elif _MSC_VER < 1500 # define SC_BOOST_COMPILER_VERSION 8.0 # elif _MSC_VER < 1600 # define SC_BOOST_COMPILER_VERSION 9.0 # elif _MSC_VER < 1700 # define SC_BOOST_COMPILER_VERSION 10.0 # elif _MSC_VER < 1800 # define SC_BOOST_COMPILER_VERSION 11.0 # elif _MSC_VER < 1900 # define SC_BOOST_COMPILER_VERSION 12.0 # elif _MSC_VER < 1910 # define SC_BOOST_COMPILER_VERSION 14.0 # elif _MSC_VER < 1920 # define SC_BOOST_COMPILER_VERSION 14.1 # elif _MSC_VER < 1930 # define SC_BOOST_COMPILER_VERSION 14.2 # else # define SC_BOOST_COMPILER_VERSION _MSC_VER # endif # endif #define SC_BOOST_COMPILER "Microsoft Visual C++ version " SC_BOOST_STRINGIZE(SC_BOOST_COMPILER_VERSION) // // versions check: // we don't support Visual C++ prior to version 6: #if _MSC_VER < 1200 #error "Compiler not supported or configured - please reconfigure" #endif // // last known and checked version is 19.16.27032.1 (VC++ 2017, Update 9): #if defined(SC_BOOST_CONFIG_CHECK_MSVC) && (_MSC_VER >= 1920) # if defined(SC_BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # else # pragma message("Unknown compiler version - please run the configure tests and report the results") # endif #endif systemc-2.3.4/src/sysc/packages/boost/config/select_platform_config.hpp0000644000175000017500000000527614342422106026241 0ustar carstencarsten// Boost compiler configuration selection header file // (C) Copyright John Maddock 2001 - 2002. // (C) Copyright Jens Maurer 2001. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. // locate which platform we are on and define SC_BOOST_PLATFORM_CONFIG as needed. // Note that we define the headers to include using "header_name" not // in order to prevent macro expansion within the header // name (for example "linux" is a macro on linux systems). #if defined(linux) || defined(__linux) || defined(__linux__) // linux: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/linux.hpp" #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) // BSD: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/bsd.hpp" #elif defined(sun) || defined(__sun) // solaris: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/solaris.hpp" #elif defined(__sgi) // SGI Irix: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/irix.hpp" #elif defined(__hpux) // hp unix: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/hpux.hpp" #elif defined(__CYGWIN__) // cygwin is not win32: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/cygwin.hpp" #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) // win32: # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/win32.hpp" #elif defined(__BEOS__) // BeOS # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/beos.hpp" #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) // MacOS # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/macos.hpp" #elif defined(__IBMCPP__) || defined(_AIX) // IBM # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/aix.hpp" #elif defined(__amigaos__) // AmigaOS # define SC_BOOST_PLATFORM_CONFIG "sysc/packages/boost/config/platform/amigaos.hpp" #else # if defined(unix) \ || defined(__unix) \ || defined(_XOPEN_SOURCE) \ || defined(_POSIX_SOURCE) // generic unix platform: # ifndef SC_BOOST_HAS_UNISTD_H # define SC_BOOST_HAS_UNISTD_H # endif # include # endif # if defined (SC_BOOST_ASSERT_CONFIG) // this must come last - generate an error if we don't // recognise the platform: # error "Unknown platform - please configure and report the results to boost.org" # endif #endif systemc-2.3.4/src/sysc/packages/boost/config.hpp0000644000175000017500000000421514342422106021521 0ustar carstencarsten// Boost config.hpp configuration header file ------------------------------// // (C) Copyright John Maddock 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/config for most recent version. // Boost config.hpp policy and rationale documentation has been moved to // http://www.boost.org/libs/config // // CAUTION: This file is intended to be completely stable - // DO NOT MODIFY THIS FILE! // #ifndef SC_BOOST_CONFIG_HPP #define SC_BOOST_CONFIG_HPP // if we don't have a user config, then use the default location: #if !defined(SC_BOOST_USER_CONFIG) && !defined(SC_BOOST_NO_USER_CONFIG) # define SC_BOOST_USER_CONFIG #endif // include it first: #ifdef SC_BOOST_USER_CONFIG # include SC_BOOST_USER_CONFIG #endif // if we don't have a compiler config set, try and find one: #if !defined(SC_BOOST_COMPILER_CONFIG) && !defined(SC_BOOST_NO_COMPILER_CONFIG) && !defined(SC_BOOST_NO_CONFIG) # include #endif // if we have a compiler config, include it now: #ifdef SC_BOOST_COMPILER_CONFIG # include SC_BOOST_COMPILER_CONFIG #endif // if we don't have a std library config set, try and find one: #if !defined(SC_BOOST_STDLIB_CONFIG) && !defined(SC_BOOST_NO_STDLIB_CONFIG) && !defined(SC_BOOST_NO_CONFIG) # include #endif // if we have a std library config, include it now: #ifdef SC_BOOST_STDLIB_CONFIG # include SC_BOOST_STDLIB_CONFIG #endif // if we don't have a platform config set, try and find one: #if !defined(SC_BOOST_PLATFORM_CONFIG) && !defined(SC_BOOST_NO_PLATFORM_CONFIG) && !defined(SC_BOOST_NO_CONFIG) # include #endif // if we have a platform config, include it now: #ifdef SC_BOOST_PLATFORM_CONFIG # include SC_BOOST_PLATFORM_CONFIG #endif // get config suffix code: #include #endif // SC_BOOST_CONFIG_HPP systemc-2.3.4/src/sysc/packages/boost/detail/0000755000175000017500000000000014342422106021003 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/detail/workaround.hpp0000644000175000017500000000534314342422106023714 0ustar carstencarsten// Copyright David Abrahams 2002. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef SC_WORKAROUND_DWA2002126_HPP # define SC_WORKAROUND_DWA2002126_HPP // Compiler/library version workaround macro // // Usage: // // #if SC_BOOST_WORKAROUND(SC_BOOST_MSVC, <= 1200) // ... // workaround code here // #endif // // When SC_BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the // first argument must be undefined or expand to a numeric // value. The above expands to: // // (SC_BOOST_MSVC) != 0 && (SC_BOOST_MSVC) <= 1200 // // When used for workarounds that apply to the latest known version // and all earlier versions of a compiler, the following convention // should be observed: // // #if SC_BOOST_WORKAROUND(SC_BOOST_MSVC, SC_BOOST_TESTED_AT(1301)) // // The version number in this case corresponds to the last version in // which the workaround was known to have been required. When // SC_BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro // SC_BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates // the workaround for any version of the compiler. When // SC_BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or // error will be issued if the compiler version exceeds the argument // to SC_BOOST_TESTED_AT(). This can be used to locate workarounds which // may be obsoleted by newer versions. # ifndef SC_BOOST_STRICT_CONFIG # define SC_BOOST_WORKAROUND(symbol, test) \ ((symbol != 0) && (1 % (( (symbol test) ) + 1))) // ^ ^ ^ ^ // The extra level of parenthesis nesting above, along with the // SC_BOOST_OPEN_PAREN indirection below, is required to satisfy the // broken preprocessor in MWCW 8.3 and earlier. // // The basic mechanism works as follows: // (symbol test) + 1 => if (symbol test) then 2 else 1 // 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0 // // The complication with % is for cooperation with SC_BOOST_TESTED_AT(). // When "test" is SC_BOOST_TESTED_AT(x) and // SC_BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined, // // symbol test => if (symbol <= x) then 1 else -1 // (symbol test) + 1 => if (symbol <= x) then 2 else 0 // 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero // # ifdef SC_BOOST_DETECT_OUTDATED_WORKAROUNDS # define SC_BOOST_OPEN_PAREN ( # define SC_BOOST_TESTED_AT(value) > value) ?(-1): SC_BOOST_OPEN_PAREN 1 # else # define SC_BOOST_TESTED_AT(value) != ((value)-(value)) # endif # else # define SC_BOOST_WORKAROUND(symbol, test) 0 # endif #endif // SC_WORKAROUND_DWA2002126_HPP systemc-2.3.4/src/sysc/packages/boost/detail/endian.hpp0000644000175000017500000000545014342422106022756 0ustar carstencarsten// Copyright 2005 Caleb Epstein // Copyright 2006 John Maddock // Copyright 2010 Rene Rivera // Distributed under the Boost Software License, Version 1.0. (See accompany- // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) /* * Copyright (c) 1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. */ /* * Copyright notice reproduced from , from * which this code was originally taken. * * Modified by Caleb Epstein to use with GNU libc and to * defined the SC_BOOST_ENDIAN macro. */ #ifndef SC_BOOST_DETAIL_ENDIAN_HPP #define SC_BOOST_DETAIL_ENDIAN_HPP // GNU libc offers the helpful header which defines // __BYTE_ORDER #if defined (__GLIBC__) # include # if (__BYTE_ORDER == __LITTLE_ENDIAN) # define SC_BOOST_LITTLE_ENDIAN # elif (__BYTE_ORDER == __BIG_ENDIAN) # define SC_BOOST_BIG_ENDIAN # elif (__BYTE_ORDER == __PDP_ENDIAN) # define SC_BOOST_PDP_ENDIAN # else # error Unknown machine endianness detected. # endif # define SC_BOOST_BYTE_ORDER __BYTE_ORDER #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \ defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \ defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN) # define SC_BOOST_BIG_ENDIAN # define SC_BOOST_BYTE_ORDER 4321 #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \ defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) || \ defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN) # define SC_BOOST_LITTLE_ENDIAN # define SC_BOOST_BYTE_ORDER 1234 #elif defined(__sparc) || defined(__sparc__) \ || defined(_POWER) || defined(__powerpc__) \ || defined(__ppc__) || defined(__ppc64__) || defined(__hpux) || defined(__hppa) \ || defined(_MIPSEB) || defined(_POWER) \ || defined(__s390__) # define SC_BOOST_BIG_ENDIAN # define SC_BOOST_BYTE_ORDER 4321 #elif defined(__i386__) || defined(__alpha__) \ || defined(__ia64) || defined(__ia64__) \ || defined(_M_IX86) || defined(_M_IA64) \ || defined(_M_ALPHA) || defined(__amd64) \ || defined(__amd64__) || defined(_M_AMD64) \ || defined(__x86_64) || defined(__x86_64__) \ || defined(_M_X64) || defined(__bfin__) # define SC_BOOST_LITTLE_ENDIAN # define SC_BOOST_BYTE_ORDER 1234 #else # error The file boost/detail/endian.hpp needs to be set up for your CPU type. #endif #endif systemc-2.3.4/src/sysc/packages/boost/bind.hpp0000644000175000017500000014464514342422106021204 0ustar carstencarsten#ifndef SC_BOOST_BIND_HPP_INCLUDED #define SC_BOOST_BIND_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif // // bind.hpp - binds function objects to arguments // // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. // Copyright (c) 2001 David Abrahams // Copyright (c) 2005 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/bind.html for documentation. // #include #include #include #include #include #include // Borland-specific bug, visit_each() silently fails to produce code #if defined(__BORLANDC__) # define SC_BOOST_BIND_VISIT_EACH sc_boost::visit_each #else # define SC_BOOST_BIND_VISIT_EACH visit_each #endif #ifdef SC_BOOST_MSVC # pragma warning(push) # pragma warning(disable: 4512) // assignment operator could not be generated #endif namespace sc_boost { namespace _bi // implementation details { // result_traits template struct result_traits { typedef R type; }; #if !defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING) struct unspecified {}; template struct result_traits { typedef typename F::result_type type; }; template struct result_traits< unspecified, reference_wrapper > { typedef typename F::result_type type; }; #endif // ref_compare template bool ref_compare(T const & a, T const & b, long) { return a == b; } template bool ref_compare(reference_wrapper const & a, reference_wrapper const & b, int) { return a.get_pointer() == b.get_pointer(); } // bind_t forward declaration for listN template class bind_t; // value template class value { public: value(T const & t): t_(t) {} T & get() { return t_; } T const & get() const { return t_; } bool operator==(value const & rhs) const { return t_ == rhs.t_; } private: T t_; }; // type template class type {}; // unwrap template inline F & unwrap(F * f, long) { return *f; } template inline F & unwrap(reference_wrapper * f, int) { return f->get(); } template inline F & unwrap(reference_wrapper const * f, int) { return f->get(); } #if !( defined(__MWERKS__) && SC_BOOST_WORKAROUND(__MWERKS__, <= 0x3004) ) template inline _mfi::dm unwrap(R T::* * pm, int) { return _mfi::dm(*pm); } #if !SC_BOOST_WORKAROUND(__IBMCPP__, SC_BOOST_TESTED_AT(600)) // IBM/VisualAge 6.0 is not able to handle this overload. template inline _mfi::dm unwrap(R T::* const * pm, int) { return _mfi::dm(*pm); } #endif #endif // listN class list0 { public: list0() {} template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A &, long) { return unwrap(&f, 0)(); } template R operator()(type, F const & f, A &, long) const { return unwrap(&f, 0)(); } template void operator()(type, F & f, A &, int) { unwrap(&f, 0)(); } template void operator()(type, F const & f, A &, int) const { unwrap(&f, 0)(); } template void accept(V &) const { } bool operator==(list0 const &) const { return true; } }; template class list1 { public: explicit list1(A1 a1): a1_(a1) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } template T & operator[] ( _bi::value & v ) const { return v.get(); } template T const & operator[] ( _bi::value const & v ) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); } bool operator==(list1 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0); } private: A1 a1_; }; template class list2 { public: list2(A1 a1, A2 a2): a1_(a1), a2_(a2) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); } bool operator==(list2 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0); } private: A1 a1_; A2 a2_; }; template class list3 { public: list3(A1 a1, A2 a2, A3 a3): a1_(a1), a2_(a2), a3_(a3) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); } bool operator==(list3 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0); } private: A1 a1_; A2 a2_; A3 a3_; }; template class list4 { public: list4(A1 a1, A2 a2, A3 a3, A4 a4): a1_(a1), a2_(a2), a3_(a3), a4_(a4) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); } bool operator==(list4 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; }; template class list5 { public: list5(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A5 operator[] (sc_boost::arg<5>) const { return a5_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } A5 operator[] (sc_boost::arg<5> (*) ()) const { return a5_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); SC_BOOST_BIND_VISIT_EACH(v, a5_, 0); } bool operator==(list5 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0) && ref_compare(a5_, rhs.a5_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; A5 a5_; }; template class list6 { public: list6(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A5 operator[] (sc_boost::arg<5>) const { return a5_; } A6 operator[] (sc_boost::arg<6>) const { return a6_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } A5 operator[] (sc_boost::arg<5> (*) ()) const { return a5_; } A6 operator[] (sc_boost::arg<6> (*) ()) const { return a6_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); SC_BOOST_BIND_VISIT_EACH(v, a5_, 0); SC_BOOST_BIND_VISIT_EACH(v, a6_, 0); } bool operator==(list6 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0) && ref_compare(a5_, rhs.a5_, 0) && ref_compare(a6_, rhs.a6_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; A5 a5_; A6 a6_; }; template class list7 { public: list7(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A5 operator[] (sc_boost::arg<5>) const { return a5_; } A6 operator[] (sc_boost::arg<6>) const { return a6_; } A7 operator[] (sc_boost::arg<7>) const { return a7_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } A5 operator[] (sc_boost::arg<5> (*) ()) const { return a5_; } A6 operator[] (sc_boost::arg<6> (*) ()) const { return a6_; } A7 operator[] (sc_boost::arg<7> (*) ()) const { return a7_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); SC_BOOST_BIND_VISIT_EACH(v, a5_, 0); SC_BOOST_BIND_VISIT_EACH(v, a6_, 0); SC_BOOST_BIND_VISIT_EACH(v, a7_, 0); } bool operator==(list7 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0) && ref_compare(a5_, rhs.a5_, 0) && ref_compare(a6_, rhs.a6_, 0) && ref_compare(a7_, rhs.a7_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; A5 a5_; A6 a6_; A7 a7_; }; template class list8 { public: list8(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A5 operator[] (sc_boost::arg<5>) const { return a5_; } A6 operator[] (sc_boost::arg<6>) const { return a6_; } A7 operator[] (sc_boost::arg<7>) const { return a7_; } A8 operator[] (sc_boost::arg<8>) const { return a8_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } A5 operator[] (sc_boost::arg<5> (*) ()) const { return a5_; } A6 operator[] (sc_boost::arg<6> (*) ()) const { return a6_; } A7 operator[] (sc_boost::arg<7> (*) ()) const { return a7_; } A8 operator[] (sc_boost::arg<8> (*) ()) const { return a8_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); SC_BOOST_BIND_VISIT_EACH(v, a5_, 0); SC_BOOST_BIND_VISIT_EACH(v, a6_, 0); SC_BOOST_BIND_VISIT_EACH(v, a7_, 0); SC_BOOST_BIND_VISIT_EACH(v, a8_, 0); } bool operator==(list8 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0) && ref_compare(a5_, rhs.a5_, 0) && ref_compare(a6_, rhs.a6_, 0) && ref_compare(a7_, rhs.a7_, 0) && ref_compare(a8_, rhs.a8_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; A5 a5_; A6 a6_; A7 a7_; A8 a8_; }; template class list9 { public: list9(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9) {} A1 operator[] (sc_boost::arg<1>) const { return a1_; } A2 operator[] (sc_boost::arg<2>) const { return a2_; } A3 operator[] (sc_boost::arg<3>) const { return a3_; } A4 operator[] (sc_boost::arg<4>) const { return a4_; } A5 operator[] (sc_boost::arg<5>) const { return a5_; } A6 operator[] (sc_boost::arg<6>) const { return a6_; } A7 operator[] (sc_boost::arg<7>) const { return a7_; } A8 operator[] (sc_boost::arg<8>) const { return a8_; } A9 operator[] (sc_boost::arg<9>) const { return a9_; } A1 operator[] (sc_boost::arg<1> (*) ()) const { return a1_; } A2 operator[] (sc_boost::arg<2> (*) ()) const { return a2_; } A3 operator[] (sc_boost::arg<3> (*) ()) const { return a3_; } A4 operator[] (sc_boost::arg<4> (*) ()) const { return a4_; } A5 operator[] (sc_boost::arg<5> (*) ()) const { return a5_; } A6 operator[] (sc_boost::arg<6> (*) ()) const { return a6_; } A7 operator[] (sc_boost::arg<7> (*) ()) const { return a7_; } A8 operator[] (sc_boost::arg<8> (*) ()) const { return a8_; } A9 operator[] (sc_boost::arg<9> (*) ()) const { return a9_; } template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const { return v.get(); } template T & operator[] (reference_wrapper const & v) const { return v.get(); } template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } template R operator()(type, F & f, A & a, long) { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]); } template R operator()(type, F const & f, A & a, long) const { return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]); } template void operator()(type, F & f, A & a, int) { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]); } template void operator()(type, F const & f, A & a, int) const { unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]); } template void accept(V & v) const { SC_BOOST_BIND_VISIT_EACH(v, a1_, 0); SC_BOOST_BIND_VISIT_EACH(v, a2_, 0); SC_BOOST_BIND_VISIT_EACH(v, a3_, 0); SC_BOOST_BIND_VISIT_EACH(v, a4_, 0); SC_BOOST_BIND_VISIT_EACH(v, a5_, 0); SC_BOOST_BIND_VISIT_EACH(v, a6_, 0); SC_BOOST_BIND_VISIT_EACH(v, a7_, 0); SC_BOOST_BIND_VISIT_EACH(v, a8_, 0); SC_BOOST_BIND_VISIT_EACH(v, a9_, 0); } bool operator==(list9 const & rhs) const { return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0) && ref_compare(a4_, rhs.a4_, 0) && ref_compare(a5_, rhs.a5_, 0) && ref_compare(a6_, rhs.a6_, 0) && ref_compare(a7_, rhs.a7_, 0) && ref_compare(a8_, rhs.a8_, 0) && ref_compare(a9_, rhs.a9_, 0); } private: A1 a1_; A2 a2_; A3 a3_; A4 a4_; A5 a5_; A6 a6_; A7 a7_; A8 a8_; A9 a9_; }; // bind_t #ifndef SC_BOOST_NO_VOID_RETURNS template class bind_t { public: typedef bind_t this_type; bind_t(F f, L const & l): f_(f), l_(l) {} #define SC_BOOST_BIND_RETURN return #include #undef SC_BOOST_BIND_RETURN }; #else template struct bind_t_generator { template class implementation { public: typedef implementation this_type; implementation(F f, L const & l): f_(f), l_(l) {} #define SC_BOOST_BIND_RETURN return #include #undef SC_BOOST_BIND_RETURN }; }; template<> struct bind_t_generator { template class implementation { private: typedef void R; public: typedef implementation this_type; implementation(F f, L const & l): f_(f), l_(l) {} #define SC_BOOST_BIND_RETURN #include #undef SC_BOOST_BIND_RETURN }; }; template class bind_t: public bind_t_generator::SC_BOOST_NESTED_TEMPLATE implementation { public: bind_t(F f, L const & l): bind_t_generator::SC_BOOST_NESTED_TEMPLATE implementation(f, l) {} }; #endif // function_equal #ifndef SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP // put overloads in _bi, rely on ADL # ifndef SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING template bool function_equal( bind_t const & a, bind_t const & b ) { return a.compare(b); } # else template bool function_equal_impl( bind_t const & a, bind_t const & b, int ) { return a.compare(b); } # endif // #ifndef SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING #else // SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP // put overloads in boost } // namespace _bi # ifndef SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING template bool function_equal( _bi::bind_t const & a, _bi::bind_t const & b ) { return a.compare(b); } # else template bool function_equal_impl( _bi::bind_t const & a, _bi::bind_t const & b, int ) { return a.compare(b); } # endif // #ifndef SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING namespace _bi { #endif // SC_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP // add_value #if !defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x530)) template struct add_value { typedef _bi::value type; }; template struct add_value< value > { typedef _bi::value type; }; template struct add_value< reference_wrapper > { typedef reference_wrapper type; }; template struct add_value< arg > { typedef sc_boost::arg type; }; template struct add_value< arg (*) () > { typedef sc_boost::arg (*type) (); }; template struct add_value< bind_t > { typedef bind_t type; }; #else template struct _avt_0; template<> struct _avt_0<1> { template struct inner { typedef T type; }; }; template<> struct _avt_0<2> { template struct inner { typedef value type; }; }; typedef char (&_avt_r1) [1]; typedef char (&_avt_r2) [2]; template _avt_r1 _avt_f(value); template _avt_r1 _avt_f(reference_wrapper); template _avt_r1 _avt_f(arg); template _avt_r1 _avt_f(arg (*) ()); template _avt_r1 _avt_f(bind_t); _avt_r2 _avt_f(...); template struct add_value { static T t(); typedef typename _avt_0::template inner::type type; }; #endif // list_av_N template struct list_av_1 { typedef typename add_value::type B1; typedef list1 type; }; template struct list_av_2 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef list2 type; }; template struct list_av_3 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef list3 type; }; template struct list_av_4 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef list4 type; }; template struct list_av_5 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef typename add_value::type B5; typedef list5 type; }; template struct list_av_6 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef typename add_value::type B5; typedef typename add_value::type B6; typedef list6 type; }; template struct list_av_7 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef typename add_value::type B5; typedef typename add_value::type B6; typedef typename add_value::type B7; typedef list7 type; }; template struct list_av_8 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef typename add_value::type B5; typedef typename add_value::type B6; typedef typename add_value::type B7; typedef typename add_value::type B8; typedef list8 type; }; template struct list_av_9 { typedef typename add_value::type B1; typedef typename add_value::type B2; typedef typename add_value::type B3; typedef typename add_value::type B4; typedef typename add_value::type B5; typedef typename add_value::type B6; typedef typename add_value::type B7; typedef typename add_value::type B8; typedef typename add_value::type B9; typedef list9 type; }; // operator! struct logical_not { template bool operator()(V const & v) const { return !v; } }; template bind_t< bool, logical_not, list1< bind_t > > operator! (bind_t const & f) { typedef list1< bind_t > list_type; return bind_t ( logical_not(), list_type(f) ); } // relational operators #define SC_BOOST_BIND_OPERATOR( op, name ) \ \ struct name \ { \ template bool operator()(V const & v, W const & w) const { return v op w; } \ }; \ \ template \ bind_t< bool, name, list2< bind_t, typename add_value::type > > \ operator op (bind_t const & f, A2 a2) \ { \ typedef typename add_value::type B2; \ typedef list2< bind_t, B2> list_type; \ return bind_t ( name(), list_type(f, a2) ); \ } SC_BOOST_BIND_OPERATOR( ==, equal ) SC_BOOST_BIND_OPERATOR( !=, not_equal ) SC_BOOST_BIND_OPERATOR( <, less ) SC_BOOST_BIND_OPERATOR( <=, less_equal ) SC_BOOST_BIND_OPERATOR( >, greater ) SC_BOOST_BIND_OPERATOR( >=, greater_equal ) #undef SC_BOOST_BIND_OPERATOR #if defined(__GNUC__) && SC_BOOST_WORKAROUND(__GNUC__, < 3) // resolve ambiguity with rel_ops #define SC_BOOST_BIND_OPERATOR( op, name ) \ \ template \ bind_t< bool, name, list2< bind_t, bind_t > > \ operator op (bind_t const & f, bind_t const & g) \ { \ typedef list2< bind_t, bind_t > list_type; \ return bind_t ( name(), list_type(f, g) ); \ } SC_BOOST_BIND_OPERATOR( !=, not_equal ) SC_BOOST_BIND_OPERATOR( <=, less_equal ) SC_BOOST_BIND_OPERATOR( >, greater ) SC_BOOST_BIND_OPERATOR( >=, greater_equal ) #endif } // namespace _bi // visit_each template void visit_each(V & v, _bi::value const & t, int) { SC_BOOST_BIND_VISIT_EACH(v, t.get(), 0); } template void visit_each(V & v, _bi::bind_t const & t, int) { t.accept(v); } // bind #ifndef SC_BOOST_BIND #define SC_BOOST_BIND bind #endif // generic function objects template _bi::bind_t SC_BOOST_BIND(F f) { typedef _bi::list0 list_type; return _bi::bind_t (f, list_type()); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1) { typedef typename _bi::list_av_1::type list_type; return _bi::bind_t (f, list_type(a1)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2) { typedef typename _bi::list_av_2::type list_type; return _bi::bind_t (f, list_type(a1, a2)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) { typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) { typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template _bi::bind_t::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } // generic function objects, alternative syntax template _bi::bind_t SC_BOOST_BIND(sc_boost::type, F f) { typedef _bi::list0 list_type; return _bi::bind_t (f, list_type()); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1) { typedef typename _bi::list_av_1::type list_type; return _bi::bind_t (f, list_type(a1)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2) { typedef typename _bi::list_av_2::type list_type; return _bi::bind_t (f, list_type(a1, a2)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3) { typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4) { typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template _bi::bind_t::type> SC_BOOST_BIND(sc_boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } #if !defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING) // adaptable function objects template _bi::bind_t<_bi::unspecified, F, _bi::list0> SC_BOOST_BIND(F f) { typedef _bi::list0 list_type; return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type()); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1::type> SC_BOOST_BIND(F f, A1 a1) { typedef typename _bi::list_av_1::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2::type> SC_BOOST_BIND(F f, A1 a1, A2 a2) { typedef typename _bi::list_av_2::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) { typedef typename _bi::list_av_3::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) { typedef typename _bi::list_av_4::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef typename _bi::list_av_5::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef typename _bi::list_av_6::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef typename _bi::list_av_7::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef typename _bi::list_av_8::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9::type> SC_BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef typename _bi::list_av_9::type list_type; return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } #endif // !defined(SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(SC_BOOST_NO_FUNCTION_TEMPLATE_ORDERING) // function pointers #define SC_BOOST_BIND_CC #define SC_BOOST_BIND_ST #include #undef SC_BOOST_BIND_CC #undef SC_BOOST_BIND_ST #ifdef SC_BOOST_BIND_ENABLE_STDCALL #define SC_BOOST_BIND_CC __stdcall #define SC_BOOST_BIND_ST #include #undef SC_BOOST_BIND_CC #undef SC_BOOST_BIND_ST #endif #ifdef SC_BOOST_BIND_ENABLE_FASTCALL #define SC_BOOST_BIND_CC __fastcall #define SC_BOOST_BIND_ST #include #undef SC_BOOST_BIND_CC #undef SC_BOOST_BIND_ST #endif #ifdef SC_BOOST_BIND_ENABLE_PASCAL #define SC_BOOST_BIND_ST pascal #define SC_BOOST_BIND_CC #include #undef SC_BOOST_BIND_ST #undef SC_BOOST_BIND_CC #endif // member function pointers #define SC_BOOST_BIND_MF_NAME(X) X #define SC_BOOST_BIND_MF_CC #include #undef SC_BOOST_BIND_MF_NAME #undef SC_BOOST_BIND_MF_CC #ifdef SC_BOOST_MEM_FN_ENABLE_CDECL #define SC_BOOST_BIND_MF_NAME(X) X##_cdecl #define SC_BOOST_BIND_MF_CC __cdecl #include #undef SC_BOOST_BIND_MF_NAME #undef SC_BOOST_BIND_MF_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_STDCALL #define SC_BOOST_BIND_MF_NAME(X) X##_stdcall #define SC_BOOST_BIND_MF_CC __stdcall #include #undef SC_BOOST_BIND_MF_NAME #undef SC_BOOST_BIND_MF_CC #endif #ifdef SC_BOOST_MEM_FN_ENABLE_FASTCALL #define SC_BOOST_BIND_MF_NAME(X) X##_fastcall #define SC_BOOST_BIND_MF_CC __fastcall #include #undef SC_BOOST_BIND_MF_NAME #undef SC_BOOST_BIND_MF_CC #endif // data member pointers /* #if defined(__GNUC__) && (__GNUC__ == 2) namespace _bi { template struct add_cref { typedef T const & type; }; template struct add_cref< T & > { typedef T const & type; }; template<> struct add_cref { typedef void type; }; } // namespace _bi template _bi::bind_t< typename _bi::add_cref::type, _mfi::dm, typename _bi::list_av_1::type > SC_BOOST_BIND(R T::*f, A1 a1) { typedef _mfi::dm F; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t::type, F, list_type>(F(f), list_type(a1)); } #else template _bi::bind_t< R const &, _mfi::dm, typename _bi::list_av_1::type > SC_BOOST_BIND(R T::*f, A1 a1) { typedef _mfi::dm F; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t(F(f), list_type(a1)); } #endif */ template _bi::bind_t< R, _mfi::dm, typename _bi::list_av_1::type > SC_BOOST_BIND(R T::*f, A1 a1) { typedef _mfi::dm F; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t( F(f), list_type(a1) ); } } // sc_namespace sc_boost #ifndef SC_BOOST_BIND_NO_PLACEHOLDERS # include #endif #ifdef SC_BOOST_MSVC # pragma warning(default: 4512) // assignment operator could not be generated # pragma warning(pop) #endif #endif // #ifndef SC_BOOST_BIND_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/type.hpp0000644000175000017500000000075514342422106021242 0ustar carstencarsten// (C) Copyright David Abrahams 2001. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef SC_BOOST_TYPE_DWA20010120_HPP # define SC_BOOST_TYPE_DWA20010120_HPP namespace sc_boost { // Just a simple "type envelope". Useful in various contexts, mostly to work // around some MSVC deficiencies. template struct type {}; } #endif // SC_BOOST_TYPE_DWA20010120_HPP systemc-2.3.4/src/sysc/packages/boost/ref.hpp0000644000175000017500000000726014342422106021033 0ustar carstencarsten#ifndef SC_BOOST_REF_HPP_INCLUDED #define SC_BOOST_REF_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include // // ref.hpp - ref/cref, useful helper functions // // Copyright (C) 1999, 2000 Jaakko Jrvi (jaakko.jarvi@cs.utu.fi) // Copyright (C) 2001, 2002 Peter Dimov // Copyright (C) 2002 David Abrahams // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/bind/ref.html for documentation. // namespace sc_boost { template class reference_wrapper { public: typedef T type; #if defined(SC_BOOST_MSVC) && (SC_BOOST_MSVC < 1300) explicit reference_wrapper(T& t): t_(&t) {} #else explicit reference_wrapper(T& t): t_(sc_boost::addressof(t)) {} #endif operator T& () const { return *t_; } T& get() const { return *t_; } T* get_pointer() const { return t_; } private: T* t_; }; # if defined(__BORLANDC__) && (__BORLANDC__ <= 0x570) # define SC_BOOST_REF_CONST # else # define SC_BOOST_REF_CONST const # endif template inline reference_wrapper SC_BOOST_REF_CONST ref(T & t) { return reference_wrapper(t); } template inline reference_wrapper SC_BOOST_REF_CONST cref(T const & t) { return reference_wrapper(t); } # undef SC_BOOST_REF_CONST # ifndef SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template class is_reference_wrapper : public mpl::false_ { }; template class unwrap_reference { public: typedef T type; }; # define SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \ template \ class is_reference_wrapper< X > \ : public mpl::true_ \ { \ }; \ \ template \ class unwrap_reference< X > \ { \ public: \ typedef T type; \ }; \ /**/ SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper) #if !defined(SC_BOOST_NO_CV_SPECIALIZATIONS) SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper const) SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper volatile) SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper const volatile) #endif # undef SC_AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF # else // no partial specialization } // namespace sc_boost #include namespace sc_boost { namespace detail { typedef char (&yes_reference_wrapper_t)[1]; typedef char (&no_reference_wrapper_t)[2]; no_reference_wrapper_t is_reference_wrapper_test(...); template yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper >); template struct reference_unwrapper { template struct apply { typedef T type; }; }; template<> struct reference_unwrapper { template struct apply { typedef typename T::type type; }; }; } template class is_reference_wrapper { public: SC_BOOST_STATIC_CONSTANT( bool, value = ( sizeof(detail::is_reference_wrapper_test(type())) == sizeof(detail::yes_reference_wrapper_t))); typedef ::sc_boost::mpl::bool_ type; }; template class unwrap_reference : public detail::reference_unwrapper< is_reference_wrapper::value >::template apply {}; # endif // SC_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION } // namespace sc_boost #endif // #ifndef SC_BOOST_REF_HPP_INCLUDED systemc-2.3.4/src/sysc/packages/boost/utility/0000755000175000017500000000000014342422106021244 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/boost/utility/string_view_fwd.hpp0000644000175000017500000000254014342422106025156 0ustar carstencarsten/* Copyright (c) Marshall Clow 2012-2012. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) For more information, see http://www.boost.org Based on the StringRef implementation in LLVM (http://llvm.org) and N3422 by Jeffrey Yasskin http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html Updated July 2015 to reflect the Library Fundamentals TS http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html */ #ifndef SC_BOOST_STRING_VIEW_FWD_HPP #define SC_BOOST_STRING_VIEW_FWD_HPP #include #include // #define SC_BOOST_NO_CXX11_CHAR16_T #define SC_BOOST_NO_CXX11_CHAR32_T // namespace sc_boost { template > class basic_string_view; typedef basic_string_view > string_view; typedef basic_string_view > wstring_view; #ifndef SC_BOOST_NO_CXX11_CHAR16_T typedef basic_string_view > u16string_view; #endif #ifndef SC_BOOST_NO_CXX11_CHAR32_T typedef basic_string_view > u32string_view; #endif } #endif systemc-2.3.4/src/sysc/packages/boost/utility/addressof.hpp0000644000175000017500000000272614342422106023736 0ustar carstencarsten// Copyright (C) 2002 Brad King (brad.king@kitware.com) // Douglas Gregor (gregod@cs.rpi.edu) // Peter Dimov // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // For more information, see http://www.boost.org #ifndef SC_BOOST_UTILITY_ADDRESSOF_HPP # define SC_BOOST_UTILITY_ADDRESSOF_HPP # include # include namespace sc_boost { // Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov) // VC7 strips const from nested classes unless we add indirection here # if SC_BOOST_WORKAROUND(SC_BOOST_MSVC, == 1300) template struct _addp { typedef T * type; }; template typename _addp::type # else template T* # endif addressof(T& v) { return reinterpret_cast( &const_cast(reinterpret_cast(v))); } // Borland doesn't like casting an array reference to a char reference // but these overloads work around the problem. # if SC_BOOST_WORKAROUND(__BORLANDC__, SC_BOOST_TESTED_AT(0x564)) template T (*addressof(T (&t)[N]))[N] { return reinterpret_cast(&t); } template const T (*addressof(const T (&t)[N]))[N] { return reinterpret_cast(&t); } # endif } #endif // SC_BOOST_UTILITY_ADDRESSOF_HPP systemc-2.3.4/src/sysc/packages/boost/utility/string_view.hpp0000644000175000017500000007456014342422106024331 0ustar carstencarsten/* Copyright (c) Marshall Clow 2012-2015. Copyright Beman Dawes 2015 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) For more information, see http://www.boost.org Based on the StringRef implementation in LLVM (http://llvm.org) and N3422 by Jeffrey Yasskin http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html Updated July 2015 to reflect the Library Fundamentals TS http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html */ #ifndef SC_BOOST_STRING_VIEW_HPP #define SC_BOOST_STRING_VIEW_HPP #include //LWG: #include #include //LWG: #include #include #include #include #include #include #include #include // #define SC_BOOST_NO_CXX11_DEFAULTED_FUNCTIONS #define SC_BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #define SC_BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #ifndef SC_BOOST_CONSTEXPR #define SC_BOOST_CONSTEXPR #endif #ifndef SC_BOOST_CXX14_CONSTEXPR #define SC_BOOST_CXX14_CONSTEXPR #endif #ifndef SC_BOOST_CONSTEXPR_OR_CONST #define SC_BOOST_CONSTEXPR_OR_CONST const #endif #ifndef SC_BOOST_NOEXCEPT #define SC_BOOST_NOEXCEPT #endif #ifndef SC_BOOST_THROW_EXCEPTION #define SC_BOOST_THROW_EXCEPTION(what) \ throw what #endif // #if defined(SC_BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || (defined(SC_BOOST_GCC) && ((SC_BOOST_GCC+0) / 100) <= 406) // GCC 4.6 cannot handle a defaulted function with noexcept specifier #define SC_BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS #endif namespace sc_boost { namespace detail { // A helper functor because sometimes we don't have lambdas template class string_view_traits_eq { public: string_view_traits_eq ( charT ch ) : ch_(ch) {} bool operator()( charT val ) const { return traits::eq (ch_, val); } charT ch_; }; } template // traits defaulted in string_view_fwd.hpp class basic_string_view { public: // types typedef traits traits_type; typedef charT value_type; typedef charT* pointer; typedef const charT* const_pointer; typedef charT& reference; typedef const charT& const_reference; typedef const_pointer const_iterator; // impl-defined typedef const_iterator iterator; typedef std::reverse_iterator const_reverse_iterator; typedef const_reverse_iterator reverse_iterator; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; static SC_BOOST_CONSTEXPR_OR_CONST size_type npos = size_type(-1); // construct/copy SC_BOOST_CONSTEXPR basic_string_view() SC_BOOST_NOEXCEPT : ptr_(NULL), len_(0) {} // by defaulting these functions, basic_string_ref becomes // trivially copy/move constructible. SC_BOOST_CONSTEXPR basic_string_view(const basic_string_view &rhs) SC_BOOST_NOEXCEPT #ifndef SC_BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS = default; #else : ptr_(rhs.ptr_), len_(rhs.len_) {} #endif basic_string_view& operator=(const basic_string_view &rhs) SC_BOOST_NOEXCEPT #ifndef SC_BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS = default; #else { ptr_ = rhs.ptr_; len_ = rhs.len_; return *this; } #endif template basic_string_view(const std::basic_string& str) SC_BOOST_NOEXCEPT : ptr_(str.data()), len_(str.length()) {} SC_BOOST_CONSTEXPR basic_string_view(const charT* str) : ptr_(str), len_(traits::length(str)) {} SC_BOOST_CONSTEXPR basic_string_view(const charT* str, size_type len) : ptr_(str), len_(len) {} // iterators SC_BOOST_CONSTEXPR const_iterator begin() const SC_BOOST_NOEXCEPT { return ptr_; } SC_BOOST_CONSTEXPR const_iterator cbegin() const SC_BOOST_NOEXCEPT { return ptr_; } SC_BOOST_CONSTEXPR const_iterator end() const SC_BOOST_NOEXCEPT { return ptr_ + len_; } SC_BOOST_CONSTEXPR const_iterator cend() const SC_BOOST_NOEXCEPT { return ptr_ + len_; } const_reverse_iterator rbegin() const SC_BOOST_NOEXCEPT { return const_reverse_iterator(end()); } const_reverse_iterator crbegin() const SC_BOOST_NOEXCEPT { return const_reverse_iterator(end()); } const_reverse_iterator rend() const SC_BOOST_NOEXCEPT { return const_reverse_iterator(begin()); } const_reverse_iterator crend() const SC_BOOST_NOEXCEPT { return const_reverse_iterator(begin()); } // capacity SC_BOOST_CONSTEXPR size_type size() const SC_BOOST_NOEXCEPT { return len_; } SC_BOOST_CONSTEXPR size_type length() const SC_BOOST_NOEXCEPT { return len_; } SC_BOOST_CONSTEXPR size_type max_size() const SC_BOOST_NOEXCEPT { return len_; } SC_BOOST_CONSTEXPR bool empty() const SC_BOOST_NOEXCEPT { return len_ == 0; } // element access SC_BOOST_CONSTEXPR const_reference operator[](size_type pos) const SC_BOOST_NOEXCEPT { return ptr_[pos]; } SC_BOOST_CONSTEXPR const_reference at(size_t pos) const { return pos >= len_ ? SC_BOOST_THROW_EXCEPTION(std::out_of_range("boost::string_view::at")) : ptr_[pos]; // if ( pos >= len_ ) // SC_BOOST_THROW_EXCEPTION( std::out_of_range ( "boost::string_view::at" ) ); // return ptr_[pos]; } SC_BOOST_CONSTEXPR const_reference front() const { return ptr_[0]; } SC_BOOST_CONSTEXPR const_reference back() const { return ptr_[len_-1]; } SC_BOOST_CONSTEXPR const_pointer data() const SC_BOOST_NOEXCEPT { return ptr_; } // modifiers void clear() SC_BOOST_NOEXCEPT { len_ = 0; } // Boost extension SC_BOOST_CXX14_CONSTEXPR void remove_prefix(size_type n) { if ( n > len_ ) n = len_; ptr_ += n; len_ -= n; } SC_BOOST_CXX14_CONSTEXPR void remove_suffix(size_type n) { if ( n > len_ ) n = len_; len_ -= n; } SC_BOOST_CXX14_CONSTEXPR void swap(basic_string_view& s) SC_BOOST_NOEXCEPT { std::swap(ptr_, s.ptr_); std::swap(len_, s.len_); } // basic_string_view string operations #ifndef SC_BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS template explicit operator std::basic_string() const { return std::basic_string(begin(), end()); } #endif #ifndef SC_BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS template > std::basic_string to_string(const Allocator& a = Allocator()) const { return std::basic_string(begin(), end(), a); } #else std::basic_string to_string() const { return std::basic_string(begin(), end()); } template std::basic_string to_string(const Allocator& a) const { return std::basic_string(begin(), end(), a); } #endif size_type copy(charT* s, size_type n, size_type pos=0) const { if (pos > size()) SC_BOOST_THROW_EXCEPTION(std::out_of_range("string_view::copy" )); size_type rlen = (std::min)(n, len_ - pos); // use std::copy(begin() + pos, begin() + pos + rlen, s) rather than // std::copy_n(begin() + pos, rlen, s) to support pre-C++11 standard libraries std::copy(begin() + pos, begin() + pos + rlen, s); return rlen; } SC_BOOST_CXX14_CONSTEXPR basic_string_view substr(size_type pos, size_type n=npos) const { if ( pos > size()) SC_BOOST_THROW_EXCEPTION( std::out_of_range ( "string_view::substr" ) ); if (n == npos || pos + n > size()) n = size () - pos; return basic_string_view(data() + pos, n); } SC_BOOST_CXX14_CONSTEXPR int compare(basic_string_view x) const SC_BOOST_NOEXCEPT { const int cmp = traits::compare(ptr_, x.ptr_, (std::min)(len_, x.len_)); return cmp != 0 ? cmp : (len_ == x.len_ ? 0 : len_ < x.len_ ? -1 : 1); } SC_BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, basic_string_view x) const SC_BOOST_NOEXCEPT { return substr(pos1, n1).compare(x); } SC_BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, basic_string_view x, size_type pos2, size_type n2) const { return substr(pos1, n1).compare(x.substr(pos2, n2)); } SC_BOOST_CXX14_CONSTEXPR int compare(const charT* x) const { return compare(basic_string_view(x)); } SC_BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, const charT* x) const { return substr(pos1, n1).compare(basic_string_view(x)); } SC_BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, const charT* x, size_type n2) const { return substr(pos1, n1).compare(basic_string_view(x, n2)); } // Searches SC_BOOST_CONSTEXPR bool starts_with(charT c) const SC_BOOST_NOEXCEPT { // Boost extension return !empty() && traits::eq(c, front()); } SC_BOOST_CONSTEXPR bool starts_with(basic_string_view x) const SC_BOOST_NOEXCEPT { // Boost extension return len_ >= x.len_ && traits::compare(ptr_, x.ptr_, x.len_) == 0; } SC_BOOST_CONSTEXPR bool ends_with(charT c) const SC_BOOST_NOEXCEPT { // Boost extension return !empty() && traits::eq(c, back()); } SC_BOOST_CONSTEXPR bool ends_with(basic_string_view x) const SC_BOOST_NOEXCEPT { // Boost extension return len_ >= x.len_ && traits::compare(ptr_ + len_ - x.len_, x.ptr_, x.len_) == 0; } // find SC_BOOST_CXX14_CONSTEXPR size_type find(basic_string_view s, size_type pos = 0) const SC_BOOST_NOEXCEPT { if (pos > size()) return npos; if (s.empty()) return pos; const_iterator iter = std::search(this->cbegin() + pos, this->cend(), s.cbegin (), s.cend (), traits::eq); return iter == this->cend () ? npos : std::distance(this->cbegin (), iter); } SC_BOOST_CXX14_CONSTEXPR size_type find(charT c, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return find(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find(const charT* s, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find(basic_string_view(s), pos); } // rfind SC_BOOST_CXX14_CONSTEXPR size_type rfind(basic_string_view s, size_type pos = npos) const SC_BOOST_NOEXCEPT { if (len_ < s.len_) return npos; if (pos > len_ - s.len_) pos = len_ - s.len_; if (s.len_ == 0u) // an empty string is always found return pos; for (const charT* cur = ptr_ + pos; ; --cur) { if (traits::compare(cur, s.ptr_, s.len_) == 0) return cur - ptr_; if (cur == ptr_) return npos; }; } SC_BOOST_CXX14_CONSTEXPR size_type rfind(charT c, size_type pos = npos) const SC_BOOST_NOEXCEPT { return rfind(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type rfind(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return rfind(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type rfind(const charT* s, size_type pos = npos) const SC_BOOST_NOEXCEPT { return rfind(basic_string_view(s), pos); } // find_first_of SC_BOOST_CXX14_CONSTEXPR size_type find_first_of(basic_string_view s, size_type pos = 0) const SC_BOOST_NOEXCEPT { if (pos >= len_ || s.len_ == 0) return npos; const_iterator iter = std::find_first_of (this->cbegin () + pos, this->cend (), s.cbegin (), s.cend (), traits::eq); return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter ); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_of(charT c, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find_first_of(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_of(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return find_first_of(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_of(const charT* s, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find_first_of(basic_string_view(s), pos); } // find_last_of SC_BOOST_CXX14_CONSTEXPR size_type find_last_of(basic_string_view s, size_type pos = npos) const SC_BOOST_NOEXCEPT { if (s.len_ == 0u) return npos; if (pos >= len_) pos = 0; else pos = len_ - (pos+1); const_reverse_iterator iter = std::find_first_of ( this->crbegin () + pos, this->crend (), s.cbegin (), s.cend (), traits::eq ); return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_of(charT c, size_type pos = npos) const SC_BOOST_NOEXCEPT { return find_last_of(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_of(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return find_last_of(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_of(const charT* s, size_type pos = npos) const SC_BOOST_NOEXCEPT { return find_last_of(basic_string_view(s), pos); } // find_first_not_of SC_BOOST_CXX14_CONSTEXPR size_type find_first_not_of(basic_string_view s, size_type pos = 0) const SC_BOOST_NOEXCEPT { if (pos >= len_) return npos; if (s.len_ == 0) return pos; const_iterator iter = find_not_of ( this->cbegin () + pos, this->cend (), s ); return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter ); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_not_of(charT c, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find_first_not_of(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_not_of(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return find_first_not_of(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_first_not_of(const charT* s, size_type pos = 0) const SC_BOOST_NOEXCEPT { return find_first_not_of(basic_string_view(s), pos); } // find_last_not_of SC_BOOST_CXX14_CONSTEXPR size_type find_last_not_of(basic_string_view s, size_type pos = npos) const SC_BOOST_NOEXCEPT { if (pos >= len_) pos = len_ - 1; if (s.len_ == 0u) return pos; pos = len_ - (pos+1); const_reverse_iterator iter = find_not_of ( this->crbegin () + pos, this->crend (), s ); return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter ); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_not_of(charT c, size_type pos = npos) const SC_BOOST_NOEXCEPT { return find_last_not_of(basic_string_view(&c, 1), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_not_of(const charT* s, size_type pos, size_type n) const SC_BOOST_NOEXCEPT { return find_last_not_of(basic_string_view(s, n), pos); } SC_BOOST_CXX14_CONSTEXPR size_type find_last_not_of(const charT* s, size_type pos = npos) const SC_BOOST_NOEXCEPT { return find_last_not_of(basic_string_view(s), pos); } private: template size_type reverse_distance(r_iter first, r_iter last) const SC_BOOST_NOEXCEPT { // Portability note here: std::distance is not NOEXCEPT, but calling it with a string_view::reverse_iterator will not throw. return len_ - 1 - std::distance ( first, last ); } template Iterator find_not_of(Iterator first, Iterator last, basic_string_view s) const SC_BOOST_NOEXCEPT { for (; first != last ; ++first) if ( 0 == traits::find(s.ptr_, s.len_, *first)) return first; return last; } const charT *ptr_; std::size_t len_; }; // Comparison operators // Equality template inline bool operator==(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { if (x.size () != y.size ()) return false; return x.compare(y) == 0; } // Inequality template inline bool operator!=(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { if ( x.size () != y.size ()) return true; return x.compare(y) != 0; } // Less than template inline bool operator<(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { return x.compare(y) < 0; } // Greater than template inline bool operator>(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { return x.compare(y) > 0; } // Less than or equal to template inline bool operator<=(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { return x.compare(y) <= 0; } // Greater than or equal to template inline bool operator>=(basic_string_view x, basic_string_view y) SC_BOOST_NOEXCEPT { return x.compare(y) >= 0; } // "sufficient additional overloads of comparison functions" template inline bool operator==(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x == basic_string_view(y); } template inline bool operator==(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) == y; } template inline bool operator==(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x == basic_string_view(y); } template inline bool operator==(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) == y; } template inline bool operator!=(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x != basic_string_view(y); } template inline bool operator!=(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) != y; } template inline bool operator!=(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x != basic_string_view(y); } template inline bool operator!=(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) != y; } template inline bool operator<(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x < basic_string_view(y); } template inline bool operator<(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) < y; } template inline bool operator<(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x < basic_string_view(y); } template inline bool operator<(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) < y; } template inline bool operator>(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x > basic_string_view(y); } template inline bool operator>(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) > y; } template inline bool operator>(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x > basic_string_view(y); } template inline bool operator>(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) > y; } template inline bool operator<=(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x <= basic_string_view(y); } template inline bool operator<=(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) <= y; } template inline bool operator<=(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x <= basic_string_view(y); } template inline bool operator<=(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) <= y; } template inline bool operator>=(basic_string_view x, const std::basic_string & y) SC_BOOST_NOEXCEPT { return x >= basic_string_view(y); } template inline bool operator>=(const std::basic_string & x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) >= y; } template inline bool operator>=(basic_string_view x, const charT * y) SC_BOOST_NOEXCEPT { return x >= basic_string_view(y); } template inline bool operator>=(const charT * x, basic_string_view y) SC_BOOST_NOEXCEPT { return basic_string_view(x) >= y; } namespace detail { template inline void sv_insert_fill_chars(std::basic_ostream& os, std::size_t n) { enum { chunk_size = 8 }; charT fill_chars[chunk_size]; std::fill_n(fill_chars, static_cast< std::size_t >(chunk_size), os.fill()); for (; n >= chunk_size && os.good(); n -= chunk_size) os.write(fill_chars, static_cast< std::size_t >(chunk_size)); if (n > 0 && os.good()) os.write(fill_chars, n); } template void sv_insert_aligned(std::basic_ostream& os, const basic_string_view& str) { const std::size_t size = str.size(); const std::size_t alignment_size = static_cast< std::size_t >(os.width()) - size; const bool align_left = (os.flags() & std::basic_ostream::adjustfield) == std::basic_ostream::left; if (!align_left) { detail::sv_insert_fill_chars(os, alignment_size); if (os.good()) os.write(str.data(), size); } else { os.write(str.data(), size); if (os.good()) detail::sv_insert_fill_chars(os, alignment_size); } } } // namespace detail // Inserter template inline std::basic_ostream& operator<<(std::basic_ostream& os, const basic_string_view& str) { if (os.good()) { const std::size_t size = str.size(); const std::size_t w = static_cast< std::size_t >(os.width()); if (w <= size) os.write(str.data(), size); else detail::sv_insert_aligned(os, str); os.width(0); } return os; } #if 0 // numeric conversions // // These are short-term implementations. // In a production environment, I would rather avoid the copying. // inline int stoi (string_view str, size_t* idx=0, int base=10) { return std::stoi ( std::string(str), idx, base ); } inline long stol (string_view str, size_t* idx=0, int base=10) { return std::stol ( std::string(str), idx, base ); } inline unsigned long stoul (string_view str, size_t* idx=0, int base=10) { return std::stoul ( std::string(str), idx, base ); } inline long long stoll (string_view str, size_t* idx=0, int base=10) { return std::stoll ( std::string(str), idx, base ); } inline unsigned long long stoull (string_view str, size_t* idx=0, int base=10) { return std::stoull ( std::string(str), idx, base ); } inline float stof (string_view str, size_t* idx=0) { return std::stof ( std::string(str), idx ); } inline double stod (string_view str, size_t* idx=0) { return std::stod ( std::string(str), idx ); } inline long double stold (string_view str, size_t* idx=0) { return std::stold ( std::string(str), idx ); } inline int stoi (wstring_view str, size_t* idx=0, int base=10) { return std::stoi ( std::wstring(str), idx, base ); } inline long stol (wstring_view str, size_t* idx=0, int base=10) { return std::stol ( std::wstring(str), idx, base ); } inline unsigned long stoul (wstring_view str, size_t* idx=0, int base=10) { return std::stoul ( std::wstring(str), idx, base ); } inline long long stoll (wstring_view str, size_t* idx=0, int base=10) { return std::stoll ( std::wstring(str), idx, base ); } inline unsigned long long stoull (wstring_view str, size_t* idx=0, int base=10) { return std::stoull ( std::wstring(str), idx, base ); } inline float stof (wstring_view str, size_t* idx=0) { return std::stof ( std::wstring(str), idx ); } inline double stod (wstring_view str, size_t* idx=0) { return std::stod ( std::wstring(str), idx ); } inline long double stold (wstring_view str, size_t* idx=0) { return std::stold ( std::wstring(str), idx ); } #endif } #if 0 namespace std { // Hashing template<> struct hash; template<> struct hash; template<> struct hash; template<> struct hash; } #endif #endif systemc-2.3.4/src/sysc/packages/boost/utility/enable_if.hpp0000644000175000017500000000610214342422106023660 0ustar carstencarsten// Boost enable_if library // Copyright 2003 The Trustees of Indiana University. // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Jaakko Jrvi (jajarvi at osl.iu.edu) // Jeremiah Willcock (jewillco at osl.iu.edu) // Andrew Lumsdaine (lums at osl.iu.edu) #ifndef SC_BOOST_UTILITY_ENABLE_IF_HPP #define SC_BOOST_UTILITY_ENABLE_IF_HPP #include "sysc/packages/boost/config.hpp" // Even the definition of enable_if causes problems on some compilers, // so it's macroed out for all compilers that do not support SFINAE #ifndef SC_BOOST_NO_SFINAE namespace sc_boost { template struct enable_if_c { typedef T type; }; template struct enable_if_c {}; template struct enable_if : public enable_if_c {}; template struct lazy_enable_if_c { typedef typename T::type type; }; template struct lazy_enable_if_c {}; template struct lazy_enable_if : public lazy_enable_if_c {}; template struct disable_if_c { typedef T type; }; template struct disable_if_c {}; template struct disable_if : public disable_if_c {}; template struct lazy_disable_if_c { typedef typename T::type type; }; template struct lazy_disable_if_c {}; template struct lazy_disable_if : public lazy_disable_if_c {}; } // namespace sc_boost #else namespace sc_boost { namespace detail { typedef void enable_if_default_T; } template struct enable_if_does_not_work_on_this_compiler; template struct enable_if_c : enable_if_does_not_work_on_this_compiler { }; template struct disable_if_c : enable_if_does_not_work_on_this_compiler { }; template struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler { }; template struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler { }; template struct enable_if : enable_if_does_not_work_on_this_compiler { }; template struct disable_if : enable_if_does_not_work_on_this_compiler { }; template struct lazy_enable_if : enable_if_does_not_work_on_this_compiler { }; template struct lazy_disable_if : enable_if_does_not_work_on_this_compiler { }; } // namespace sc_boost #endif // SC_BOOST_NO_SFINAE #endif systemc-2.3.4/src/sysc/packages/boost/LICENSE_1_0.txt0000644000175000017500000000247414342422106022032 0ustar carstencarstenBoost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. systemc-2.3.4/src/sysc/packages/qt/0000755000175000017500000000000014342422106017037 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/qt/README.MISC0000644000175000017500000000177314342422106020461 0ustar carstencarstenHere's some machine-specific informatin for various systems: m88k on g88.sim .g88init: echo (gdb) target sim\n target sim echo (gdb) ecatch all\n ecatch all echo (gdb) break exit\n break exit % vi Makefile // set CC and AS % setenv MEERKAT /projects/cer/meerkat % set path=($MEERKAT/bin $path) % make run % g88.sim run (g88) run run N // where `N' is the test number m88k on meerkats, cross compile as above (make run) Run w/ g88: %g88 run (g88) source /homes/rivers/robertb/.gdbinit (g88) me which does (g88) set $firstchars=6 (g88) set $resetonattach=1 (g88) attach /dev/pp0 then download (g88) dl and run with (g88) continue Really the way to run it is: (g88) source (g88) me (g88) win (g88) dead 1 (g88) dead 2 (g88) dead 3 (g88) dl (g88) cont To rerun (g88) init (g88) dl To run simulated meerkat: (g88) att sim <> On 4.5 g88: (g88) target sim memsize instead of attatch (g88) ecatch all # catch exception before becomes error systemc-2.3.4/src/sysc/packages/qt/meas.c0000644000175000017500000005242514342422106020140 0ustar carstencarsten/* meas.c -- measure qt stuff. */ #include "copyright.h" /* Need this to get assertions under Mach on the Sequent/i386: */ #ifdef __i386__ #define assert(ex) \ do { \ if (!(ex)) { \ fprintf (stderr, "[%s:%d] Assertion " #ex " failed\n", __FILE__, __LINE__); \ abort(); \ } \ } while (0) #else #include #endif /* This really ought to be defined in some ANSI include file (*I* think...), but it's defined here instead, which leads us to another machine dependency. The `iaddr_t' type is an integer representation of a pointer, suited for doing arithmetic on addresses, e.g. to round an address to an alignment boundary. */ typedef unsigned long iaddr_t; #include /* For varargs tryout. */ #include #include "b.h" #include "qt.h" #include "stp.h" extern void exit (int status); extern int atoi (char const *s); extern int fprintf (FILE *out, char const *fmt, ...); extern int fputs (char const *s, FILE *fp); extern void free (void *sto); extern void *malloc (unsigned nbytes); extern void perror (char const *s); void usage (void); void tracer(void); /* Round `v' to be `a'-aligned, assuming `a' is a power of two. */ #define ROUND(v, a) (((v) + (a) - 1) & ~((a)-1)) typedef struct thread_t { qt_t *qt; /* Pointer to thread of function... */ void *stk; void *top; /* Set top of stack if reuse. */ struct thread_t *next; } thread_t; static thread_t * t_alloc (void) { thread_t *t; int ssz = 0x1000; t = malloc (sizeof(thread_t)); if (!t) { perror ("malloc"); exit (1); } assert (ssz > QT_STKBASE); t->stk = malloc (ssz); t->stk = (void *)ROUND (((iaddr_t)t->stk), QT_STKALIGN); if (!t->stk) { perror ("malloc"); exit (1); } assert ((((iaddr_t)t->stk) & (QT_STKALIGN-1)) == 0); t->top = QT_SP (t->stk, ssz - QT_STKBASE); return (t); } static thread_t * t_create (qt_only_t *starter, void *p0, qt_userf_t *f) { thread_t *t; t = t_alloc(); t->qt = QT_ARGS (t->top, p0, t, f, starter); return (t); } static void t_free (thread_t *t) { free (t->stk); free (t); } static void * t_null (qt_t *old, void *p1, void *p2) { /* return (garbage); */ } static void * t_splat (qt_t *old, void *oldp, void *null) { *(qt_t **)oldp = old; /* return (garbage); */ } static char const test01_msg[] = "*QT_SP(sto,sz), QT_ARGS(top,p0,p1,userf,first)"; static char const *test01_descr[] = { "Performs 1 QT_SP and one QT_ARGS per iteration.", NULL }; /* This test gives a guess on how long it takes to initalize a thread. */ static void test01 (int n) { char stack[QT_STKBASE+QT_STKALIGN]; char *stk; qt_t *top; stk = (char *)ROUND (((iaddr_t)stack), QT_STKALIGN); { int i; for (i=0; i0) { /* RETVALUSED */ top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); #ifdef NDEF top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); top = QT_SP (stk, QT_STKBASE); QT_ARGS (top, 0, 0, 0, 0); n -= 10; #else n -= 1; #endif } } static char const test02_msg[] = "QT_BLOCKI (0, 0, test02_aux, t->qt)"; static qt_t *rootthread; static void test02_aux1 (void *pu, void *pt, qt_userf_t *f) { QT_ABORT (t_null, 0, 0, rootthread); } static void * test02_aux2 (qt_t *old, void *farg1, void *farg2) { rootthread = old; /* return (garbage); */ } static void test02 (int n) { thread_t *t; while (n>0) { t = t_create (test02_aux1, 0, 0); QT_BLOCKI (test02_aux2, 0, 0, t->qt); t_free (t); t = t_create (test02_aux1, 0, 0); QT_BLOCKI (test02_aux2, 0, 0, t->qt); t_free (t); t = t_create (test02_aux1, 0, 0); QT_BLOCKI (test02_aux2, 0, 0, t->qt); t_free (t); t = t_create (test02_aux1, 0, 0); QT_BLOCKI (test02_aux2, 0, 0, t->qt); t_free (t); t = t_create (test02_aux1, 0, 0); QT_BLOCKI (test02_aux2, 0, 0, t->qt); t_free (t); n -= 5; } } static char const test03_msg[] = "QT_BLOCKI (...) test vals are right."; /* Called by the thread function when it wants to shut down. Return a value to the main thread. */ static void * test03_aux0 (qt_t *old_is_garbage, void *farg1, void *farg2) { assert (farg1 == (void *)5); assert (farg2 == (void *)6); return ((void *)15); /* Some unlikely value. */ } /* Called during new thread startup by main thread. Since the new thread has never run before, return value is ignored. */ static void * test03_aux1 (qt_t *old, void *farg1, void *farg2) { assert (old != NULL); assert (farg1 == (void *)5); assert (farg2 == (void *)6); rootthread = old; return ((void *)16); /* Different than `15'. */ } static void test03_aux2 (void *pu, void *pt, qt_userf_t *f) { assert (pu == (void *)1); assert (f == (qt_userf_t *)4); QT_ABORT (test03_aux0, (void *)5, (void *)6, rootthread); } static void test03 (int n) { thread_t *t; void *rv; while (n>0) { t = t_create (test03_aux2, (void *)1, (qt_userf_t *)4); rv = QT_BLOCKI (test03_aux1, (void *)5, (void *)6, t->qt); assert (rv == (void *)15); t_free (t); --n; } } static char const test04_msg[] = "stp_start w/ no threads."; static void test04 (int n) { while (n>0) { stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); stp_init(); stp_start(); n -= 10; } } static char const test05_msg[] = "stp w/ 2 yielding thread."; static void test05_aux (void *null) { stp_yield(); stp_yield(); } static void test05 (int n) { while (n>0) { stp_init(); stp_create (test05_aux, 0); stp_create (test05_aux, 0); stp_start(); --n; } } static char const test06_msg[] = "*QT_ARGS(...), QT_BLOCKI one thread"; static char const *test06_descr[] = { "Does a QT_ARGS, QT_BLOCKI to a helper function that saves the", "stack pointer of the main thread, calls an `only' function that", "saves aborts the thread, calling a null helper function.", ":: start/stop = QT_ARGS + QT_BLOCKI + QT_ABORT + 3 procedure calls.", NULL }; /* This test initializes a thread, runs it, then returns to the main program, which reinitializes the thread, runs it again, etc. Each iteration corresponds to 1 init, 1 abort, 1 block. */ static qt_t *test06_sp; static void test06_aux2 (void *null0a, void *null1b, void *null2b, qt_userf_t *null) { QT_ABORT (t_null, 0, 0, test06_sp); } static void * test06_aux3 (qt_t *sp, void *null0c, void *null1c) { test06_sp = sp; /* return (garbage); */ } static void test06 (int n) { thread_t *t; t = t_create (0, 0, 0); while (n>0) { /* RETVALUSED */ QT_ARGS (t->top, 0, 0, 0, test06_aux2); QT_BLOCKI (test06_aux3, 0, 0, t->qt); #ifdef NDEF /* RETVALUSED */ QT_ARGS (t->top, 0, 0, 0, test06_aux2); QT_BLOCKI (test06_aux3, 0, 0, t->qt); /* RETVALUSED */ QT_ARGS (t->top, 0, 0, 0, test06_aux2); QT_BLOCKI (test06_aux3, 0, 0, t->qt); /* RETVALUSED */ QT_ARGS (t->top, 0, 0, 0, test06_aux2); QT_BLOCKI (test06_aux3, 0, 0, t->qt); /* RETVALUSED */ QT_ARGS (t->top, 0, 0, 0, test06_aux2); QT_BLOCKI (test06_aux3, 0, 0, t->qt); n -= 5; #else --n; #endif } } static char test07_msg[] = "*cswap between threads"; static char const *test07_descr[] = { "Build a chain of threads where each thread has a fixed successor.", "There is no scheduling performed. Each thread but one is a loop", "that simply blocks with QT_BLOCKI, calling a helper that saves the", "current stack pointer. The last thread decrements a count, and,", "if zero, aborts back to the main thread. Else it continues with", "the blocking chain. The count is divided by the number of threads", "in the chain, so `n' is the number of integer block operations.", ":: integer cswap = QT_BLOCKI + a procedure call.", NULL }; /* This test repeatedly blocks a bunch of threads. Each iteration corresponds to one block operation. The threads are arranged so that there are TEST07_N-1 of them that run `test07_aux2'. Each one of those blocks saving it's sp to storage owned by the preceding thread; a pointer to that storage is passed in via `mep'. Each thread has a handle on it's own storage for the next thread, referenced by `nxtp', and it blocks by passing control to `*nxtp', telling the helper function to save its state in `*mep'. The last thread in the chain decrements a count and, if it's gone below zero, returns to `test07'; otherwise, it invokes the first thread in the chain. */ static qt_t *test07_heavy; #define TEST07_N (4) static void test07_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null) { qt_t *nxt; while (1) { nxt = *(qt_t **)nxtp; #ifdef NDEF printf ("Helper 0x%p\n", nxtp); #endif QT_BLOCKI (t_splat, mep, 0, nxt); } } static void test07_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null) { int n; n = *(int *)np; while (1) { n -= TEST07_N; if (n<0) { QT_ABORT (t_splat, mep, 0, test07_heavy); } QT_BLOCKI (t_splat, mep, 0, *(qt_t **)nxtp); } } static void test07 (int n) { int i; thread_t *t[TEST07_N]; for (i=0; itop, 0, &t[i]->qt, &t[i+1]->qt, test07_aux2); } /* RETVALUSED */ QT_ARGS (t[i]->top, &n, &t[TEST07_N-1]->qt, &t[0]->qt, test07_aux3); QT_BLOCKI (t_splat, &test07_heavy, 0, t[0]->qt); } static char test08_msg[] = "Floating-point cswap between threads"; static char const *test08_descr[] = { "Measure context switch times including floating-point, use QT_BLOCK.", NULL }; static qt_t *test08_heavy; #define TEST08_N (4) static void test08_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null) { qt_t *nxt; while (1) { nxt = *(qt_t **)nxtp; QT_BLOCK (t_splat, mep, 0, nxt); } } static void test08_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null) { int n; n = *(int *)np; while (1) { n -= TEST08_N; if (n<0) { QT_ABORT (t_splat, mep, 0, test08_heavy); } QT_BLOCK (t_splat, mep, 0, *(qt_t **)nxtp); } } static void test08 (int n) { int i; thread_t *t[TEST08_N]; for (i=0; itop, 0, &t[i]->qt, &t[i+1]->qt, test08_aux2); } /* RETVALUSED */ QT_ARGS (t[i]->top, &n, &t[TEST08_N-1]->qt, &t[0]->qt, test08_aux3); QT_BLOCK (t_splat, &test08_heavy, 0, t[0]->qt); } /* Test the varargs procedure calling. */ char const test09_msg[] = { "Start and run threads using varargs." }; thread_t *test09_t0, *test09_t1, *test09_t2, *test09_main; thread_t * test09_create (qt_startup_t *start, qt_vuserf_t *f, qt_cleanup_t *cleanup, int nbytes, ...) { va_list ap; thread_t *t; t = t_alloc(); va_start (ap, nbytes); t->qt = QT_VARGS (t->top, nbytes, ap, t, start, f, cleanup); va_end (ap); return (t); } static void test09_cleanup (void *pt, void *vuserf_retval) { assert (vuserf_retval == (void *)17); QT_ABORT (t_splat, &((thread_t *)pt)->qt, 0, ((thread_t *)pt)->next->qt); } static void test09_start (void *pt) { } static void * test09_user0 (void) { QT_BLOCKI (t_splat, &test09_t0->qt, 0, test09_t1->qt); return ((void *)17); } static void * test09_user2 (int one, int two) { assert (one == 1); assert (two == 2); QT_BLOCKI (t_splat, &test09_t1->qt, 0, test09_t2->qt); assert (one == 1); assert (two == 2); return ((void *)17); } static void * test09_user10 (int one, int two, int three, int four, int five, int six, int seven, int eight, int nine, int ten) { assert (one == 1); assert (two == 2); assert (three == 3); assert (four == 4); assert (five == 5); assert (six == 6); assert (seven == 7); assert (eight == 8); assert (nine == 9); assert (ten == 10); QT_BLOCKI (t_splat, &test09_t2->qt, 0, test09_main->qt); assert (one == 1); assert (two == 2); assert (three == 3); assert (four == 4); assert (five == 5); assert (six == 6); assert (seven == 7); assert (eight == 8); assert (nine == 9); assert (ten == 10); return ((void *)17); } void test09 (int n) { thread_t main; test09_main = &main; while (--n >= 0) { test09_t0 = test09_create (test09_start, (qt_vuserf_t*)test09_user0, test09_cleanup, 0); test09_t1 = test09_create (test09_start, (qt_vuserf_t*)test09_user2, test09_cleanup, 2 * sizeof(qt_word_t), 1, 2); test09_t2 = test09_create (test09_start, (qt_vuserf_t*)test09_user10, test09_cleanup, 10 * sizeof(qt_word_t), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); /* Chaining used by `test09_cleanup' to determine who is next. */ test09_t0->next = test09_t1; test09_t1->next = test09_t2; test09_t2->next = test09_main; QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt); QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt); t_free (test09_t0); t_free (test09_t1); t_free (test09_t2); } } /* Test 10/11/12: time the cost of various number of args. */ char const test10_msg[] = { "*Test varargs init & startup w/ 0 args." }; char const *test10_descr[] = { "Start and stop threads that use variant argument lists (varargs).", "Each thread is initialized by calling a routine that calls", "QT_VARARGS. Then runs the thread by calling QT_BLOCKI to hald the", "main thread, a helper that saves the main thread's stack pointer,", "a null startup function, a null user function, a cleanup function", "that calls QT_ABORT and restarts the main thread. Copies no user", "parameters.", ":: varargs start/stop = QT_BLOCKI + QT_ABORT + 6 function calls.", NULL }; /* Helper function to send control back to main. Don't save anything. */ /* Helper function for starting the varargs thread. Save the stack pointer of the main thread so we can get back there eventually. */ /* Startup function for a varargs thread. */ static void test10_startup (void *pt) { } /* User function for a varargs thread. */ static void * test10_run (int arg0, ...) { /* return (garbage); */ } /* Cleanup function for a varargs thread. Send control back to the main thread. Don't save any state from the thread that is halting. */ void test10_cleanup (void *pt, void *vuserf_retval) { QT_ABORT (t_null, 0, 0, ((thread_t *)pt)->qt); } void test10_init (thread_t *new, thread_t *next, int nbytes, ...) { va_list ap; va_start (ap, nbytes); new->qt = QT_VARGS (new->top, nbytes, ap, next, test10_startup, test10_run, test10_cleanup); va_end (ap); } void test10 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 0); QT_BLOCKI (t_splat, &main.qt, 0, t->qt); } t_free (t); } char const test11_msg[] = { "*Test varargs init & startup w/ 2 args." }; char const *test11_descr[] = { "Varargs initialization/run. Copies 2 user arguments.", ":: varargs 2 start/stop = QT_VARGS(2 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", NULL }; void test11 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 2 * sizeof(int), 2, 1); QT_BLOCKI (t_splat, &main.qt, 0, t->qt); } t_free (t); } char const test12_msg[] = { "*Test varargs init & startup w/ 4 args." }; char const *test12_descr[] = { "Varargs initialization/run. Copies 4 user arguments.", ":: varargs 4 start/stop = QT_VARGS(4 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", NULL }; void test12 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1); QT_BLOCKI (t_splat, &main.qt, 0, t->qt); } t_free (t); } char const test13_msg[] = { "*Test varargs init & startup w/ 8 args." }; char const *test13_descr[] = { "Varargs initialization/run. Copies 8 user arguments.", ":: varargs 8 start/stop = QT_VARGS(8 args), QT_BLOCKI, QT_ABORT, 6 f() calls.", NULL }; void test13 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1); QT_BLOCKI (t_splat, &main.qt, 0, t->qt); } t_free (t); } char const test14_msg[] = { "*Test varargs initialization w/ 0 args." }; char const *test14_descr[] = { "Varargs initialization without running the thread. Just calls", "QT_VARGS.", ":: varargs 0 init = QT_VARGS()", NULL }; void test14 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 0 * sizeof(int)); } t_free (t); } char const test15_msg[] = { "*Test varargs initialization w/ 2 args." }; char const *test15_descr[] = { "Varargs initialization without running the thread. Just calls", "QT_VARGS.", ":: varargs 2 init = QT_VARGS(2 args)", NULL }; void test15 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 2 * sizeof(int), 2, 1); } t_free (t); } char const test16_msg[] = { "*Test varargs initialization w/ 4 args." }; char const *test16_descr[] = { "Varargs initialization without running the thread. Just calls", "QT_VARGS.", ":: varargs 4 init = QT_VARGS(4 args)", NULL }; void test16 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1); } t_free (t); } char const test17_msg[] = { "*Test varargs initialization w/ 8 args." }; char const *test17_descr[] = { "Varargs initialization without running the thread. Just calls", "QT_VARGS.", ":: varargs 8 init = QT_VARGS(8 args)", NULL }; void test17 (int n) { thread_t main; thread_t *t; t = t_alloc(); t->next = &main; while (--n >= 0) { test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1); } t_free (t); } /* Test times for basic machine operations. */ char const test18_msg[] = { "*Call register indirect." }; char const *test18_descr[] = { NULL }; void test18 (int n) { b_call_reg (n); } char const test19_msg[] = { "*Call immediate." }; char const *test19_descr[] = { NULL }; void test19 (int n) { b_call_imm (n); } char const test20_msg[] = { "*Add register-to-register." }; char const *test20_descr[] = { NULL }; void test20 (int n) { b_add (n); } char const test21_msg[] = { "*Load memory to a register." }; char const *test21_descr[] = { NULL }; void test21 (int n) { b_load (n); } /* Driver. */ typedef struct foo_t { char const *msg; /* Message to print for generic help. */ char const **descr; /* A description of what is done by the test. */ void (*f)(int n); } foo_t; static foo_t foo[] = { { "Usage:\n", NULL, (void(*)(int n))usage }, { test01_msg, test01_descr, test01 }, { test02_msg, NULL, test02 }, { test03_msg, NULL, test03 }, { test04_msg, NULL, test04 }, { test05_msg, NULL, test05 }, { test06_msg, test06_descr, test06 }, { test07_msg, test07_descr, test07 }, { test08_msg, test08_descr, test08 }, { test09_msg, NULL, test09 }, { test10_msg, test10_descr, test10 }, { test11_msg, test11_descr, test11 }, { test12_msg, test12_descr, test12 }, { test13_msg, test13_descr, test13 }, { test14_msg, test14_descr, test14 }, { test15_msg, test15_descr, test15 }, { test16_msg, test16_descr, test16 }, { test17_msg, test17_descr, test17 }, { test18_msg, test18_descr, test18 }, { test19_msg, test19_descr, test19 }, { test20_msg, test20_descr, test20 }, { test21_msg, test21_descr, test21 }, { 0, 0 } }; static int tv = 0; void tracer () { fprintf (stderr, "tracer\t%d\n", tv++); fflush (stderr); } void tracer2 (void *val) { fprintf (stderr, "tracer2\t%d val=0x%p", tv++, val); fflush (stderr); } void describe() { int i; FILE *out = stdout; for (i=0; foo[i].msg; ++i) { if (foo[i].descr) { int j; putc ('\n', out); fprintf (out, "[%d]\n", i); for (j=0; foo[i].descr[j]; ++j) { fputs (foo[i].descr[j], out); putc ('\n', out); } } } exit (0); } void usage() { int i; fputs (foo[0].msg, stderr); for (i=1; foo[i].msg; ++i) { fprintf (stderr, "%2d\t%s\n", i, foo[i].msg); } exit (1); } void args (int *which, int *n, int argc, char **argv) { static int nfuncs = 0; if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'h') { describe(); } if (nfuncs == 0) { for (nfuncs=0; foo[nfuncs].msg; ++nfuncs) ; } if (argc != 2 && argc != 3) { usage(); } *which = atoi (argv[1]); if (*which < 0 || *which >= nfuncs) { usage(); } *n = (argc == 3) ? atoi (argv[2]) : 1; } int main (int argc, char **argv) { int which, n; args (&which, &n, argc, argv); (*(foo[which].f))(n); exit (0); return (0); } systemc-2.3.4/src/sysc/packages/qt/INSTALL0000644000175000017500000000536514342422106020101 0ustar carstencarstenInstallation of the `QuickThreads' threads-building toolkit. * Notice QuickThreads -- Threads-building toolkit. Copyright (c) 1993 by David Keppel Permission to use, copy, modify and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice and this notice appear in all copies. This software is provided as a proof-of-concept and for demonstration purposes; there is no representation about the suitability of this software for any purpose. * Configuration Configure with ./config *machtype* where "*machtype*" is one of the supported target machines. As of October 1994, the supported machines (targets) are: axp -- All Digital Equipment Corporation AXP (DEC Alpha) processors, compile with GNU CC axp-osf1 -- AXP running OSF 1.x axp-osf2 -- AXP running OSF 2.x hppa -- HP's PA-RISC 1.1 processor hppa-cnx-spp -- Convex SPP (PA-RISC 1.1 processor) iX86 -- 80386, 80486, and 80586-compatible processors See notes below for OS/2. iX86-ss -- 'iX86 for assemblers that use slash-slash ('//') comments. ksr1 -- All KSR processors m88k -- All members of the Motorola 88000 family mips -- MIPS R2000 and R3000 processors mips-irix5 -- Irix 5.xx (use `mips' for Irix 4.xx) sparc-os1 -- V8-compliant SPARC processors using compilers that prefix labels (e.g. "foo" appears as "_foo") Includes Solaris 1 (SunOS 4.X). sparc-os2 -- V8-compliant SPARC processors using compilers that do not prefix labels. Includes Solaris 2. vax -- All VAX processors In addition, the target `clean' will deconfigure QuickThreads. Note that a given machine target may not work on all instances of that machine because e.g., the assembler syntax varies from machine to machine. Note also that additions to a processor family may require a new target. So, for example, the `vax' target might not work for all future VAX processors if, say, new VAX processors are introduced and they use separate floating-point registers. For OS/2, change `ranlib' to `ar -s', `configure' to `configure.cmd' (or was that `config' to `config.cmd'?), and replace the soft links (`ln -s') with plain copies. * Build To build the QuickThreads library, first configure (see above) then type `make libqt.a' in the top-level directory. To build the demonstration threads package, SimpleThreads, type `make libstp.a' in the top-level directory. To build an executable ``stress-test'' and measurement program, type `make run' in the top-level directory. Run `time/raw' to run the stress tests. * Installation Build the QuickThreads library (see above) and then copy `libqt.a' to the installation library directory (e.g., /usr/local/lib) and `qt.h' and `qtmd.h' to the installation include directory (e.g., /usr/local/include). systemc-2.3.4/src/sysc/packages/qt/copyright.h0000644000175000017500000000075314342422106021225 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ systemc-2.3.4/src/sysc/packages/qt/Makefile.am0000644000175000017500000001004514342422106021073 0ustar carstencarsten## **************************************************************************** ## ## 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. ## ## **************************************************************************** ## ## src/sysc/qt/Makefile.am -- ## Process this file with automake to produce a Makefile.in file. ## ## Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 ## ## **************************************************************************** ## ## MODIFICATION LOG - modifiers, enter your name, affiliation, date and ## changes you are making here. ## ## Name, Affiliation, Date: ## Description of Modification: ## ## **************************************************************************** include $(top_srcdir)/config/Make-rules.sysc NO_H_FILES = \ copyright.h \ qt.h \ qtmd.h \ \ md/aarch64.h \ md/axp.h \ md/hppa.h \ md/i386.h \ md/iX86_64.h \ md/ksr1.h \ md/m88k.h \ md/mips.h \ md/powerpc_mach.h \ md/powerpc_sys5.h \ md/sparc.h \ md/vax.h noinst_HEADERS = \ $(NO_H_FILES) C_FILES = \ qt.c NO_C_FILES = \ md/axp.c \ md/m88k.c \ md/null.c \ md/powerpc.c NO_S_FILES = \ md/aarch64.s \ md/axp_b.s \ md/axp.s \ md/hppa_b.s \ md/hppa.s \ md/i386_b.s \ md/i386.s \ md/iX86_64.s \ md/ksr1_b.s \ md/ksr1.s \ md/m88k_b.s \ md/m88k.s \ md/mips_b.s \ md/mips-irix5.s \ md/mips.s \ md/null.s \ md/powerpc_mach_b.s \ md/powerpc_mach.s \ md/powerpc_sys5_b.s \ md/powerpc_sys5.s \ md/sparc_b.s \ md/sparc.s \ md/vax_b.s \ md/vax.s EXTRA_DIST += \ CHANGES \ config \ INSTALL \ Makefile.base \ README \ README.MISC \ README.PORT \ \ b.h \ meas.c \ stp.c \ stp.h \ \ time/assim \ time/cswap \ time/go \ time/init \ time/prim \ time/raw \ time/README.time \ \ md/axp.1.Makefile \ md/axp.2.Makefile \ md/axp.Makefile \ md/axp.README \ md/default.Makefile \ md/hppa-cnx.Makefile \ md/hppa.Makefile \ md/i386.README \ md/ksr1.Makefile \ md/m88k.Makefile \ md/null.README \ md/powerpc.README \ md/pthreads.Makefile \ md/solaris.README \ \ $(NO_C_FILES) \ $(NO_H_FILES) \ $(NO_S_FILES) CLEANFILES += \ $(QT_ARCH_FILES) \ configuration if WANT_QT_THREADS BUILT_SOURCES = \ configuration noinst_LTLIBRARIES = libqt.la nodist_libqt_la_SOURCES = \ $(QT_ARCH_FILES) libqt_la_SOURCES = \ $(C_FILES) libqt_la_LIBTOOLFLAGS = \ --tag=CC qtmds_o_CCASFLAGS = \ $(AM_CCASFLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) # only add qtmdc.c to QT_ARCH_FILES, if needed for the platform (!=null.c) QT_ARCH_FILES = \ qtmds.s if QT_ARCH_AARCH64 QT_ARCH_IMPL = md/aarch64.s endif if QT_ARCH_X86 QT_ARCH_IMPL = md/i386.s endif if QT_ARCH_X86_64 QT_ARCH_IMPL = md/iX86_64.s endif if QT_ARCH_POWERPC_MACOSX QT_ARCH_FILES+=qtmdc.c QT_ARCH_IMPL = md/powerpc_mach.s md/powerpc.c endif if QT_ARCH_SPARC QT_ARCH_IMPL = md/sparc.s endif if QT_ARCH_HPPA QT_ARCH_IMPL = md/hppa.s endif # ensure to use a working link command in 'config' export LN_S configuration: if SEPARATE_BUILD_TREE # copy arch files to build tree $(AM_V_at)for file in $(QT_ARCH_IMPL); do \ $(MKDIR_P) `dirname "$$file"` ; \ $(INSTALL_DATA) $(srcdir)/$$file ./$$file ; \ done endif # SEPARATE_BUILD_TREE $(AM_V_GEN)$(SHELL) $(srcdir)/config $(QT_ARCH) if SEPARATE_BUILD_TREE CLEANFILES += \ $(QT_ARCH_IMPL) endif # SEPARATE_BUILD_TREE endif # WANT_QT_THREADS ## Taf! systemc-2.3.4/src/sysc/packages/qt/README0000644000175000017500000000606414342422106017725 0ustar carstencarstenThis is a source code distribution for QuickThreads. QuickThreads is a toolkit for building threads packages; it is described in detail in the University of Washington CS&E Technical report #93-05-06, available via anonymous ftp from `ftp.cs.washington.edu' (128.95.1.4, as of Oct. '94) in `tr/1993/05/UW-CSE-93-05-06.PS.Z'. This distribution shows basic ideas in QuickThreads and elaborates with example implementations for a gaggle of machines. As of October those machines included: 80386 faimly 88000 faimily DEC AXP (Alpha) family HP-PA family KSR MIPS family SPARC V8 family VAX family Configuration, build, and installation are described in INSTALL. Be aware: that there is no varargs code for the KSR. The HP-PA port was designed to work with both HP workstations and Convex SPP computers. It was generously provided by Uwe Reder . It is part of the ELiTE (Erlangen Lightweight Thread Environment) project directed by Frank Bellosa at the Operating Systems Department of the University of Erlangen (Germany). Other contributors include: Weihaw Chuang, Richard O'Keefe, Laurent Perron, John Polstra, Shinji Suzuki, Assar Westerlund, thanks also to Peter Buhr and Dirk Grunwald. Here is a brief summary: QuickThreads is a toolkit for building threads packages. It is my hope that you'll find it easier to use QuickThreads normally than to take it and modify the raw cswap code to fit your application. The idea behind QuickThreads is that it should make it easy for you to write & retarget threads packages. If you want the routine `t_create' to create threads and `t_block' to suspend threads, you write them using the QuickThreads `primitive' operations `QT_SP', `QT_INIT', and `QT_BLOCK', that perform machine-dependent initialization and blocking, plus code you supply for performing the portable operatons. For example, you might write: t_create (func, arg) { stk = malloc (STKSIZE); stackbase = QT_SP (stk, STKSIZE); sp = QT_INIT (stakcbase, func, arg); qput (runq, sp); } Threads block by doing something like: t_block() { sp_next = qget (runq); QT_BLOCK (helper, runq, sp_next); // wake up again here } // called by QT_BLOCK after the old thread has blocked, // puts the old thread on the queue `onq'. helper (sp_old, onq) { qput (onq, sp_old); } (Of course) it's actually a bit more complex than that, but the general idea is that you write portable code to allocate stacks and enqueue and dequeue threads. Than, to get your threads package up and running on a different machine, you just reconfigure QuickThreads and recompile, and that's it. The QuickThreads `distribution' includes a sample threads package (look at stp.{c,h}) that is written in terms of QuickThreads operations. The TR mentioned above explains the simple threads package in detail. If you do use QuickThreads, I'd like to hear both about what worked for you and what didn't work, problems you had, insights gleaned, etc. Let me know what you think. David Keppel systemc-2.3.4/src/sysc/packages/qt/config0000755000175000017500000002451114342422106020235 0ustar carstencarsten#! /bin/sh # set -x : ${LN_S:="ln -s"} # rm -f Makefile Makefile.md README.md qtmd.h qtmdb.s qtmdc.c qtmds.s configuration rm -f qtmdc.c qtmds.s configuration case $1 in axp*) : "DEC AXP" case $1 in axp-osf1*) : "Compile using /bin/cc under OSF 1.x." # ${LN_S} md/axp.1.Makefile Makefile.md ;; axp-osf2*) : "Compile using /bin/cc under OSF 2.x." # ${LN_S} md/axp.1.Makefile Makefile.md ;; *) : "Compile using GNU CC." # ${LN_S} md/axp.Makefile Makefile.md ;; esac # ${LN_S} md/axp.h qtmd.h ${LN_S} md/axp.c qtmdc.c ${LN_S} md/axp.s qtmds.s # ${LN_S} md/axp_b.s qtmdb.s # ${LN_S} md/axp.README README.md iter_init=1000000000 iter_runone=10000000 iter_blockint=10000000 iter_blockfloat=10000000 iter_vainit0=10000000 iter_vainit2=10000000 iter_vainit4=10000000 iter_vainit8=10000000 iter_vastart0=10000000 iter_vastart2=10000000 iter_vastart4=10000000 iter_vastart8=10000000 iter_bench_call_reg=10000000 iter_bench_call_imm=10000000 iter_bench_add=100000000 iter_bench_load=100000000 ;; hppa*) : "HP's PA-RISC 1.1 processors." case $1 in hppa-cnx-spp*) : "Convex SPP (PA-RISC 1.1 processors)." # ${LN_S} md/hppa-cnx.Makefile Makefile.md ;; *) # ${LN_S} md/hppa.Makefile Makefile.md ;; esac # ${LN_S} md/hppa.h qtmd.h # ${LN_S} md/null.c qtmdc.c ${LN_S} md/hppa.s qtmds.s # ${LN_S} md/hppa_b.s qtmdb.s iter_init=10000000 iter_runone=1000000 iter_blockint=1000000 iter_blockfloat=1000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=10000000 iter_bench_call_imm=10000000 iter_bench_add=100000000 iter_bench_load=100000000 ;; x86_64*) case $1 in iX86-ss*) : "Assembler comments '//'" sed 's/\/\*/\/\//' < md/i386_64.s > qtmds.s ;; *) ${LN_S} md/iX86_64.s qtmds.s ;; esac : "Intel X386 64-bit and compatibles" # ${LN_S} md/null.c qtmdc.c iter_init=10000000 iter_runone=1000000 iter_blockint=1000000 iter_blockfloat=1000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=1000000 iter_bench_call_imm=1000000 iter_bench_add=100000000 iter_bench_load=10000000 ;; iX86*) case $1 in iX86-ss*) : "Assembler comments '//'" sed 's/\/\*/\/\//' < md/i386.s > qtmds.s # sed 's/\/\*/\/\//' < md/i386_b.s > qtmdb.s ;; *) ${LN_S} md/i386.s qtmds.s # ${LN_S} md/i386_b.s qtmdb.s ;; esac : "Intel 80386 and compatibles (not '286...)" # ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/i386.h qtmd.h # ${LN_S} md/null.c qtmdc.c # ${LN_S} md/i386.README README.md iter_init=10000000 iter_runone=1000000 iter_blockint=1000000 iter_blockfloat=1000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=1000000 iter_bench_call_imm=1000000 iter_bench_add=100000000 iter_bench_load=10000000 ;; aarch64*) : "ARM's ARM64 AArch64 processors" ${LN_S} md/aarch64.s qtmds.s iter_init=10000000 iter_runone=1000000 iter_blockint=1000000 iter_blockfloat=1000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=1000000 iter_bench_call_imm=1000000 iter_bench_add=100000000 iter_bench_load=10000000 ;; m68k) : "Motorola 68000 family -- incomplete!" # ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/m68k.h qtmd.h # ${LN_S} md/null.c qtmdc.c ${LN_S} md/m68k.s qtmds.s # ${LN_S} md/m68k_b.s qtmdb.s # ${LN_S} md/null.README README.md ;; m88k) : "Motorola 88000 family" # ${LN_S} md/m88k.Makefile Makefile.md # ${LN_S} md/m88k.h qtmd.h ${LN_S} md/m88k.c qtmdc.c ${LN_S} md/m88k.s qtmds.s # ${LN_S} md/m88k_b.s qtmdb.s # ${LN_S} md/null.README README.md iter_init=1000000 iter_runone=100000 iter_blockint=100000 iter_blockfloat=100000 iter_vainit0=100000 iter_vainit2=100000 iter_vainit4=100000 iter_vainit8=100000 iter_vastart0=100000 iter_vastart2=100000 iter_vastart4=100000 iter_vastart8=100000 iter_bench_call_reg=100000000 iter_bench_call_imm=100000000 iter_bench_add=1000000000 iter_bench_load=100000000 ;; mips*) : "MIPS R2000 and R3000." case $1 in mips-irix5*) : "Silicon Graphics Irix with dynamic linking" : "Use mips for irix4." ${LN_S} md/mips-irix5.s qtmds.s ;; *) ${LN_S} md/mips.s qtmds.s ;; esac # ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/mips.h qtmd.h # ${LN_S} md/null.c qtmdc.c # ${LN_S} md/mips_b.s qtmdb.s # ${LN_S} md/null.README README.md iter_init=10000000 iter_runone=10000000 iter_blockint=10000000 iter_blockfloat=10000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=100000000 iter_bench_call_imm=100000000 iter_bench_add=1000000000 iter_bench_load=100000000 ;; sparc*) : "SPARC processors" case $1 in sparc-os2*) sed 's/_qt_/qt_/' md/sparc.s > qtmds.s # sed 's/_b_/b_/' md/sparc_b.s > qtmdb.s # ${LN_S} md/solaris.README README.md ;; *) ${LN_S} md/sparc.s qtmds.s # ${LN_S} md/sparc_b.s qtmdb.s # ${LN_S} md/null.README README.md ;; esac ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/sparc.h qtmd.h # ${LN_S} md/null.c qtmdc.c iter_init=10000000 iter_runone=1000000 iter_blockint=1000000 iter_blockfloat=1000000 iter_vainit0=1000000 iter_vainit2=1000000 iter_vainit4=1000000 iter_vainit8=1000000 iter_vastart0=1000000 iter_vastart2=1000000 iter_vastart4=1000000 iter_vastart8=1000000 iter_bench_call_reg=10000000 iter_bench_call_imm=10000000 iter_bench_add=100000000 iter_bench_load=100000000 ;; vax*) : "DEC VAX processors." # ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/vax.h qtmd.h # ${LN_S} md/null.c qtmdc.c ${LN_S} md/vax.s qtmds.s # ${LN_S} md/vax_b.s qtmdb.s # ${LN_S} md/null.README README.md iter_init=1000000 iter_runone=100000 iter_blockint=100000 iter_blockfloat=100000 iter_vainit0=100000 iter_vainit2=100000 iter_vainit4=100000 iter_vainit8=100000 iter_vastart0=100000 iter_vastart2=100000 iter_vastart4=100000 iter_vastart8=100000 iter_bench_call_reg=10000000 iter_bench_call_imm=10000000 iter_bench_add=10000000 iter_bench_load=1000000 ;; ksr1) : "Kendall Square Research model KSR-1." : "Varargs is not currently supported." # ${LN_S} md/ksr1.Makefile Makefile.md # ${LN_S} md/ksr1.h qtmd.h # ${LN_S} md/null.c qtmdc.c ${LN_S} md/ksr1.s qtmds.s # ${LN_S} md/ksr1_b.s qtmdb.s # ${LN_S} md/null.README README.md iter_init=1000000 iter_runone=100000 iter_blockint=100000 iter_blockfloat=100000 iter_vainit0=100000 iter_vainit2=100000 iter_vainit4=100000 iter_vainit8=100000 iter_vastart0=100000 iter_vastart2=100000 iter_vastart4=100000 iter_vastart8=100000 iter_bench_call_reg=10000000 iter_bench_call_imm=10000000 iter_bench_add=10000000 iter_bench_load=1000000 ;; powerpc*) : "PowerPC IBM/Motorola processors." case $1 in powerpc-apple-macosx*) : "PowerPC using Mach Application Binary Interface" : "NOTICE: Darwin assembler syntax is used:" : " (i.e. registers are named rx not %rx)" ${LN_S} md/default.Makefile Makefile.md # ${LN_S} md/powerpc_mach.h qtmd.h ${LN_S} md/powerpc_mach.s qtmds.s ;; powerpc-linux*) : "PowerPC using System V Application Binary Interface" : " (e.g. LinuxPPC)" : "Use powerpc-darwin for MacOS X and other systems based on Mac h ABI" # ${LN_S} md/powerpc_sys5.h qtmd.h ${LN_S} md/powerpc_sys5.s qtmds.s ;; *) echo "Unknown configuration '$1'" echo "See md/powerpc.README for documentation" echo "Use powerpc-darwin for MacOS X and other systems based on Mach ABI" echo "Use powerpc-linux for Linux and other systems based on Sys tem V ABI" exit 1 ;; esac ${LN_S} md/powerpc.c qtmdc.c ${LN_S} md/powerpc.README README.md ;; pthreads*) : Posix thread support rather than Quick threads. # ${LN_S} md/hppa.h qtmd.h # ${LN_S} md/null.c qtmdc.c # ${LN_S} md/null.s qtmds.s # ${LN_S} md/hppa_b.s qtmdb.s # cp md/pthreads.Makefile Makefile exit 0 ;; clean) : Deconfigure exit 0 ;; *) echo "Unknown configuration" exit 1 ;; esac # cat Makefile.md Makefile.base > Makefile echo set config_machine=$1 >> configuration echo set config_init=$iter_init >> configuration echo set config_runone=$iter_runone >> configuration echo set config_blockint=$iter_blockint >> configuration echo set config_blockfloat=$iter_blockfloat >> configuration echo set config_vainit0=$iter_vainit0 >> configuration echo set config_vainit2=$iter_vainit2 >> configuration echo set config_vainit4=$iter_vainit4 >> configuration echo set config_vainit8=$iter_vainit8 >> configuration echo set config_vastart0=$iter_vastart0 >> configuration echo set config_vastart2=$iter_vastart2 >> configuration echo set config_vastart4=$iter_vastart4 >> configuration echo set config_vastart8=$iter_vastart8 >> configuration echo set config_bcall_reg=$iter_bench_call_reg >> configuration echo set config_bcall_imm=$iter_bench_call_imm >> configuration echo set config_b_add=$iter_bench_add >> configuration echo set config_b_load=$iter_bench_load >> configuration systemc-2.3.4/src/sysc/packages/qt/README.PORT0000644000175000017500000001146114342422106020505 0ustar carstencarstenDate: Tue, 11 Jan 94 13:23:11 -0800 From: "pardo@cs.washington.edu" >[What's needed to get `qt' on an i860-based machine?] Almost certainly "some assembly required" (pun accepted). To write a cswap port, you need to understand the context switching model. Turn to figure 2 in the QT TR. Here's about what the assembly code looks like to implement that: qt_cswap: adjust stack pointer save callee-save registers on to old's stack argument register <- old sp sp <- new sp (*helper)(args...) restore callee-save registers from new's stack unadjust stack pointer return Once more in slow motion: - `old' thread calls context switch routine (new, a0, a1, h) - cswap routine saves registers that have useful values - cswap routine switches to new stack - cswap routine calls helper function (*h)(old, a0, a1) - when helper returns, cswap routine restores registers that were saved the last time `new' was suspended - cswap routine returns to whatever `new' routine called the context switch routine There's a few tricks here. First, how do you start a thread running for the very first time? Answer is: fake some stuff on the stack so it *looks* like it was called from the middle of some routine. When the new thread is restarted, it is treated like any other thread. It just so happens that it's never really run before, but you can't tell that because the saved state makes it look like like it's been run. The return pc is set to point at a little stub of assembly code that loads up registers with the right values and then calls `only'. Second, I advise you to forget about varargs routines (at least until you get single-arg routines up and running). Third, on most machines `qt_abort' is the same as `qt_cswap' except that it need not save any callee-save registers. Fourth, `qt_cswap' needs to save and restore any floating-point registers that are callee-save (see your processor handbook). On some machines, *no* floating-point registers are callee-save, so `qt_cswap' is exactly the same as the integer-only cswap routine. I suggest staring at the MIPS code for a few minutes. It's "mostly" generic RISC code, so it gets a lot of the flavor across without getting too bogged down in little nitty details. Now for a bit more detail: The stack is laid out to hold callee-save registers. On many machines, I implemented fp cswap as save fp regs, call integer cswap, and when integer cswap returns (when the thread wakes up again), restore fp regs. For thread startup, I figure out some callee-save registers that I use to hold parameters to the startup routine (`only'). When the thread is being started it doesn't have any saved registers that need to be restored, but I go ahead and let the integer context switch routine restore some registers then "return" to the stub code. The stub code then copies the "callee save" registers to argument registers and calls the startup routine. That keeps the stub code pretty darn simple. For each machine I need to know the machine's procedure calling convention before I write a port. I figure out how many callee-save registers are there and allocate enough stack space for those registers. I also figure out how parameters are passed, since I will need to call the helper function. On most RISC machines, I just need to put the old sp in the 0'th arg register and then call indirect through the 3rd arg register; the 1st and 2nd arg registers are already set up correctly. Likewise, I don't touch the return value register between the helper's return and the context switch routine's return. I have a bunch of macros set up to do the stack initialization. The easiest way to debug this stuff is to go ahead and write a C routine to do stack initialization. Once you're happy with it you can turn it in to a macro. In general there's a lot of ugly macros, but most of them do simple things like return constants, etc. Any time you're looking at it and it looks confusing you just need to remember "this is actually simple code, the only tricky thing is calling the helper between the stack switch and the new thread's register restore." You will almost certainly need to write the assembly code fragment that starts a thread. You might be able to do a lot of the context switch code with `setjmp' and `longjmp', if they *happen* to have the "right" implementation. But getting all the details right (the helper can return a value to the new thread's cswap routine caller) is probaby trickier than writing code that does the minimum and thus doesn't have any extra instructions (or generality) to cause problems. I don't know of any ports besides those included with the source code distribution. If you send me a port I will hapily add it to the distribution. Let me know as you have questions and/or comments. ;-D on ( Now *that*'s a switch... ) Pardo systemc-2.3.4/src/sysc/packages/qt/md/0000755000175000017500000000000014342422106017437 5ustar carstencarstensystemc-2.3.4/src/sysc/packages/qt/md/sparc_b.s0000644000175000017500000000275414342422106021244 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ .globl _b_call_reg .globl _b_call_imm .globl _b_add .globl _b_load _b_null: retl nop _b_call_reg: sethi %hi(_b_null),%o4 or %o4,%lo(_b_null),%o4 add %o7,%g0, %o3 L0: call %o4 nop call %o4 nop call %o4 nop call %o4 nop call %o4 nop subcc %o0,1,%o0 bg L0 nop add %o3,%g0, %o7 retl nop _b_call_imm: sethi %hi(_b_null),%o4 or %o4,%lo(_b_null),%o4 add %o7,%g0, %o3 L1: call _b_null call _b_null call _b_null call _b_null call _b_null subcc %o0,1,%o0 bg L0 nop add %o3,%g0, %o7 retl nop _b_add: add %o0,%g0,%o1 add %o0,%g0,%o2 add %o0,%g0,%o3 add %o0,%g0,%o4 L2: sub %o0,5,%o0 sub %o1,5,%o1 sub %o2,5,%o2 sub %o3,5,%o3 sub %o4,5,%o4 subcc %o0,5,%o0 sub %o1,5,%o1 sub %o2,5,%o2 sub %o3,5,%o3 sub %o4,5,%o4 bg L2 nop retl nop _b_load: ld [%sp+ 0], %g0 L3: ld [%sp+ 4],%g0 ld [%sp+ 8],%g0 ld [%sp+12],%g0 ld [%sp+16],%g0 ld [%sp+20],%g0 ld [%sp+24],%g0 ld [%sp+28],%g0 ld [%sp+32],%g0 ld [%sp+36],%g0 subcc %o0,10,%o0 bg L3 ld [%sp+ 0],%g0 retl nop systemc-2.3.4/src/sysc/packages/qt/md/hppa-cnx.Makefile0000644000175000017500000000063014342422106022613 0ustar carstencarsten# This file (cnx_spp.Makefile) is part of the port of QuickThreads for # PA-RISC 1.1 architecture on a Convex SPP. This file is a machine dependent # makefile for QuickThreads. It was written in 1994 by Uwe Reder # (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems # Department (IMMD4) at the University of Erlangen/Nuernberg Germany. # `Normal' configuration. CC = /usr/convex/bin/cc systemc-2.3.4/src/sysc/packages/qt/md/null.s0000644000175000017500000000075314342422106020602 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ systemc-2.3.4/src/sysc/packages/qt/md/axp.Makefile0000644000175000017500000000004714342422106021667 0ustar carstencarsten # # GNU CC # CC = gcc -D__AXP__ systemc-2.3.4/src/sysc/packages/qt/md/ksr1_b.s0000644000175000017500000000202314342422106021001 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ .file "ksr1_b.s" .def .debug; .endef .globl b_call_reg$TXT .globl b_call_reg .globl b_call_imm$TXT .globl b_call_imm .globl b_add$TXT .globl b_add .globl b_load$TXT .globl b_load b_call_reg: b_call_imm: b_add: b_load: .word b_call_reg$TXT .word qt_error .word qt_error$TXT b_call_reg$TXT: b_call_imm$TXT: b_add$TXT: b_load$TXT: finop ; cxnop finop ; cxnop finop ; ld8 16(%cp),%c4 finop ; ld8 8(%cp),%cp finop ; cxnop finop ; cxnop finop ; jsr %c4,0(%c4) finop ; cxnop finop ; cxnop systemc-2.3.4/src/sysc/packages/qt/md/powerpc.README0000644000175000017500000000117714342422106022003 0ustar carstencarsten PowerPC assembly support 1) MacOS X, Darwin, MKLinux and other systems based on Mach kernel ABI: - Configuration command: ./config powerpc-darwin - See documentation inside powerpc_mach.h, powerpc_mach.s, powerpc.c. 2) LinuxPPC, and other systems based on System V ABI: - Configuration command: ./config powerpc - See documentation inside powerpc_sys5.h, powerpc_sys5.s, powerpc.c. Marco Bucci December 2002 * This software is largely based on the original PowerPC-Linux porting * developed by Ken Aaker * * Marco Bucci * December 2002 systemc-2.3.4/src/sysc/packages/qt/md/hppa.h0000644000175000017500000001442114342422106020542 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ /* * This file (pa-risc.h) is part of the port of QuickThreads for the * PA-RISC 1.1 architecture. This file is a machine dependent header * file. It was written in 1994 by Uwe Reder * (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems * Department (IMMD4) at the University of Erlangen/Nuernberg Germany. */ #ifndef QUICKTHREADS_PA_RISC_H #define QUICKTHREADS_PA_RISC_H #if 0 #include #endif /* size of an integer-register (32 bit) */ typedef unsigned long qt_word_t; /* PA-RISC's stack grows up */ #define QUICKTHREADS_GROW_UP /* Stack layout on PA-RISC according to PA-RISC Procedure Calling Conventions: Callee-save registers are: gr3-gr18, fr12-fr21. Also save gr2, return pointer. +--- | fr12 Each floating register is a double word (8 bytes). | fr13 Floating registers are only saved if `qt_block' is | fr14 called, in which case it saves the floating-point | fr15 registers then calls `qt_blocki' to save the integer | fr16 registers. | fr17 | fr18 | fr19 | fr20 | fr21 | fixed arguments (must be allocated; may remain unused) | | | | frame marker | | | | | | | +--- | gr3 word each (4 bytes) | gr4 | gr5 | gr6 | gr7 | gr8 | gr9 | gr10 | gr11 | gr12 | gr13 | gr14 | gr15 | gr16 | gr17 | gr18 | <16 bytes filled in (sp has to be 64-bytes aligned)> | fixed arguments (must be allocated; may remain unused) | | | | frame marker | | | | | | | +--- <--- sp */ /* When a never-before-run thread is restored, the return pc points to a fragment of code that starts the thread running. For non-vargs functions, it just calls the client's `only' function. For varargs functions, it calls the startup, user, and cleanup functions. */ /* Note: Procedue Labels on PA-RISC <--2--><-------28---------><1-><1-> ----------------------------------- | SID | Adress Part | L | X | ----------------------------------- On HP-UX the L field is used to flag wheather the procedure label (plabel) is a pointer to an LT entry or to the entry point of the procedure (PA-RISC Procedure Calling Conventions Reference Manual, 5.3.2 Procedure Labels and Dynamic Calls). */ #define QUICKTHREADS_PA_RISC_READ_PLABEL(plabel) \ ( (((int)plabel) & 2) ? \ ( (*((int *)(((int)plabel) & 0xfffffffc)))) : ((int)plabel) ) /* Stack must be 64 bytes aligned. */ #define QUICKTHREADS_STKALIGN (64) /* Internal helper for putting stuff on stack (negative index!). */ #define QUICKTHREADS_SPUT(top, at, val) \ (((qt_word_t *)(top))[-(at)] = (qt_word_t)(val)) /* Offsets of various registers which are modified on the stack. rp (return-pointer) has to be stored in the frame-marker-area of the "older" stack-segment. */ #define QUICKTHREADS_crp (12+4+16+5) #define QUICKTHREADS_15 (12+4+4) #define QUICKTHREADS_16 (12+4+3) #define QUICKTHREADS_17 (12+4+2) #define QUICKTHREADS_18 (12+4+1) /** This stuff is for NON-VARARGS. **/ /* Stack looks like this (2 stack frames): <--- 64-bytes aligned --><------- 64-bytes aligned ------------> | || | <--16--><------48-------><----16*4-----><--16-><------48-------> || | || | | || ||filler|arg|frame-marker||register-save|filler|arg|frame-marker|| ------------------------------------------------------------------ */ #define QUICKTHREADS_STKBASE (16+48+(16*sizeof(qt_word_t))+16+48) /* The index, relative to sp, of where to put each value. */ #define QUICKTHREADS_ONLY_INDEX (QUICKTHREADS_15) #define QUICKTHREADS_USER_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_ARGT_INDEX (QUICKTHREADS_17) #define QUICKTHREADS_ARGU_INDEX (QUICKTHREADS_18) extern void qt_start(void); #define QUICKTHREADS_ARGS_MD(sp) \ (QUICKTHREADS_SPUT (sp, QUICKTHREADS_crp, QUICKTHREADS_PA_RISC_READ_PLABEL(qt_start))) /** This is for VARARGS. **/ #define QUICKTHREADS_VARGS_DEFAULT /* Stack looks like this (2 stack frames): <------ 64-bytes aligned -------><--------- 64-bytes aligned ----------> | || | <---?--><--?---><16><----32-----><----16*4-----><-16--><16><----32-----> || | | | || | | | || ||filler|varargs|arg|frame-marker||register-save|filler|arg|frame-marker|| -------------------------------------------------------------------------- */ /* Sp is moved to the end of the first stack frame. */ #define QUICKTHREADS_VARGS_MD0(sp, vasize) \ ((qt_t *)(((char *)sp) + QUICKTHREADS_STKROUNDUP(vasize + 4*4 + 32))) /* To reach the arguments from the end of the first stack frame use 32 as a negative adjustment. */ #define QUICKTHREADS_VARGS_ADJUST(sp) ((qt_t *)(((char *)sp) - 32)) /* Offset to reach the end of the second stack frame. */ #define QUICKTHREADS_VSTKBASE ((16*sizeof(qt_word_t)) + 16 + 4*4 + 32) extern void qt_vstart(void); #define QUICKTHREADS_VARGS_MD1(sp) \ (QUICKTHREADS_SPUT (sp, QUICKTHREADS_crp, QUICKTHREADS_PA_RISC_READ_PLABEL(qt_vstart))) #define QUICKTHREADS_VARGT_INDEX (QUICKTHREADS_15) #define QUICKTHREADS_VSTARTUP_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_VUSERF_INDEX (QUICKTHREADS_17) #define QUICKTHREADS_VCLEANUP_INDEX (QUICKTHREADS_18) #endif /* ndef QUICKTHREADS_PA_RISC_H */ systemc-2.3.4/src/sysc/packages/qt/md/ksr1.Makefile0000644000175000017500000000006014342422106021752 0ustar carstencarsten # # KSR1 configuration. # CC = cc -ansi systemc-2.3.4/src/sysc/packages/qt/md/m88k.s0000644000175000017500000000760614342422106020423 0ustar carstencarsten/* m88k.s -- assembly support. */ /* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ /* Callee-save r14..r25, r31(sp), r30(fp). r1 === return pc. * Argument registers r2..r9, return value r2..r3. * * On startup, restore regs so retpc === call to a function to start. * * We're going to call a function (r2) from within the context switch * routine. Call it on the new thread's stack on behalf of the old * thread. */ .globl _qt_block .globl _qt_blocki .globl _qt_abort .globl _qt_start .globl _qt_vstart /* ** r2: ptr to function to call once curr is suspended ** and control is on r5's stack. ** r3: 1'th arg to *r2. ** r4: 2'th arg to *r2. ** r5: sp of thread to suspend. ** ** The helper routine returns a value that is passed on as the ** return value from the blocking routine. Since we don't ** touch r2 between the helper's return and the end of ** function, we get this behavior for free. ** ** Same entry for integer-only and floating-point, since there ** are no separate integer and floating-point registers. ** ** Each procedure call sets aside a ``home region'' of 8 regs ** for r2-r9 for varargs. For context switches we don't use ** the ``home region'' for varargs so use it to save regs. ** Allocate 64 bytes of save space -- use 32 bytes of register ** save area passed in to us plus 32 bytes we allcated, use ** the other 32 bytes for save area for a save area to call ** the helper function. */ _qt_block: _qt_blocki: sub r31, r31,64 /* Allocate reg save space. */ st r1, r31,8+32 /* Save callee-save registers. */ st r14, r31,12+32 st.d r15, r31,16+32 st.d r17, r31,24+32 st.d r19, r31,32+32 st.d r21, r31,40+32 st.d r23, r31,48+32 st r25, r31,56+32 st r30, r31,60+32 _qt_abort: addu r14, r31,0 /* Remember old sp. */ addu r31, r5,0 /* Set new sp. */ jsr.n r2 /* Call helper. */ addu r2, r14,0 /* Pass old sp as an arg0 to helper. */ ld r1, r31,8+32 /* Restore callee-save registers. */ ld r14, r31,12+32 ld.d r15, r31,16+32 ld.d r17, r31,24+32 ld.d r19, r31,32+32 ld.d r21, r31,40+32 ld.d r23, r31,48+32 ld r25, r31,56+32 ld r30, r31,60+32 jmp.n r1 /* Return to new thread's caller. */ addu r31, r31,64 /* Free register save space. */ /* ** Non-varargs thread startup. ** See `m88k.h' for register use conventions. */ _qt_start: addu r2, r14,0 /* Set user arg `pu'. */ addu r3, r15,0 /* ... user function pt. */ jsr.n r17 /* Call `only'. */ addu r4, r16,0 /* ... user function userf. */ bsr _qt_error /* `only' erroniously returned. */ /* ** Varargs thread startup. ** See `m88k.h' for register use conventions. ** ** Call the `startup' function with just argument `pt'. ** Then call `vuserf' with 8 register args plus any ** stack args. ** Then call `cleanup' with `pt' and the return value ** from `vuserf'. */ _qt_vstart: addu r18, r30,0 /* Remember arg7 to `vuserf'. */ addu r30, r0,0 /* Null-terminate call chain. */ jsr.n r17 /* Call `startup'. */ addu r2, r15,0 /* `pt' is arg0 to `startup'. */ addu r2, r19,0 /* Set arg0. */ addu r3, r20,0 /* Set arg1. */ addu r4, r21,0 /* Set arg2. */ addu r5, r22,0 /* Set arg3. */ addu r6, r23,0 /* Set arg4. */ addu r7, r24,0 /* Set arg5. */ addu r8, r25,0 /* Set arg6. */ jsr.n r16 /* Call `vuserf'. */ addu r9, r18,0 /* Set arg7. */ addu r3, r2,0 /* Ret. value is arg1 to `cleanup'. */ jsr.n r14 /* Call `cleanup'. */ addu r2, r15,0 /* `pt' is arg0 to `cleanup'. */ bsr _qt_error /* `cleanup' erroniously returned. */ systemc-2.3.4/src/sysc/packages/qt/md/powerpc_sys5_b.s0000644000175000017500000000644514342422106022577 0ustar carstencarsten/* speed test for basic CPU operations */ /* Marco Bucci */ /* This code was developed with the Code Warrior integrate ppc assembler. * Macros are use to hide illegal constructs whether you are using a * "normal" assembler or the "C integrated" assembler. */ #if 0 .text .align 4 .globl b_call_reg .globl _b_call_reg .globl b_call_imm .globl _b_call_imm .globl b_add .globl _b_add .globl b_load .globl _b_load .set fsize, 64 .set lrsave, 4 #else #define fsize 64 #define lrsave 4 #endif #if 0 .if 0 #endif asm void b_null(void) { #if 0 .endif #endif #if 0 b_null: #endif blr #if 0 .if 0 #endif } #if 0 .endif #endif /* actually the same as the following. How to get "b_null" address? * I didnt find the right sintax or the right way. * I should take the current PC, then the difference to "b_null" * (making the difference beween the labels), perform the sum and go?! */ #if 0 .if 0 #endif asm void b_call_reg(long n) { #if 0 .endif #endif #if 0 b_call_reg: _b_call_reg: #endif mflr %r0 stw %r31,-4(%r1) stw %r30,-8(%r1) stw %r0,lrsave(%r1) stwu %r1,-fsize(%r1) mr %r30,%r3 li %r31,0 b L1 L0: bl b_null bl b_null bl b_null bl b_null bl b_null addi %r31,%r31,5 L1: cmpw %r31,%r30 blt L0 lwz %r0,lrsave+fsize(%r1) mtlr %r0 lwz %r31,-4+fsize(%r1) lwz %r30,-8+fsize(%r1) addi %r1,%r1,fsize blr #if 0 .if 0 #endif } #if 0 .endif #endif #if 0 .if 0 #endif asm void b_call_imm(long n) { #if 0 .endif #endif #if 0 b_call_imm: _b_call_imm: #endif mflr %r0 stw %r31,-4(%r1) stw %r30,-8(%r1) stw %r0,lrsave(%r1) stwu %r1,-fsize(%r1) mr %r30,%r3 li %r31,0 b L3 L2: bl b_null bl b_null bl b_null bl b_null bl b_null addi %r31,%r31,5 L3: cmpw %r31,%r30 blt L2 lwz %r0,lrsave+fsize(%r1) mtlr %r0 lwz %r31,-4+fsize(%r1) lwz %r30,-8+fsize(%r1) addi %r1,%r1,fsize blr #if 0 .if 0 #endif } #if 0 .endif #endif #if 0 .if 0 #endif asm void b_add(long n) { #if 0 .endif #endif #if 0 b_add: _b_add: #endif mflr %r0 stw %r31,-4(%r1) stw %r30,-8(%r1) stw %r0,lrsave(%r1) stwu %r1,-fsize(%r1) mr %r30,%r3 li %r31,0 b L5 L4: addi %r3,%r3,5 addi %r4,%r4,5 addi %r5,%r5,5 addi %r6,%r6,5 addi %r7,%r7,5 addi %r3,%r3,5 addi %r4,%r4,5 addi %r5,%r5,5 addi %r6,%r6,5 addi %r7,%r7,5 addi %r31,%r31,10 L5: cmpw %r31,%r30 blt L4 lwz %r0,lrsave+fsize(%r1) mtlr %r0 lwz %r31,-4+fsize(%r1) lwz %r30,-8+fsize(%r1) addi %r1,%r1,fsize blr #if 0 .if 0 #endif } #if 0 .endif #endif #if 0 .if 0 #endif asm void b_load(long n) { #if 0 .endif #endif #if 0 b_load: _b_load: #endif mflr %r0 stw %r31,-4(%r1) stw %r30,-8(%r1) stw %r0,lrsave(%r1) stwu %r1,-fsize(%r1) mr %r30,%r3 li %r31,0 b L7 L6: lwz %r3,4(%r1) lwz %r4,8(%r1) lwz %r5,12(%r1) lwz %r6,16(%r1) lwz %r7,20(%r1) lwz %r3,24(%r1) lwz %r4,28(%r1) lwz %r5,32(%r1) lwz %r6,36(%r1) lwz %r7,40(%r1) addi %r31,%r31,10 L7: cmpw %r31,%r30 blt L6 lwz %r0,lrsave+fsize(%r1) mtlr %r0 lwz %r31,-4+fsize(%r1) lwz %r30,-8+fsize(%r1) addi %r1,%r1,fsize blr #if 0 .if 0 #endif } #if 0 .endif #endif systemc-2.3.4/src/sysc/packages/qt/md/mips.s0000644000175000017500000001173414342422106020601 0ustar carstencarsten/* mips.s -- assembly support. */ /* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ /* Callee-save $16-$23, $30-$31. * * On startup, restore regs so retpc === call to a function to start. * We're going to call a function ($4) from within this routine. * We're passing 3 args, therefore need to allocate 12 extra bytes on * the stack for a save area. The start routine needs a like 16-byte * save area. Must be doubleword aligned (_mips r3000 risc * architecture_, gerry kane, pg d-23). */ .globl qt_block .globl qt_blocki .globl qt_abort .globl qt_start .globl qt_vstart /* ** $4: ptr to function to call once curr is suspended ** and control is on $7's stack. ** $5: 1'th arg to $4. ** $6: 2'th arg to $4 ** $7: sp of thread to suspend. ** ** Totally gross hack: The MIPS calling convention reserves ** 4 words on the stack for a0..a3. This routine "ought" to ** allocate space for callee-save registers plus 4 words for ** the helper function, but instead we use the 4 words ** provided by the function that called us (we don't need to ** save our argument registers). So what *appears* to be ** allocating only 40 bytes is actually allocating 56, by ** using the caller's 16 bytes. ** ** The helper routine returns a value that is passed on as the ** return value from the blocking routine. Since we don't ** touch $2 between the helper's return and the end of ** function, we get this behavior for free. */ qt_blocki: sub $sp,$sp,40 /* Allocate reg save space. */ sw $16, 0+16($sp) sw $17, 4+16($sp) sw $18, 8+16($sp) sw $19,12+16($sp) sw $20,16+16($sp) sw $21,20+16($sp) sw $22,24+16($sp) sw $23,28+16($sp) sw $30,32+16($sp) sw $31,36+16($sp) add $2, $sp,$0 /* $2 <= old sp to pass to func@$4. */ qt_abort: add $sp, $7,$0 /* $sp <= new sp. */ .set noreorder jal $31,$4 /* Call helper func@$4 . */ add $4, $2,$0 /* $a0 <= pass old sp as a parameter. */ .set reorder lw $31,36+16($sp) /* Restore callee-save regs... */ lw $30,32+16($sp) lw $23,28+16($sp) lw $22,24+16($sp) lw $21,20+16($sp) lw $20,16+16($sp) lw $19,12+16($sp) lw $18, 8+16($sp) lw $17, 4+16($sp) lw $16, 0+16($sp) /* Restore callee-save */ add $sp,$sp,40 /* Deallocate reg save space. */ j $31 /* Return to caller. */ /* ** Non-varargs thread startup. ** Note: originally, 56 bytes were allocated on the stack. ** The thread restore routine (_blocki/_abort) removed 40 ** of them, which means there is still 16 bytes for the ** argument area required by the MIPS calling convention. */ qt_start: add $4, $16,$0 /* Load up user function pu. */ add $5, $17,$0 /* ... user function pt. */ add $6, $18,$0 /* ... user function userf. */ jal $31,$19 /* Call `only'. */ j qt_error /* ** Save calle-save floating-point regs $f20-$f30 ** See comment in `qt_block' about calling conventinos and ** reserved space. Use the same trick here, but here we ** actually have to allocate all the bytes since we have to ** leave 4 words leftover for `qt_blocki'. ** ** Return value from `qt_block' is the same as the return from ** `qt_blocki'. We get that for free since we don't touch $2 ** between the return from `qt_blocki' and the return from ** `qt_block'. */ qt_block: sub $sp, $sp,56 /* 6 8-byte regs, saved ret pc, aligned. */ swc1 $f20, 0+16($sp) swc1 $f22, 8+16($sp) swc1 $f24, 16+16($sp) swc1 $f26, 24+16($sp) swc1 $f28, 32+16($sp) swc1 $f30, 40+16($sp) sw $31, 48+16($sp) jal qt_blocki lwc1 $f20, 0+16($sp) lwc1 $f22, 8+16($sp) lwc1 $f24, 16+16($sp) lwc1 $f26, 24+16($sp) lwc1 $f28, 32+16($sp) lwc1 $f30, 40+16($sp) lw $31, 48+16($sp) add $sp, $sp,56 j $31 /* ** First, call `startup' with the `pt' argument. ** ** Next, call the user's function with all arguments. ** Note that we don't know whether args were passed in ** integer regs, fp regs, or on the stack (See Gerry Kane ** "MIPS R2000 RISC Architecture" pg D-22), so we reload ** all the registers, possibly with garbage arguments. ** ** Finally, call `cleanup' with the `pt' argument and with ** the return value from the user's function. It is an error ** for `cleanup' to return. */ qt_vstart: add $4, $17,$0 /* `pt' is arg0 to `startup'. */ jal $31, $18 /* Call `startup'. */ add $sp, $sp,16 /* Free extra save space. */ lw $4, 0($sp) /* Load up args. */ lw $5, 4($sp) lw $6, 8($sp) lw $7, 12($sp) lwc1 $f12, 0($sp) /* Load up fp args. */ lwc1 $f14, 8($sp) jal $31,$19 /* Call `userf'. */ add $4, $17,$0 /* `pt' is arg0 to `cleanup'. */ add $5, $2,$0 /* Ret. val is arg1 to `cleanup'. */ jal $31, $16 /* Call `cleanup'. */ j qt_error systemc-2.3.4/src/sysc/packages/qt/md/powerpc.c0000644000175000017500000000415514342422106021267 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #include #include "qt.h" // This static is used to find the end of the stack for variable static void *qt_sp_bottom_save; /* We actually don't know how the compiler accomodates arguments in the * va_list. In some implementation (e.g. Linux PPC) we cannot scan the * list as an array. To avoid this problem, this version of "qt_varg", * retrieves arguments by means of the standard "va_arg" macro defined * in stdargs.h. * * Notice that we still suppose that the number of arguments is given * by nbytes/sizeof(qt_word_t) and we load the stack of "qt_vstart" * assuming that all parameters are alligned to the size of qt_word_t. * * Marco Bucci * December 2002 */ /* qt_t *qt_vargs (qt_t *sp, int nbytes, void *vargs, void *pt, qt_startup_t *startup, qt_vuserf_t *vuserf, qt_cleanup_t *cleanup) */ qt_t * qt_vargs_stdarg (qt_t *sp, int nbytes, va_list vargs, void *pt, qt_startup_t *startup, qt_vuserf_t *vuserf, qt_cleanup_t *cleanup) { int i; qt_word_t arg; sp = QUICKTHREADS_VARGS_MD0 (sp, nbytes); for ( i=0;i<(int)(nbytes/sizeof(qt_word_t)); i++) { arg = va_arg(vargs, qt_word_t); QUICKTHREADS_SPUT (QUICKTHREADS_VARGS_ADJUST(sp), i, arg); } QUICKTHREADS_VARGS_MD1 (QUICKTHREADS_VADJ(sp)); QUICKTHREADS_SPUT (QUICKTHREADS_VADJ(sp), QUICKTHREADS_VARGT_INDEX, pt); QUICKTHREADS_SPUT (QUICKTHREADS_VADJ(sp), QUICKTHREADS_VSTARTUP_INDEX, startup); QUICKTHREADS_SPUT (QUICKTHREADS_VADJ(sp), QUICKTHREADS_VUSERF_INDEX, vuserf); QUICKTHREADS_SPUT (QUICKTHREADS_VADJ(sp), QUICKTHREADS_VCLEANUP_INDEX, cleanup); return ((qt_t *)QUICKTHREADS_VADJ(sp)); } systemc-2.3.4/src/sysc/packages/qt/md/null.c0000644000175000017500000000115714342422106020561 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ char const qtmd_rcsid[] = "$Header: /Users/acg/CVSROOT/systemc-2.3/src/sysc/qt/md/null.c,v 1.1.1.1 2006/12/15 20:20:06 acg Exp $"; systemc-2.3.4/src/sysc/packages/qt/md/axp.c0000644000175000017500000000743014342422106020377 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #include #include "qt.h" /* Varargs is harder on the AXP. Parameters are saved on the stack as something like (stack grows down to low memory; low at bottom of picture): | : | arg6 +--- | iarg5 | : | iarg3 <-- va_list._a0 + va_list._offset | : | iarg0 <-- va_list._a0 +--- | farg5 | : | farg0 +--- When some of the arguments have known type, there is no need to save all of them in the struct. So, for example, if the routine is called zork (int a0, float a1, int a2, ...) { va_list ap; va_start (ap, a2); qt_vargs (... &ap ...); } then offset is set to 3 * 8 (8 === sizeof machine word) = 24. What this means for us is that the user's routine needs to be called with an arg list where some of the words in the `any type' parameter list have to be split and moved up in to the int/fp region. Ways in which this can fail: - The user might not know the size of the pushed arguments anyway. - Structures have funny promotion rules. - Probably lots of other things. All in all, we never promised varargs would work reliably. */ #define QUICKTHREADS_VADJ(sp) (((char *)sp) - QUICKTHREADS_VSTKBASE) #define QUICKTHREADS_VARGS_MD0(sp, vabytes) \ ((qt_t *)(((char *)(sp)) - 6*2*8 - QUICKTHREADS_STKROUNDUP(vabytes))) extern void qt_vstart(void); #define QUICKTHREADS_VARGS_MD1(sp) (QUICKTHREADS_SPUT (sp, QUICKTHREADS_R26, qt_vstart)) /* Different machines use different implementations for varargs. Unfortunately, the code below ``looks in to'' the varargs structure, `va_list', and thus depends on the conventions. The following #defines try to deal with it but don't catch everything. */ #ifdef __GNUC__ #define _a0 __base #define _offset __offset #else #ifdef __OSF1__ #define _a0 a0 #define _offset offset #endif #endif /* def __GNUC__ */ struct qt_t * qt_vargs (struct qt_t *qsp, int nbytes, struct va_list *vargs, void *pt, qt_function_t *startup, qt_function_t *vuserf, qt_function_t *cleanup) { va_list ap; int i; int max; /* Maximum *words* of args to copy. */ int tmove; /* *Words* of args moved typed->typed. */ qt_word_t *sp; ap = *(va_list *)vargs; qsp = QUICKTHREADS_VARGS_MD0 (qsp, nbytes); sp = (qt_word_t *)qsp; tmove = 6 - ap._offset/sizeof(qt_word_t); /* Copy from one typed area to the other. */ for (i=0; i + * + * Marco Bucci + * December 2002 + * + */ #ifndef QUICKTHREADS_POWERPC_H #define QUICKTHREADS_POWERPC_H /***************************************************************************** * * DESCRIPTION * * This is the QuickThreads switching module implementation for PowerPC * running under Mach kernel. It was developed and tested under MacOS X, that * is under Darwin (the UNIX-BSD fundation of MacOS X). * * Notice that the Mach PowerPC ABI (Application Binary Interface) [1] is * not the same than System V ABI [2] used by most of the LINUX PowerPC * implementations. * * IMPLEMENTATION NOTES * * 1) Porting on System V ABI * Excluding the variant argument calling convention, Mach and System V ABI * are enough similar and it could be possible to use some simple macro, to * adapt the code for both the ABIs. Actually, the only relevant difference * is in the linkage area structure and in the position where the Link and * the Condition registers are saved. As to the calling conventions, there * are differences with floating points argument passing and with variant * argument lists. Notice that, on Mach, the caller's stack frame allocates * space to hold all arguments ([1] p.51), while on System V, the caller's * stack frame allocates space to hold just the arguments that don't fit into * registers ([2] p.3.18). * * 2) Variant argument list implementation * Variant argument calling on a RISC machine is not easy to implement since * parameters are passed via registers instead of via stack. In a general * variant argument implementation, the caller's stack must map the whole * parameter list following the rules related to the use of the GPR and FPR * parameter registers and the stack alignment ([1] p.54). * This implementation is quite simple and not general. It works under the * hypothesis that arguments are 4-bytes aligned integers. * * 3) This heather file organisation * I preferred to not make confusion between macros that are needed (i.e. * directly used) by QuickThreads and internal "implementation" macros. You * will find QuickThreds macros in the end of this header. Sometime they just * refer to an analogous "internal" macro. On the top, there are the macros * that I used to make more clean (I hope) the implementation. I could include * some system heather (as to stack layout definitions, prologs and epilogs, * etc.), but I preferred to have a self-contained heather in order to make * all more clear for mantaining and for possible porting on another ABI. * * * REFERENCES * * [1] - Mach-O Runtime Architecture * Runtime Concepts and Conventions for Mac OS X Programs * Preliminary July 2002 * * [2] - SYSTEM V APPLICATION BINARY INTERFACE * PowerPC Processor Supplement * September 1995 * * On MacOS X, more documentation is available by installing the "Developer * Tools". Useful macros and documentation can be found in the system headers * files such as asm.h, asm_help.h etc. (see /usr/architecture/ppc/ or * /System/Library/Frameworks/Kernel.framework/Headers/architecture/ppc/). *****************************************************************************/ /***************************************************************************** * * PowerPC Mach-O Stack frame (see [1]) * ................ + + | | reserved + CALLER'S LINKAGE AREA + | | Caller's LR + + | | Caller's CR + + backchain -> | | Caller's backchain +==========================+ | | FPR31 + FPR SAVE AREA + .............. + + | | FPRn +--------------------------+ | | GPR31 + GPR SAVE AREA + .............. + + | | GPRn +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | PAR(n) + + | | + PARAMETER AREA + .............. + for FUTURE call + | | PAR(1) + + SP + 24 -> | | PAR(0) +--------------------------+ SP + 20 -> | | Caller's TOC + + SP + 16 -> | | reserved + + SP + 12 -> | | reserved + LINKAGE AREA + SP + 8 -> | | LR callee-save for FUTURE call + + SP + 4 -> | | CR callee-save for FUTURE call + + SP -> | | backchain +==========================+ STACK TOP (lower address) Stack grows down | V * NOTE: * * 1) Parameter are allocated in the CALLER's parameter area. This area must * be large enough to hold all parameters regardless if they are or not passed * in registers. * * The caller parameter area is used: * - by the caller, to store parameters to the callee that cannot fit in * registers (no more parameter registers are available); * - by the callee, to save parameter registers (for istance because they are * needed for a further call). * * Obviously, the callee saves parameter registers, in the location in which * they are mapped on the caller's stack frame. So, be aware that, if * something else is stored in that location, it could be deleted after a call. * * 2) The callee saves LR and CR in the caller's linkage area. All other * callee's state are saved in its own stack frame. * *****************************************************************************/ /***************************************************************************** * * Stack initialization for a single argument thread * top + QUICKTHREADS_STKBASE -> STACK BOTTOM (higher address) +==========================+ | | + + .............. + + | | +--------------------------+ top + QUICKTHREADS_ONLY_INDEX * 4 -> | only param | PAR(3) + + top + QUICKTHREADS_USER_INDEX * 4 -> | userf param | PAR(2) + + top + QUICKTHREADS_ARGT_INDEX * 4 -> | t param | PAR(1) + + top + QUICKTHREADS_ARGU_INDEX * 4 -> | u param | PAR(0) +--------------------------+ | | + + .............. + + top + QUICKTHREADS_RETURN_INDEX * 4 -> | qt_start | LR save + + .............. + + top + QUICKTHREADS_BLOCKI_FRAME_SIZE -> | top + QUICKTHREADS_STKBASE | backchain +==========================+ | | + + .............. + + | | +--------------------------+ | | + + .............. + + top -> |top + QUICKTHREADS_BLOCKI_FRAME_SIZE| backchain +==========================+ STACK TOP (lower address) Stack grows down | V ***************************************************************************** * * Stack initialization for a variant argument thread * bottom -> STACK BOTTOM (higher address) +==========================+ | | + + .............. + + top + QUICKTHREADS_VSTKBASE -> | arg(0) | PAR(4) +--------------------------+ top + QUICKTHREADS_CLEANUP_INDEX * 4 -> | cleanup param | PAR(3) + + top + QUICKTHREADS_USER_INDEX * 4 -> | userf param | PAR(2) + + top + QUICKTHREADS_VSTARTUP_INDEX * 4 ->| startup param | PAR(1) + + top + QUICKTHREADS_ARGT_INDEX * 4 -> | t param | PAR(0) +--------------------------+ | | + + .............. + + top + QUICKTHREADS_RETURN_INDEX * 4 -> | qt_start | LR save + + .............. top + QUICKTHREADS_BLOCKI_FRAME_SIZE -> | top + QUICKTHREADS_STKBASE | backchain +==========================+ | | + + .............. + + | | +--------------------------+ | | + + .............. + + top -> |top + QUICKTHREADS_BLOCKI_FRAME_SIZE| backchain +==========================+ STACK TOP (lower address) Stack grows down | V * NOTE: * * Parameters are passed to "qt_start" or to "qt_vstart" putting them into * the stack frames of "qt_start" or "qt_vstart" themselves. This not a * conventional parameter passing because parameters should be put into the * caller's stack, not into the callee's one. Actually we must consider * that as a preload of the parameter area that "qt_start" or "qt_vstart" * will use for their own calls. * Be aware of the fact that, during a call, the caller's parameter area is, * in a certain sense, volatile. In facts, the callee can save parameter * registers on the caller's parameter area. * *****************************************************************************/ /***************************************************************************** Define PowerPC Mach-O related macros *****************************************************************************/ typedef unsigned long PPC_W; /* Stack pointer must always be a multiple of 16 */ #define PPC_STACK_INCR 16 #define PPC_ROUND_STACK(length) \ (((length)+PPC_STACK_INCR-1) & ~(PPC_STACK_INCR-1)) #define PPC_LINKAGE_AREA 24 #define PPC_CR_SAVE 4 #define PPC_LR_SAVE 8 #define PPC_PARAM_AREA(n) (4*(n)) #define PPC_GPR_SAVE_AREA (4*19) /* GPR13-GPR31 must be saved */ #define PPC_FPR_SAVE_AREA (8*18) /* FPR14-FPR31 must be saved */ /* Define parameter offset on the stack. * NOTICE: Parameters are numbered 0, 1, ..., n. */ #define PPC_PAR(i) (PPC_LINKAGE_AREA+(i)*4) /***************************************************************************** Define stack frames *****************************************************************************/ /* Define the "qt_blocki" and "qt_abort" stack frame. We use the same stack * frame for both. * top + S -> +==========================+ top + S - 4 -> | | GPR31 + GPR SAVE AREA + .............. + + top + S - 19 * 4 -> | | GPR13 +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | + + | | + PARAMETER AREA + | | + + top + 24 -> | | +--------------------------+ | | + LINKAGE AREA + top -> | | +==========================+ */ #define QUICKTHREADS_BLOCKI_FRAME_SIZE \ PPC_ROUND_STACK(PPC_LINKAGE_AREA+PPC_PARAM_AREA(4)+PPC_GPR_SAVE_AREA) /* Offset to the base of the GPR save area. Save from GPR13 to GPR31 * increasing address. */ #define QUICKTHREADS_BLOCKI_GPR_SAVE(i) (QUICKTHREADS_BLOCKI_FRAME_SIZE-4+(i-31)*4) /* Define the "qt_block" stack frame. Notice that since "qt_black" calls * "qt_blocki", GPR registers are saved into "qt_blocki" stack frame. * top + S -> +==========================+ top + S - 8 -> | | FPR31 + FPR SAVE AREA + .............. + + top + S - 18 * 8 -> | | FPR14 +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | + + | | + PARAMETER AREA + | | + + top + 24 -> | | +--------------------------+ | | + LINKAGE AREA + top -> | | +==========================+ */ #define QUICKTHREADS_BLOCK_FRAME_SIZE \ PPC_ROUND_STACK(PPC_LINKAGE_AREA+PPC_PARAM_AREA(4)+PPC_FPR_SAVE_AREA) /* Offset to the location where registers are saved. */ #define QUICKTHREADS_BLOCK_FPR_SAVE(i) (QUICKTHREADS_BLOCK_FRAME_SIZE-8+(i-31)*8) /* Define the "qt_start" frame size. It consists just of the linkage area and * the parameter area. * +==========================+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | only par + + | | userf par + PARAMETER AREA + | | t par + + top + 24 -> | | u par +--------------------------+ | | + LINKAGE AREA + top -> | | +==========================+ */ #define QUICKTHREADS_START_FRAME_SIZE PPC_ROUND_STACK(PPC_LINKAGE_AREA+PPC_PARAM_AREA(4)) /* Define the "qt_vstart" frame. It consists of the linkage area, the fix parameter * area, the variant argument list and a local variable area used in "qt_vstart" * implementation. * backchain -> +==========================+ backchain - 4 -> | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | arg(n) + + | | + VARIABLE ARGUMENT LIST + .............. + for userf call + | | arg(1) + + top + 24 + 16 -> | | arg(0) +--------------------------+ | | cleanup par + + | | userf par + PARAMETER AREA + | | startup par + + top + 24 -> | | t par +--------------------------+ | | + LINKAGE AREA + top -> | | +==========================+ */ #define QUICKTHREADS_VARGS_LOCAL_AREA (4*4) /* local variable area */ /* The offset the stack will be moved back before to call "userf(...)". * The linckage area must be moved to be adiacent to the part of the variant * argument list that is in the stack. */ #define QUICKTHREADS_VARGS_BKOFF PPC_PARAM_AREA(4) #define QUICKTHREADS_VSTART_FRAME_SIZE(varbytes) \ PPC_ROUND_STACK(PPC_LINKAGE_AREA+PPC_PARAM_AREA(4)+(varbytes)+ \ QUICKTHREADS_VARGS_LOCAL_AREA) /* Offset to the base of the varian argument list */ #define QUICKTHREADS_VSTART_LIST_BASE (PPC_LINKAGE_AREA+PPC_PARAM_AREA(4)) /* Notice that qt_start and qt_vstart have no parameters, actually their * parameters are written in their stack frame during thread initialization */ extern void qt_start(void); extern void qt_vstart(void); /* Offset (in words) of the location where the block routine saves its return * address (i.e. LR). SP points the top of the block routine stack and, * following ppc calling conventions, the return address is saved in the * previous (caller's) stack frame. */ #define QUICKTHREADS_RETURN_INDEX ((QUICKTHREADS_BLOCKI_FRAME_SIZE+PPC_LR_SAVE)/sizeof(PPC_W)) /* static variable used to get the stack bottom in "VARGS" initialization */ /* static void *qt_sp_bottom_save; */ #define QUICKTHREADS_ARG_INDEX(i) ((QUICKTHREADS_BLOCKI_FRAME_SIZE+PPC_PAR(i))/sizeof(PPC_W)) /***************************************************************************** QuickThreads needed definitions *****************************************************************************/ #define QUICKTHREADS_GROW_DOWN #define QUICKTHREADS_STKALIGN PPC_STACK_INCR typedef PPC_W qt_word_t; /* This macro is used by "QUICKTHREADS_ARGS" to initialize a single argument thread. * - set "qt_start" as the "qt_block" or "qt_blocki" return address; * - set the top of the stack backchain; * - set the next backchain (not needed, but just to be "clean"). */ #define QUICKTHREADS_ARGS_MD(sp) \ (QUICKTHREADS_SPUT (sp, QUICKTHREADS_RETURN_INDEX, qt_start), \ QUICKTHREADS_SPUT (sp, 0, sp+QUICKTHREADS_BLOCKI_FRAME_SIZE), \ QUICKTHREADS_SPUT (sp, QUICKTHREADS_BLOCKI_FRAME_SIZE/sizeof(PPC_W), \ sp+QUICKTHREADS_BLOCKI_FRAME_SIZE+QUICKTHREADS_START_FRAME_SIZE)) /* This macro is used by "QUICKTHREADS_VARGS" to initialize a variant argument thread. * It returns the pointer to the top of the argument list. * We also use it to get the stack bottom via a static variable. This is a bit * "dirty", it could be better to do it in "qt_vargs", but we don't want change * anything out of this file. * We need the stack bottom to allocate a local variable area used by * "qt_vstart". */ #define QUICKTHREADS_VARGS_MD0(sp, varbytes) \ ((qt_sp_bottom_save = sp), \ ((qt_t *)(((char *)(sp)) - \ (QUICKTHREADS_VSTART_FRAME_SIZE(varbytes)-QUICKTHREADS_VSTART_LIST_BASE)))) /* This macro is used by "QUICKTHREADS_VARGS" to initialize a variant argument thread. * - set "qt_start" as the "qt_block" or "qt_blocki" return address; * - set the top of the stackback chain; * - set the next backchain (it points the stack botton). */ #define QUICKTHREADS_VARGS_MD1(sp) \ (QUICKTHREADS_SPUT (sp, QUICKTHREADS_RETURN_INDEX, qt_vstart), \ QUICKTHREADS_SPUT (sp, 0, sp+QUICKTHREADS_BLOCKI_FRAME_SIZE), \ QUICKTHREADS_SPUT (sp, (QUICKTHREADS_BLOCKI_FRAME_SIZE)/sizeof(PPC_W), \ qt_sp_bottom_save)) /* Activate "qt_vargs" as the initialization routine for the variant * argument threads */ #define QUICKTHREADS_VARGS_DEFAULT /* Override "qt_vargs" with "qt_vargs_stdarg". * On LinuxPPC "qt_vargs" doesn't work, "qt_vargs_stdarg" uses a more * standard way to retrieve arguments from the variant list. */ #define QUICKTHREADS_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ ((qt_t *)qt_vargs_stdarg (sp, nbytes, vargs, pt, startup, vuserf, cleanup)) /* This macro is used by "QUICKTHREADS_ADJ(sp)" to get the stack top form the stack * bottom during a single argument thread initialization. * It is the space we need to allocate for a single argument thread: the stack * frame for the block routine ("qt_block" or "qt_blocki") and for "qt_start". */ #define QUICKTHREADS_STKBASE \ (QUICKTHREADS_BLOCKI_FRAME_SIZE+QUICKTHREADS_START_FRAME_SIZE) /* This macro is used by "QUICKTHREADS_VADJ(sp)" to get the stack top from the base * of the variant argument list during a variant argument thread initialization. */ #define QUICKTHREADS_VSTKBASE (QUICKTHREADS_BLOCKI_FRAME_SIZE+QUICKTHREADS_VSTART_LIST_BASE) /* The *index* (positive offset) of where to put each value. */ #define QUICKTHREADS_ARGU_INDEX QUICKTHREADS_ARG_INDEX(0) #define QUICKTHREADS_ARGT_INDEX QUICKTHREADS_ARG_INDEX(1) #define QUICKTHREADS_USER_INDEX QUICKTHREADS_ARG_INDEX(2) #define QUICKTHREADS_ONLY_INDEX QUICKTHREADS_ARG_INDEX(3) #define QUICKTHREADS_VARGT_INDEX QUICKTHREADS_ARG_INDEX(0) #define QUICKTHREADS_VSTARTUP_INDEX QUICKTHREADS_ARG_INDEX(1) #define QUICKTHREADS_VUSERF_INDEX QUICKTHREADS_ARG_INDEX(2) #define QUICKTHREADS_VCLEANUP_INDEX QUICKTHREADS_ARG_INDEX(3) #endif /* ndef QUICKTHREADS_POWERPC_H */ systemc-2.3.4/src/sysc/packages/qt/md/hppa.Makefile0000644000175000017500000000063514342422106022032 0ustar carstencarsten# This file (pa-risc.Makefile) is part of the port of QuickThreads for # PA-RISC 1.1 architecture. This file is a machine dependent makefile # for QuickThreads. It was written in 1994 by Uwe Reder # (`uereder@cip.informatik.uni-erlangen.de') for the Operating Systems # Department (IMMD4) at the University of Erlangen/Nuernberg Germany. # `Normal' configuration. CC = cc -Aa .s.o: /usr/ccs/bin/as -o $@ $< systemc-2.3.4/src/sysc/packages/qt/md/vax.s0000644000175000017500000000356214342422106020427 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ .text .globl _qt_abort .globl _qt_block .globl _qt_blocki .globl _qt_start .globl _qt_vstart /* // Calls to these routines have the signature // // void *block (func, arg1, arg2, newsp) // // Since the prologue saves 5 registers, nargs, pc, fp, ap, mask, and // a condition handler (at sp+0), the first argument is 40=4*10 bytes // offset from the stack pointer. */ _qt_block: _qt_blocki: _qt_abort: .word 0x7c0 /* Callee-save mask: 5 registers. */ movl 56(sp),r1 /* Get stack pointer of new thread. */ movl 52(sp),-(r1) /* Push arg2 */ movl 48(sp),-(r1) /* Push arg1 */ movl sp,-(r1) /* Push arg0 */ movl 44(sp),r0 /* Get helper to call. */ movl r1,sp /* Move to new thread's stack. */ addl3 sp,$12,fp /* .. including the frame pointer. */ calls $3,(r0) /* Call helper. */ ret _qt_start: movl (sp)+,r0 /* Get `only'. */ calls $3,(r0) /* Call `only'. */ calls $0,_qt_error /* `only' erroniously returned. */ _qt_vstart: movl (sp)+,r10 /* Get `pt'. */ movl (sp)+,r9 /* Get `startup'. */ movl (sp)+,r8 /* Get `vuserf'. */ movl (sp)+,r7 /* Get `cleanup'. */ pushl r10 /* Push `qt'. */ calls $1,(r9) /* Call `startup', pop `qt' on return. */ calls (sp)+,(r8) /* Call user's function. */ pushl r0 /* Push `vuserf_retval'. */ pushl r10 /* Push `qt'. */ calls $2,(r7) /* Call `cleanup', never return. */ calls $0,_qt_error /* `cleanup' erroniously returned. */ systemc-2.3.4/src/sysc/packages/qt/md/solaris.README0000644000175000017500000000071214342422106021772 0ustar carstencarstenSolaris 2.x is like System V (maybe it *is* System V?) and is different from older versions in that it uses no leading underscore for variable and function names. That is, the old convention was: foo(){} got compiled as .globl _foo _foo: and is now compiled as .globl foo foo: The `config' script should fix up the older (leading underscore) versions of the machine-dependent files to use the newer (no leading underscore) calling conventions. systemc-2.3.4/src/sysc/packages/qt/md/aarch64.s0000644000175000017500000000336214342422106021057 0ustar carstencarsten .text .align 2 .extern qt_error .globl _qt_start .globl qt_start .globl _qt_abort .globl qt_abort .globl _qt_block .globl qt_block .globl _qt_blocki .globl qt_blocki .globl _qt_align .globl qt_align _qt_start: qt_start: mov x0, x25 mov x1, x26 mov x2, x27 br x28 // The branch above should never return, // and there is nowhere for us to return to. br =qt_error _qt_abort: qt_abort: _qt_block: qt_block: _qt_blocki: qt_blocki: // 1. Store, // 2. Swap stacks and args, // 4. Call helper, // 3. Load, // 5. Return to execution. // Call before load because x30 (link pointer) // is not callee-saved. // Callee-saved stp x29, x30, [sp, #-16] // frame, link stp x27, x28, [sp, #-32] stp x25, x26, [sp, #-48] stp x23, x24, [sp, #-64] stp x21, x22, [sp, #-80] stp x19, x20, [sp, #-96] // float, SIMD stp d14, d15, [sp, #-112] stp d12, d13, [sp, #-128] stp d10, d11, [sp, #-144] stp d8, d9, [sp, #-160] mov x4, x0 // helper = arg0 mov x0, sp // arg0 = old_sp mov sp, x3 // sp = new_sp // Move the stack pointer below // our saved data. sub sp, sp, 160 // (*helper)(old_sp, a0, a1) blr x4 add sp, sp, 160 // Callee-saved ldp x29, x30, [sp, #-16] // frame, link ldp x27, x28, [sp, #-32] ldp x25, x26, [sp, #-48] ldp x23, x24, [sp, #-64] ldp x21, x22, [sp, #-80] ldp x19, x20, [sp, #-96] // float, SIMD ldp d14, d15, [sp, #-112] ldp d12, d13, [sp, #-128] ldp d10, d11, [sp, #-144] ldp d8, d9, [sp, #-160] _qt_align: qt_align: ret #if defined(__linux__) && defined(__ELF__) .section .note.GNU-stack,"",%progbits #endif systemc-2.3.4/src/sysc/packages/qt/md/mips-irix5.s0000644000175000017500000001323614342422106021636 0ustar carstencarsten/* mips.s -- assembly support. */ /* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ /* Callee-save $16-$23, $30-$31. * * $25 is used as a procedure value pointer, used to discover constants * in a callee. Thus, each caller here sets $25 before the call. * * On startup, restore regs so retpc === call to a function to start. * We're going to call a function ($4) from within this routine. * We're passing 3 args, therefore need to allocate 12 extra bytes on * the stack for a save area. The start routine needs a like 16-byte * save area. Must be doubleword aligned (_mips r3000 risc * architecture_, gerry kane, pg d-23). */ /* * Modified by Assar Westerlund to support Irix 5.x * calling conventions for dynamically-linked code. */ /* Make this position-independent code. */ .option pic2 .globl qt_block .globl qt_blocki .globl qt_abort .globl qt_start .globl qt_vstart /* ** $4: ptr to function to call once curr is suspended ** and control is on $7's stack. ** $5: 1'th arg to $4. ** $6: 2'th arg to $4 ** $7: sp of thread to suspend. ** ** Totally gross hack: The MIPS calling convention reserves ** 4 words on the stack for a0..a3. This routine "ought" to ** allocate space for callee-save registers plus 4 words for ** the helper function, but instead we use the 4 words ** provided by the function that called us (we don't need to ** save our argument registers). So what *appears* to be ** allocating only 40 bytes is actually allocating 56, by ** using the caller's 16 bytes. ** ** The helper routine returns a value that is passed on as the ** return value from the blocking routine. Since we don't ** touch $2 between the helper's return and the end of ** function, we get this behavior for free. */ qt_blocki: sub $sp,$sp,40 /* Allocate reg save space. */ sw $16, 0+16($sp) sw $17, 4+16($sp) sw $18, 8+16($sp) sw $19,12+16($sp) sw $20,16+16($sp) sw $21,20+16($sp) sw $22,24+16($sp) sw $23,28+16($sp) sw $30,32+16($sp) sw $31,36+16($sp) add $2, $sp,$0 /* $2 <= old sp to pass to func@$4. */ qt_abort: add $sp, $7,$0 /* $sp <= new sp. */ .set noreorder add $25, $4,$0 /* Set helper function procedure value. */ jal $31,$25 /* Call helper func@$4 . */ add $4, $2,$0 /* $a0 <= pass old sp as a parameter. */ .set reorder lw $31,36+16($sp) /* Restore callee-save regs... */ lw $30,32+16($sp) lw $23,28+16($sp) lw $22,24+16($sp) lw $21,20+16($sp) lw $20,16+16($sp) lw $19,12+16($sp) lw $18, 8+16($sp) lw $17, 4+16($sp) lw $16, 0+16($sp) /* Restore callee-save */ add $sp,$sp,40 /* Deallocate reg save space. */ j $31 /* Return to caller. */ /* ** Non-varargs thread startup. ** Note: originally, 56 bytes were allocated on the stack. ** The thread restore routine (_blocki/_abort) removed 40 ** of them, which means there is still 16 bytes for the ** argument area required by the MIPS calling convention. */ qt_start: add $4, $16,$0 /* Load up user function pu. */ add $5, $17,$0 /* ... user function pt. */ add $6, $18,$0 /* ... user function userf. */ add $25, $19,$0 /* Set `only' procedure value. */ jal $31,$25 /* Call `only'. */ la $25,qt_error /* Set `qt_error' procedure value. */ j $25 /* ** Save calle-save floating-point regs $f20-$f30 ** See comment in `qt_block' about calling conventinos and ** reserved space. Use the same trick here, but here we ** actually have to allocate all the bytes since we have to ** leave 4 words leftover for `qt_blocki'. ** ** Return value from `qt_block' is the same as the return from ** `qt_blocki'. We get that for free since we don't touch $2 ** between the return from `qt_blocki' and the return from ** `qt_block'. */ qt_block: sub $sp, $sp,56 /* 6 8-byte regs, saved ret pc, aligned. */ swc1 $f20, 0+16($sp) swc1 $f22, 8+16($sp) swc1 $f24, 16+16($sp) swc1 $f26, 24+16($sp) swc1 $f28, 32+16($sp) swc1 $f30, 40+16($sp) sw $31, 48+16($sp) jal qt_blocki lwc1 $f20, 0+16($sp) lwc1 $f22, 8+16($sp) lwc1 $f24, 16+16($sp) lwc1 $f26, 24+16($sp) lwc1 $f28, 32+16($sp) lwc1 $f30, 40+16($sp) lw $31, 48+16($sp) add $sp, $sp,56 j $31 /* ** First, call `startup' with the `pt' argument. ** ** Next, call the user's function with all arguments. ** Note that we don't know whether args were passed in ** integer regs, fp regs, or on the stack (See Gerry Kane ** "MIPS R2000 RISC Architecture" pg D-22), so we reload ** all the registers, possibly with garbage arguments. ** ** Finally, call `cleanup' with the `pt' argument and with ** the return value from the user's function. It is an error ** for `cleanup' to return. */ qt_vstart: add $4, $17,$0 /* `pt' is arg0 to `startup'. */ add $25, $18,$0 /* Set `startup' procedure value. */ jal $31, $25 /* Call `startup'. */ add $sp, $sp,16 /* Free extra save space. */ lw $4, 0($sp) /* Load up args. */ lw $5, 4($sp) lw $6, 8($sp) lw $7, 12($sp) lwc1 $f12, 0($sp) /* Load up fp args. */ lwc1 $f14, 8($sp) add $25, $19,$0 /* Set `userf' procedure value. */ jal $31,$25 /* Call `userf'. */ add $4, $17,$0 /* `pt' is arg0 to `cleanup'. */ add $5, $2,$0 /* Ret. val is arg1 to `cleanup'. */ add $25, $16,$0 /* Set `cleanup' procedure value. */ jal $31, $25 /* Call `cleanup'. */ la $25,qt_error /* Set `qt_error' procedure value. */ j $25 systemc-2.3.4/src/sysc/packages/qt/md/default.Makefile0000644000175000017500000000013114342422106022515 0ustar carstencarsten # # `Normal' configuration. # CC = gcc -ansi -Wall -pedantic .o.s: as -o $@ $< systemc-2.3.4/src/sysc/packages/qt/md/mips.h0000644000175000017500000001022614342422106020561 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #ifndef QUICKTHREADS_MIPS_H #define QUICKTHREADS_MIPS_H typedef unsigned long qt_word_t; #define QUICKTHREADS_GROW_DOWN /* Stack layout on the mips: Callee-save registers are: $16-$23, $30; $f20-$f30. Also save $31, return pc. Non-varargs: +--- | $f30 The first clump is only saved if `qt_block' | $f28 is called, in which case it saves the fp regs | $f26 then calls `qt_blocki' to save the int regs. | $f24 | $f22 | $f20 | $31 === return pc in `qt_block' +--- | $31 === return pc; on startup == qt_start | $30 | $23 | $22 | $21 | $20 | $19 on startup === only | $18 on startup === $a2 === userf | $17 on startup === $a1 === pt | $16 on startup === $a0 === pu | save area req'd by MIPS calling convention | save area req'd by MIPS calling convention | save area req'd by MIPS calling convention | save area req'd by MIPS calling convention <--- sp +--- Conventions for varargs: | args ... +--- | : | : | $21 | $20 | $19 on startup === `userf' | $18 on startup === `startup' | $17 on startup === `pt' | $16 on startup === `cleanup' | | | | <--- sp +--- Note: if we wanted to, we could muck about and try to get the 4 argument registers loaded in to, e.g., $22, $23, $30, and $31, and the return pc in, say, $20. Then, the first 4 args would not need to be loaded from memory, they could just use register-to-register copies. */ /* Stack must be doubleword aligned. */ #define QUICKTHREADS_STKALIGN (8) /* Doubleword aligned. */ /* How much space is allocated to hold all the crud for initialization: $16-$23, $30, $31. Just do an integer restore, no need to restore floating-point. Four words are needed for the argument save area for the helper function that will be called for the old thread, just before the new thread starts to run. */ #define QUICKTHREADS_STKBASE (14 * 4) #define QUICKTHREADS_VSTKBASE QUICKTHREADS_STKBASE /* Offsets of various registers. */ #define QUICKTHREADS_31 (9+4) #define QUICKTHREADS_19 (3+4) #define QUICKTHREADS_18 (2+4) #define QUICKTHREADS_17 (1+4) #define QUICKTHREADS_16 (0+4) /* When a never-before-run thread is restored, the return pc points to a fragment of code that starts the thread running. For non-vargs functions, it just calls the client's `only' function. For varargs functions, it calls the startup, user, and cleanup functions. The varargs startup routine always reads 4 words of arguments from the stack. If there are less than 4 words of arguments, then the startup routine can read off the top of the stack. To prevent errors we always allocate 4 words. If there are more than 3 words of arguments, the 4 preallocated words are simply wasted. */ extern void qt_start(void); #define QUICKTHREADS_ARGS_MD(sp) (QUICKTHREADS_SPUT (sp, QUICKTHREADS_31, qt_start)) #define QUICKTHREADS_VARGS_MD0(sp, vabytes) \ ((qt_t *)(((char *)(sp)) - 4*4 - QUICKTHREADS_STKROUNDUP(vabytes))) extern void qt_vstart(void); #define QUICKTHREADS_VARGS_MD1(sp) (QUICKTHREADS_SPUT (sp, QUICKTHREADS_31, qt_vstart)) #define QUICKTHREADS_VARGS_DEFAULT /* The *index* (positive offset) of where to put each value. */ #define QUICKTHREADS_ONLY_INDEX (QUICKTHREADS_19) #define QUICKTHREADS_USER_INDEX (QUICKTHREADS_18) #define QUICKTHREADS_ARGT_INDEX (QUICKTHREADS_17) #define QUICKTHREADS_ARGU_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_VCLEANUP_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_VUSERF_INDEX (QUICKTHREADS_19) #define QUICKTHREADS_VSTARTUP_INDEX (QUICKTHREADS_18) #define QUICKTHREADS_VARGT_INDEX (QUICKTHREADS_17) #endif /* ndef QUICKTHREADS_MIPS_H */ systemc-2.3.4/src/sysc/packages/qt/md/axp.2.Makefile0000644000175000017500000000016514342422106022030 0ustar carstencarsten # # Compiling for the DEC AXP (alpha) with GNU CC or version 2.x of OSF. # CC = cc -std1 -D__AXP__ -D__OSF2__ systemc-2.3.4/src/sysc/packages/qt/md/axp.README0000644000175000017500000000072514342422106021112 0ustar carstencarstenThe handling of varargs is platform-dependent. Assar Westerlund stared at the problem for a while and deduces the following table: vers / compiler cc gcc ---------------------------------------------------------------------- 1.3 a0, offset __base, __offset 2.0 _a0, _offset __base, __offset The current code should handle both cc and gcc versions, provided you configure for the correct compiler. systemc-2.3.4/src/sysc/packages/qt/md/powerpc_sys5.s0000644000175000017500000004321614342422106022273 0ustar carstencarsten/* powerpc-sys5.s -- assembly support. */ /* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. * PowerPC-System V thread switching module. * * This software is largely based on the original PowerPC-Linux porting * developed by Ken Aaker * * Marco Bucci * December 2002 * */ /* * * PowerPC Register convections: * * r0 volatile * r1 SP * r2 system reserved * r3-r4 volatile for parameter passing and function return * r5-r10 volatile for parameter passing * r11-r12 volatile * r13-r14 non volatile registers * f0 volatile * f1 volatile for parameter passing and function return * f2-f13 volatile for parameter passing * f14-f31 non volatile * * cr2-cr4 non volatile * * * See on the heather file for more documentation. * * * * IMPLEMENTATION NOTES * * * 1) Condition register saving * On most machines, the condition code register is caller-save. * On the PPC, the condition code register is callee-save, so the * thread context switch must preserve it. * * * 2) Floating point registers saving * On resuming a thread, floating point registers are or not restored just * depending on which block routine suspended the thread (i.e. regardless * whether "qt_block", "qt_blocki" or "qt_abort" is used to resume it). * This behaviour is obtained by implementing "qt_block" by means af a nested * call to "qt_blocki". As a result, the blocking of a thread always goes * and returns through "qt_blocki and, if a thread was blocked by "qt_block", * its execution resumes from the floating point restoring code on exit * of "qt_block". * * Thanks to David Keppel that explained me this "simple" trick. * * * 3) C languace code debugging * The original version of this software was developed and debugged under * MacOS X using the Metrowerks Code Warrior PPC integrated assembler. * It could be still used with a C inline assembler by means of a suitable * file to include it. * In order to avoid "copy and paste" bugs, and make easyer the maintaining, * I made the minimal changes, so you can find some strange code as: * * #if 0 * .if 0 * C code here * .endif * #endif * * This is just to embed some C code that is needed by the Code Warrior * integrated assembler. * * * 4) Assembly constants generation * Constants used in the assembly code are generated by running * the C code in the sequel (commented). It uses the C macros declared in * the C heather in order to guarantee that the C interface and the assebly * code are "aligned". I avoided the use of an assebler preprocessor since * they are not so standard and moreover using macro espressions makes the * assembly debugging more difficult. * * #include #include "powerpc_sys5.h" int main() { using namespace std; int i; cout << ".set LR_SAVE, " << PPC_LR_SAVE << endl; cout << ".set BLOCKI_FSIZE, " << QUICKTHREADS_BLOCKI_FRAME_SIZE << endl; cout << ".set BLOCKI_CR_SAVE, " << QUICKTHREADS_BLOCKI_CR_SAVE << endl; cout << ".set BLOCK_FSIZE, " << QUICKTHREADS_BLOCK_FRAME_SIZE << endl; cout << endl; for(i=0; i<12; i++) cout << ".set PAR_" << i << ", " << PPC_PAR(i) << endl; cout << endl; i = 13; cout << ".set GPR_SAVE_" << i << ", " << QUICKTHREADS_BLOCKI_GPR_SAVE(i) << endl; cout << endl; for(i=31; i>13; i--) cout << ".set FPR_SAVE_" << i << ", " << QUICKTHREADS_BLOCK_FPR_SAVE(i) << endl; cout << endl; cout << ".set VARGS_BKOFF, " << QUICKTHREADS_VARGS_BKOFF << endl; cout << endl << endl << endl; for(i=31; i>13; i--) cout << "\tstfd\tf" << i << ",FPR_SAVE_" << i << "(%r1)" << endl; cout << endl; for(i=31; i>13; i--) cout << "\tlfd \tf" << i << ",FPR_SAVE_" << i << "(%r1)" << endl; cout << endl << endl << endl; return 0; } * * * */ #if 0 .text .align 4 .globl qt_block .globl _qt_block .globl qt_blocki .globl _qt_blocki .globl qt_abort .globl _qt_abort .globl qt_start .globl _qt_start .globl qt_vstart .globl _qt_vstart .set LR_SAVE, 4 .set BLOCKI_FSIZE, 96 .set BLOCKI_CR_SAVE, 8 /* CR is saved into the callee's stack frame */ .set BLOCK_FSIZE, 160 .set PAR_0, 8 .set PAR_1, 12 .set PAR_2, 16 .set PAR_3, 20 .set PAR_4, 24 .set PAR_5, 28 .set PAR_6, 32 .set PAR_7, 36 .set PAR_8, 40 .set PAR_9, 44 .set PAR_10, 48 .set PAR_11, 52 .set GPR_SAVE_13, 20 .set FPR_SAVE_31, 152 .set FPR_SAVE_30, 144 .set FPR_SAVE_29, 136 .set FPR_SAVE_28, 128 .set FPR_SAVE_27, 120 .set FPR_SAVE_26, 112 .set FPR_SAVE_25, 104 .set FPR_SAVE_24, 96 .set FPR_SAVE_23, 88 .set FPR_SAVE_22, 80 .set FPR_SAVE_21, 72 .set FPR_SAVE_20, 64 .set FPR_SAVE_19, 56 .set FPR_SAVE_18, 48 .set FPR_SAVE_17, 40 .set FPR_SAVE_16, 32 .set FPR_SAVE_15, 24 .set FPR_SAVE_14, 16 /* various offsets used by "qt_varg" */ .set P_T, PAR_0 .set P_STARTUP, PAR_1 .set P_USERF, PAR_2 .set P_CLEANUP, PAR_3 /* the offset used to move back the linkage area to be adiacent to * the variant argument list before calling "userf(...). * Skip "t", "startup", "userf", "cleanup" and first * 8 parameters (since they are passed via registers) */ .set VARGS_BKOFF, 48 /* location where "t" and "cleanup" are saved (with respect of * the stack frame base) */ .set P_T_SAVE, -4 .set P_CLEANUP_SAVE, -8 #endif /* Block the current thread saving all integer non volatile registers and * start a new thread. */ #if 0 .if 0 #endif void *qt_blocki (void *helper, void *a0, void *a1, void *newthread); asm void *qt_blocki (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif #if 0 qt_blocki: _qt_blocki: #endif /* prolog code */ stwu %r1,-BLOCKI_FSIZE(%r1) /* allocate the stack frame */ mflr %r0 /* return addr in r0 */ mfcr %r11 /* CR in r11 */ stw %r0,LR_SAVE+BLOCKI_FSIZE(%r1) /* save return addr in the stack */ stw %r11,BLOCKI_CR_SAVE(%r1) /* save CR in the stack */ stmw %r13,GPR_SAVE_13(%r1) /* save non-volatile reg */ /* call helper(qt_t *old, void *a0, void *a1) */ mtlr %r3 /* "helper" addr in the link reg */ mr %r3,%r1 /* current thread (i.e. the SP) in arg "old" */ mr %r1,%r6 /* swap to the new thread (i.e. to its SP) */ blrl /* jump to "helper" */ /* the "helper" return value is returned (since r3 is not changed) */ /* epilog code: return to the new thread's "qt_blocki" caller */ lmw %r13,GPR_SAVE_13(%r1) /* restore non-volatile reg */ lwz %r0,LR_SAVE+BLOCKI_FSIZE(%r1) /* recover return addr */ lwz %r11,BLOCKI_CR_SAVE(%r1) /* recover CR */ mtlr %r0 /* return address in the link reg */ mtcr %r11 /* restore CR */ addi %r1,%r1,BLOCKI_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Abort the current thread and start a new thread. */ #if 0 .if 0 #endif void qt_abort (void *helper, void *a0, void *a1, void *newthread); asm void qt_abort (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif #if 0 qt_abort: _qt_abort: #endif /* prolog code */ /* there is no prolog. It will never come back */ /* call helper(qt_t *old, void *a0, void *a1) */ mtlr %r3 /* "helper" addr in the link reg */ mr %r1,%r6 /* swap to the new thread (i.e. to its SP) */ /* we don't need to set "old", we can pass just garbage. Actually, since r3 is not changed, "old" is set to "helper" (don't care) */ blrl /* call "helper" */ /* the "helper" return value is returned (since r3 is not changed) */ /* epilog code: return to the new thread's "qt_blocki" caller */ lmw %r13,GPR_SAVE_13(%r1) /* restore non-volatile reg */ lwz %r0,LR_SAVE+BLOCKI_FSIZE(%r1) /* recover return addr */ lwz %r11,BLOCKI_CR_SAVE(%r1) /* recover CR */ mtlr %r0 /* return address in the link reg */ mtcr %r11 /* restore CR */ addi %r1,%r1,BLOCKI_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Block the current thread saving all non volatile registers and start * a new thread. */ #if 0 .if 0 #endif void *qt_block (void *helper, void *a0, void *a1, void *newthread); asm void *qt_block (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif # if 0 qt_block: _qt_block: #endif /* prolog code */ stwu %r1,-BLOCK_FSIZE(%r1) /* allocate the stack frame */ mflr %r0 /* return addr in r0 */ stw %r0,LR_SAVE+BLOCK_FSIZE(%r1) /* save return addr in the stack */ /* save non-volatile fp reg */ stfd %f31,FPR_SAVE_31(%r1) stfd %f30,FPR_SAVE_30(%r1) stfd %f29,FPR_SAVE_29(%r1) stfd %f28,FPR_SAVE_28(%r1) stfd %f27,FPR_SAVE_27(%r1) stfd %f26,FPR_SAVE_26(%r1) stfd %f25,FPR_SAVE_25(%r1) stfd %f24,FPR_SAVE_24(%r1) stfd %f23,FPR_SAVE_23(%r1) stfd %f22,FPR_SAVE_22(%r1) stfd %f21,FPR_SAVE_21(%r1) stfd %f20,FPR_SAVE_20(%r1) stfd %f19,FPR_SAVE_19(%r1) stfd %f18,FPR_SAVE_18(%r1) stfd %f17,FPR_SAVE_17(%r1) stfd %f16,FPR_SAVE_16(%r1) stfd %f15,FPR_SAVE_15(%r1) stfd %f14,FPR_SAVE_14(%r1) /* block the thread */ bl qt_blocki /* the thread is going to be resumed */ /* restore non-volatile fp reg */ lfd %f31,FPR_SAVE_31(%r1) lfd %f30,FPR_SAVE_30(%r1) lfd %f29,FPR_SAVE_29(%r1) lfd %f28,FPR_SAVE_28(%r1) lfd %f27,FPR_SAVE_27(%r1) lfd %f26,FPR_SAVE_26(%r1) lfd %f25,FPR_SAVE_25(%r1) lfd %f24,FPR_SAVE_24(%r1) lfd %f23,FPR_SAVE_23(%r1) lfd %f22,FPR_SAVE_22(%r1) lfd %f21,FPR_SAVE_21(%r1) lfd %f20,FPR_SAVE_20(%r1) lfd %f19,FPR_SAVE_19(%r1) lfd %f18,FPR_SAVE_18(%r1) lfd %f17,FPR_SAVE_17(%r1) lfd %f16,FPR_SAVE_16(%r1) lfd %f15,FPR_SAVE_15(%r1) lfd %f14,FPR_SAVE_14(%r1) lwz %r0,LR_SAVE+BLOCK_FSIZE(%r1) /* recover return addr */ mtlr %r0 /* return address in the link reg */ addi %r1,%r1,BLOCK_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Start a single argument thread using parameters preloaded in the stack * during thread initialization (see comments on stack initialization in the * heather file). * * Executes: * * only(u, t, userf); */ #if 0 .if 0 #endif void qt_start(void); asm void qt_start(void) { #if 0 .endif #endif #if 0 qt_start: _qt_start: #endif lwz %r3,PAR_0(%r1) /* "u" in r3 */ lwz %r4,PAR_1(%r1) /* "t" in r4 */ lwz %r5,PAR_2(%r1) /* "userf" in r5 */ lwz %r6,PAR_3(%r1) /* "only" in r6 */ mtlr %r6 /* "only" address in the link reg */ /* call only(u, t, userf) */ blrl /* jump to "only" */ /* error if it returns */ b qt_error /* dead code (some inline asm "wants" the epilog, or they genetare it) */ blr #if 0 .if 0 #endif } #if 0 .endif #endif /* Start a variant argument thread using parameters preloaded in the stack * during thread initialization (see comments on stack initialization in the * heather file). * * Executes: * * startup(t); * userf_return = userf(...); * cleanup(pt, userf_return); * ***** Stack layout on start ***** backchain -> STACK BOTTOM (higher address) +==========================+ backchain - 4 -> | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | arg(n) + + | | + VARIABLE ARGUMENT LIST + .............. + for userf call + SP + PAR(5) -> | | arg(1) + + SP + PAR(4) -> | | arg(0) +--------------------------+ SP + PAR(3) -> | | cleanup par + + SP + PAR(2) -> | | userf par + PARAMETER AREA + SP + PAR(1) -> | | startup par + + SP + PAR(0) -> | | t par +--------------------------+ | | + LINKAGE AREA + SP -> | | +==========================+ STACK TOP (lower address) Stack grows down | V ***** Stack layout before call userf ***** backchain -> STACK BOTTOM (higher address) +==========================+ backchain - 4 -> | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | arg(n) + + | | + VARIABLE ARGUMENT LIST + .............. + for userf call + SP + PAR(1) -> | | arg(1) + + SP + PAR(0) -> | | arg(0) +--------------------------+ | | + LINKAGE AREA + SP -> | | +==========================+ STACK TOP (lower address) Stack grows down | V * To call "userf(...)", the argument list must be adiacent to the linkage * area. Instead of copy the argument list, we move back the linkage area * (actually, we just increase the SP and copy the backchain). "t" and * "cleanup" are saved in a local variable area in order to call * cleanup(pt, userf_return). */ #if 0 .if 0 #endif void qt_vstart(void); asm void qt_vstart(void) { #if 0 .endif #endif #if 0 qt_vstart: _qt_vstart: #endif /* NOTICE: the callee routines could save parameter registers in the caller's * stack parameter area. We put "t" in PAR(0) in such a way, if startup(t) * will save "t", it will be saved on the same location thus not delething * any other parameter. */ /* since we will move back the linckage area (to make it adiacent to the * parameter list), we need to save "t" and "cleanup". We have made room for * this on the bottom of the stack frame. */ /* save parameters in the local variable area */ lwz %r11,0(%r1) /* get the backchain */ lwz %r3,P_T(%r1) lwz %r4,P_CLEANUP(%r1) stw %r3,P_T_SAVE(%r11) /* save "pt" */ stw %r4,P_CLEANUP_SAVE(%r11) /* save "cleanup" */ /* call startup(t) */ lwz %r5,P_STARTUP(%r1) mtlr %r5 blrl /* call "startup" */ /* call userf(...) */ lwz %r11,0(%r1) /* reload backchain (r11 is volatile) */ lwz %r4,P_USERF(%r1) /* load "userf" */ mtlr %r4 /* first eight parameter of the variant list must be copyed in * GPR3-GPR10. There is a four places offset due to "t", "startup", * userf" and "cleanup" */ lwz %r3,PAR_4(%r1) lwz %r4,PAR_5(%r1) lwz %r5,PAR_6(%r1) lwz %r6,PAR_7(%r1) lwz %r7,PAR_8(%r1) lwz %r8,PAR_9(%r1) lwz %r9,PAR_10(%r1) lwz %r10,PAR_11(%r1) /* move the linkage area to be adiacent to the argument list */ stw %r11,VARGS_BKOFF(%r1) /* copy backchain */ addi %r1,%r1,VARGS_BKOFF /* move back the stack */ blrl /* call "userf" */ /* call qt_cleanup(void *pt, void *vuserf_return) */ lwz %r11,0(%r1) /* reload backchain (r11 is volatile) */ mr %r4,%r3 /* push "userf" return as 2nd parameter */ lwz %r3,P_T_SAVE(%r11) /* reload "pt" */ lwz %r5,P_CLEANUP_SAVE(%r11) /* reload "cleanup" */ mtlr %r5 blrl b qt_error /* dead code (some inline asm "wants" the epilog, or they genetare it) */ blr #if 0 .if 0 #endif } #if 0 .endif #endif systemc-2.3.4/src/sysc/packages/qt/md/powerpc_mach.s0000644000175000017500000004313414342422106022277 0ustar carstencarsten/* powerpc_mach.s -- assembly support. */ /* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. * PowerPC-Mach thread switching module. * Darwin (MacOS X) assembly * * NOTICE: Syntax for register names is not the GNU one. Register are * named "rx" and "fx", not "%rx" and "%fx" as usual for the GNU "as" tool. * Darwin "as" tool is based on GNU "as" but follows the "official" PowerPC * syntax. * * * This software is largely based on the original PowerPC-Linux porting * developed by Ken Aaker * * Marco Bucci * December 2002 * */ /* * * PowerPC Register convections: * * r0 volatile * r1 SP * r2 system reserved * r3-r4 volatile for parameter passing and function return * r5-r10 volatile for parameter passing * r11-r12 volatile * r13-r14 non volatile registers * f0 volatile * f1 volatile for parameter passing and function return * f2-f13 volatile for parameter passing * f14-f31 non volatile * * cr2-cr4 non volatile * * * See on the heather file for more documentation. * * * * IMPLEMENTATION NOTES * * * 1) Condition register saving * On most machines, the condition code register is caller-save. * On the PPC, the condition code register is callee-save, so the * thread context switch must preserve it. * * * 2) Floating point registers saving * On resuming a thread, floating point registers are or not restored just * depending on which block routine suspended the thread (i.e. regardless * whether "qt_block", "qt_blocki" or "qt_abort" is used to resume it). * This behaviour is obtained by implementing "qt_block" by means af a nested * call to "qt_blocki". As a result, the blocking of a thread always goes * and returns through "qt_blocki and, if a thread was blocked by "qt_block", * its execution resumes from the floating point restoring code on exit * of "qt_block". * * Thanks to David Keppel that explained me this "simple" trick. * * * 3) C languace code debugging * This software was developed and debugged using the Metrowerks * Code Warrior PPC integrated assembler. It can be still used with the * Code Warrior compiler by means of the file "powerpc_mach_asm_debug.c" * that include it. * In order to avoid "copy and paste" bugs, and make easyer the maintaining, * I made the minimal changes, so you can find some strange code as: * * #if 0 * .if 0 * C code here * .endif * #endif * * This is just to embed some C code that is needed by the Code Warrior * integrated assembler. * * * 4) Assembly constants generation * Constants used in the assembly code are generated by running * the C code in the sequel (commented). It uses the C macros declared in * the C heather in order to guarantee that the C interface and the assebly * code are "aligned". I avoided the use of an assebler preprocessor since * they are not so standard and moreover using macro espressions makes the * assembly debugging more difficult. * * #include #include "powerpc_mach.h" int main() { using namespace std; int i; cout << ".set LR_SAVE, " << PPC_LR_SAVE << endl; cout << ".set CR_SAVE, " << PPC_CR_SAVE << endl; cout << ".set BLOCKI_FSIZE, " << QUICKTHREADS_BLOCKI_FRAME_SIZE << endl; cout << ".set BLOCK_FSIZE, " << QUICKTHREADS_BLOCK_FRAME_SIZE << endl; cout << endl; for(i=0; i<12; i++) cout << ".set PAR_" << i << ", " << PPC_PAR(i) << endl; cout << endl; i = 13; cout << ".set GPR_SAVE_" << i << ", " << QUICKTHREADS_BLOCKI_GPR_SAVE(i) << endl; cout << endl; for(i=31; i>13; i--) cout << ".set FPR_SAVE_" << i << ", " << QUICKTHREADS_BLOCK_FPR_SAVE(i) << endl; cout << endl; cout << ".set VARGS_BKOFF, " << QUICKTHREADS_VARGS_BKOFF << endl; cout << endl << endl << endl; for(i=31; i>13; i--) cout << "\tstfd\tf" << i << ",FPR_SAVE_" << i << "(r1)" << endl; cout << endl; for(i=31; i>13; i--) cout << "\tlfd \tf" << i << ",FPR_SAVE_" << i << "(r1)" << endl; cout << endl << endl << endl; return 0; } * * * */ #if 0 .text .align 4 .globl qt_block .globl _qt_block .globl qt_blocki .globl _qt_blocki .globl qt_abort .globl _qt_abort .globl qt_start .globl _qt_start .globl qt_vstart .globl _qt_vstart .set LR_SAVE, 8 .set CR_SAVE, 4 .set BLOCKI_FSIZE, 128 .set BLOCK_FSIZE, 192 .set PAR_0, 24 .set PAR_1, 28 .set PAR_2, 32 .set PAR_3, 36 .set PAR_4, 40 .set PAR_5, 44 .set PAR_6, 48 .set PAR_7, 52 .set PAR_8, 56 .set PAR_9, 60 .set PAR_10, 64 .set PAR_11, 68 .set GPR_SAVE_13, 52 .set FPR_SAVE_31, 184 .set FPR_SAVE_30, 176 .set FPR_SAVE_29, 168 .set FPR_SAVE_28, 160 .set FPR_SAVE_27, 152 .set FPR_SAVE_26, 144 .set FPR_SAVE_25, 136 .set FPR_SAVE_24, 128 .set FPR_SAVE_23, 120 .set FPR_SAVE_22, 112 .set FPR_SAVE_21, 104 .set FPR_SAVE_20, 96 .set FPR_SAVE_19, 88 .set FPR_SAVE_18, 80 .set FPR_SAVE_17, 72 .set FPR_SAVE_16, 64 .set FPR_SAVE_15, 56 .set FPR_SAVE_14, 48 /* various offsets used by "qt_varg" */ .set P_T, PAR_0 .set P_STARTUP, PAR_1 .set P_USERF, PAR_2 .set P_CLEANUP, PAR_3 /* the offset used to move back the linkage area to be adiacent to * the variant argument list before calling "userf(...) */ .set VARGS_BKOFF, 16 /* skip "t", "startup", "userf" and "cleanup" */ /* location where "t" and "cleanup" are saved (with respect of * the stack frame base) */ .set P_T_SAVE, -4 .set P_CLEANUP_SAVE, -8 #endif /* Block the current thread saving all integer non volatile registers and * start a new thread. */ #if 0 .if 0 #endif void *qt_blocki (void *helper, void *a0, void *a1, void *newthread); asm void *qt_blocki (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif #if 0 qt_blocki: _qt_blocki: #endif /* prolog code */ stwu r1,-BLOCKI_FSIZE(r1) /* allocate the stack frame */ mflr r0 /* return addr in r0 */ mfcr r11 /* CR in r11 */ stw r0,LR_SAVE+BLOCKI_FSIZE(r1) /* save return addr in the stack */ stw r11,CR_SAVE+BLOCKI_FSIZE(r1) /* save CR in the stack */ stmw r13,GPR_SAVE_13(r1) /* save non-volatile reg */ /* call helper(qt_t *old, void *a0, void *a1) */ mtlr r3 /* "helper" addr in the link reg */ mr r3,r1 /* current thread (i.e. the SP) in arg "old" */ mr r1,r6 /* swap to the new thread (i.e. to its SP) */ blrl /* jump to "helper" */ /* the "helper" return value is returned (since r3 is not changed) */ /* epilog code: return to the new thread's "qt_blocki" caller */ lmw r13,GPR_SAVE_13(r1) /* restore non-volatile reg */ lwz r0,LR_SAVE+BLOCKI_FSIZE(r1) /* recover return addr */ lwz r11,CR_SAVE+BLOCKI_FSIZE(r1) /* recover CR */ mtlr r0 /* return address in the link reg */ mtcr r11 /* restore CR */ addi r1,r1,BLOCKI_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Abort the current thread and start a new thread. */ #if 0 .if 0 #endif void qt_abort (void *helper, void *a0, void *a1, void *newthread); asm void qt_abort (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif #if 0 qt_abort: _qt_abort: #endif /* prolog code */ /* there is no prolog. It will never come back */ /* call helper(qt_t *old, void *a0, void *a1) */ mtlr r3 /* "helper" addr in the link reg */ mr r1,r6 /* swap to the new thread (i.e. to its SP) */ /* we don't need to set "old", we can pass just garbage. Actually, since r3 is not changed, "old" is set to "helper" (don't care) */ blrl /* call "helper" */ /* the "helper" return value is returned (since r3 is not changed) */ /* epilog code: return to the new thread's "qt_blocki" caller */ lmw r13,GPR_SAVE_13(r1) /* restore non-volatile reg */ lwz r0,LR_SAVE+BLOCKI_FSIZE(r1) /* recover return addr */ lwz r11,CR_SAVE+BLOCKI_FSIZE(r1) /* recover CR */ mtlr r0 /* return address in the link reg */ mtcr r11 /* restore CR */ addi r1,r1,BLOCKI_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Block the current thread saving all non volatile registers and start * a new thread. */ #if 0 .if 0 #endif void *qt_block (void *helper, void *a0, void *a1, void *newthread); asm void *qt_block (void *helper, void *a0, void *a1, void *newthread) { #if 0 .endif #endif # if 0 qt_block: _qt_block: #endif /* prolog code */ stwu r1,-BLOCK_FSIZE(r1) /* allocate the stack frame */ mflr r0 /* return addr in r0 */ stw r0,LR_SAVE+BLOCK_FSIZE(r1) /* save return addr in the stack */ /* save non-volatile fp reg */ stfd f31,FPR_SAVE_31(r1) stfd f30,FPR_SAVE_30(r1) stfd f29,FPR_SAVE_29(r1) stfd f28,FPR_SAVE_28(r1) stfd f27,FPR_SAVE_27(r1) stfd f26,FPR_SAVE_26(r1) stfd f25,FPR_SAVE_25(r1) stfd f24,FPR_SAVE_24(r1) stfd f23,FPR_SAVE_23(r1) stfd f22,FPR_SAVE_22(r1) stfd f21,FPR_SAVE_21(r1) stfd f20,FPR_SAVE_20(r1) stfd f19,FPR_SAVE_19(r1) stfd f18,FPR_SAVE_18(r1) stfd f17,FPR_SAVE_17(r1) stfd f16,FPR_SAVE_16(r1) stfd f15,FPR_SAVE_15(r1) stfd f14,FPR_SAVE_14(r1) /* block the thread */ bl qt_blocki /* the thread is going to be resumed */ /* restore non-volatile fp reg */ lfd f31,FPR_SAVE_31(r1) lfd f30,FPR_SAVE_30(r1) lfd f29,FPR_SAVE_29(r1) lfd f28,FPR_SAVE_28(r1) lfd f27,FPR_SAVE_27(r1) lfd f26,FPR_SAVE_26(r1) lfd f25,FPR_SAVE_25(r1) lfd f24,FPR_SAVE_24(r1) lfd f23,FPR_SAVE_23(r1) lfd f22,FPR_SAVE_22(r1) lfd f21,FPR_SAVE_21(r1) lfd f20,FPR_SAVE_20(r1) lfd f19,FPR_SAVE_19(r1) lfd f18,FPR_SAVE_18(r1) lfd f17,FPR_SAVE_17(r1) lfd f16,FPR_SAVE_16(r1) lfd f15,FPR_SAVE_15(r1) lfd f14,FPR_SAVE_14(r1) lwz r0,LR_SAVE+BLOCK_FSIZE(r1) /* recover return addr */ mtlr r0 /* return address in the link reg */ addi r1,r1,BLOCK_FSIZE /* free the stack frame */ blr /* return */ #if 0 .if 0 #endif } #if 0 .endif #endif /* Start a single argument thread using parameters preloaded in the stack * during thread initialization (see comments on stack initialization in the * heather file). * * Executes: * * only(u, t, userf); */ #if 0 .if 0 #endif void qt_start(void); asm void qt_start(void) { #if 0 .endif #endif #if 0 qt_start: _qt_start: #endif lwz r3,PAR_0(r1) /* "u" in r3 */ lwz r4,PAR_1(r1) /* "t" in r4 */ lwz r5,PAR_2(r1) /* "userf" in r5 */ lwz r6,PAR_3(r1) /* "only" in r6 */ mtlr r6 /* "only" address in the link reg */ /* call only(u, t, userf) */ blrl /* jump to "only" */ /* error if it returns */ b _qt_error /* dead code (some inline asm "wants" the epilog, or they genetare it) */ blr #if 0 .if 0 #endif } #if 0 .endif #endif /* Start a variant argument thread using parameters preloaded in the stack * during thread initialization (see comments on stack initialization in the * heather file). * * Executes: * * startup(t); * userf_return = userf(...); * cleanup(pt, userf_return); * ***** Stack layout on start ***** backchain -> STACK BOTTOM (higher address) +==========================+ backchain - 4 -> | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | arg(n) + + | | + VARIABLE ARGUMENT LIST + .............. + for userf call + SP + PAR(5) -> | | arg(1) + + SP + PAR(4) -> | | arg(0) +--------------------------+ SP + PAR(3) -> | | cleanup par + + SP + PAR(2) -> | | userf par + PARAMETER AREA + SP + PAR(1) -> | | startup par + + SP + PAR(0) -> | | t par +--------------------------+ | | + LINKAGE AREA + SP -> | | +==========================+ STACK TOP (lower address) Stack grows down | V ***** Stack layout before call userf ***** backchain -> STACK BOTTOM (higher address) +==========================+ backchain - 4 -> | | + LOCAL VARIABLES AREA + .............. + + | | +--------------------------+ | | + ALIGNMEBNT PAD + .............. + (if needed) + | | +--------------------------+ | | arg(n) + + | | + VARIABLE ARGUMENT LIST + .............. + for userf call + SP + PAR(1) -> | | arg(1) + + SP + PAR(0) -> | | arg(0) +--------------------------+ | | + LINKAGE AREA + SP -> | | +==========================+ STACK TOP (lower address) Stack grows down | V * To call "userf(...)", the argument list must be adiacent to the linkage * area. Instead of copy the argument list, we move back the linkage area * (actually, we just increase the SP and copy the backchain). "t" and * "cleanup" are saved in a local variable area in order to call * cleanup(pt, userf_return). */ #if 0 .if 0 #endif void qt_vstart(void); asm void qt_vstart(void) { #if 0 .endif #endif #if 0 qt_vstart: _qt_vstart: #endif /* NOTICE: the callee routines could save parameter registers in the caller's * stack parameter area. We put "t" in PAR(0) in such a way, if startup(t) * will save "t", it will be saved on the same location thus not delething * any other parameter. */ /* since we will move back the linckage area (to make it adiacent to the * parameter list), we need to save "t" and "cleanup". We have made room for * this on the bottom of the stack frame. */ /* save parameters in the local variable area */ lwz r11,0(r1) /* get the backchain */ lwz r3,P_T(r1) lwz r4,P_CLEANUP(r1) stw r3,P_T_SAVE(r11) /* save "pt" */ stw r4,P_CLEANUP_SAVE(r11) /* save "cleanup" */ /* call startup(t) */ lwz r5,P_STARTUP(r1) mtlr r5 blrl /* call "startup" */ /* call userf(...) */ lwz r11,0(r1) /* reload backchain (r11 is volatile) */ lwz r4,P_USERF(r1) /* load "userf" */ mtlr r4 /* first eight parameter of the variant list must be copyed in * GPR3-GPR10. There is a four places offset due to "t", "startup", * userf" and "cleanup" */ lwz r3,PAR_4(r1) lwz r4,PAR_5(r1) lwz r5,PAR_6(r1) lwz r6,PAR_7(r1) lwz r7,PAR_8(r1) lwz r8,PAR_9(r1) lwz r9,PAR_10(r1) lwz r10,PAR_11(r1) /* move the linkage area to be adiacent to the argument list */ stw r11,VARGS_BKOFF(r1) /* copy backchain */ addi r1,r1,VARGS_BKOFF /* move back the stack */ blrl /* call "userf" */ /* call qt_cleanup(void *pt, void *vuserf_return) */ lwz r11,0(r1) /* reload backchain (r11 is volatile) */ mr r4,r3 /* push "userf" return as 2nd parameter */ lwz r3,P_T_SAVE(r11) /* reload "pt" */ lwz r5,P_CLEANUP_SAVE(r11) /* reload "cleanup" */ mtlr r5 blrl b _qt_error /* dead code (some inline asm "wanst" the epilog, or they genetare it) */ blr #if 0 .if 0 #endif } #if 0 .endif #endif systemc-2.3.4/src/sysc/packages/qt/md/i386.README0000644000175000017500000000031714342422106021010 0ustar carstencarstenNote that some machines want labels to have leading underscores, while others (e.g. System V) do not. Thus, several labels appear duplicated except for the leading underscore, e.g. _qt_cswap: qt_cswap: systemc-2.3.4/src/sysc/packages/qt/md/null.README0000644000175000017500000000000014342422106021256 0ustar carstencarstensystemc-2.3.4/src/sysc/packages/qt/md/aarch64.h0000644000175000017500000000322114342422106021036 0ustar carstencarsten#ifndef QUICKTHREADS_AARCH_64_H #define QUICKTHREADS_AARCH_64_H // For QUICKTHREADS_SPUT in qt.h typedef unsigned long qt_word_t; extern void qt_start(void); extern void qt_vstart(void); extern void qt_error(void); extern void qt_align(void); // Stack must be 16-byte aligned at all times. #define QUICKTHREADS_STKALIGN (16) #define QUICKTHREADS_STKBASE (20 * sizeof(qt_word_t)) #define QUICKTHREADS_VSTKBASE (5 * sizeof(qt_word_t)) #define QUICKTHREADS_GROW_DOWN #define QUICKTHREADS_ADJ(sp) (((char *)sp) - QUICKTHREADS_STKBASE) // Initialize a single-argument thread. // // Set up link index to point to the true initializer, qt_start, // which will call only(pu, pt, userf) read from the stack. // // (*helper)(old_sp, a0, a1) will be called in between on the current // stack, so FRAME_INDEX needs to be correct and the other values // appropriately stored. #define QUICKTHREADS_ARGS(sp, pu, pt, userf, only) \ (QUICKTHREADS_SPUT(sp, QUICKTHREADS_LINK_INDEX, qt_start), \ QUICKTHREADS_SPUT(sp, QUICKTHREADS_FRAME_INDEX, sp), \ QUICKTHREADS_SPUT(sp, QUICKTHREADS_ONLY_INDEX, only), \ QUICKTHREADS_SPUT(sp, QUICKTHREADS_USER_INDEX, userf), \ QUICKTHREADS_SPUT(sp, QUICKTHREADS_ARGT_INDEX, pt), \ QUICKTHREADS_SPUT(sp, QUICKTHREADS_ARGU_INDEX, pu), \ sp) #define QUICKTHREADS_LINK_INDEX -1 // x30; standard #define QUICKTHREADS_FRAME_INDEX -2 // x29; standard #define QUICKTHREADS_ONLY_INDEX -3 // x28; arbitrary #define QUICKTHREADS_USER_INDEX -4 // x27; arbitrary #define QUICKTHREADS_ARGT_INDEX -5 // x26; arbitrary #define QUICKTHREADS_ARGU_INDEX -6 // x25; arbitrary #endif // QUICKTHREADS_AARCH_64_H systemc-2.3.4/src/sysc/packages/qt/md/vax.h0000644000175000017500000000715214342422106020413 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #ifndef QUICKTHREADS_VAX_H #define QUICKTHREADS_VAX_H typedef unsigned long qt_word_t; /* Thread's initial stack layout on the VAX: non-varargs: +--- | arg[2] === `userf' on startup | arg[1] === `pt' on startup | arg[0] === `pu' on startup | ... === `only' on startup. +--- | ret pc === `qt_start' on startup | fp === 0 on startup | ap === 0 on startup | | 0 (handler) <--- qt_t.sp +--- When a non-varargs thread is started, it ``returns'' to the start routine, which calls the client's `only' function. The varargs case is clearly bad code. The various values should be stored in a save area and snarfed in to callee-save registers on startup. However, it's too painful to figure out the register mask (right now), so do it the slow way. +--- | arg[n-1] | .. | arg[0] | nargs +--- | === `cleanup' | === `vuserf' | === `startup' | === `pt' +--- | ret pc === `qt_start' on startup | fp === 0 on startup | ap === 0 on startup | | 0 (handler) <--- qt_t.sp +--- When a varargs thread is started, it ``returns'' to the `qt_vstart' startup code. The startup code pops all the extra arguments, then calls the appropriate functions. */ /* What to do to start a thread running. */ extern void qt_start (void); extern void qt_vstart (void); /* Initial call frame for non-varargs and varargs cases. */ #define QUICKTHREADS_STKBASE (10 * 4) #define QUICKTHREADS_VSTKBASE (9 * 4) /* Stack "must be" 4-byte aligned. (Actually, no, but it's easiest and probably fastest to do so.) */ #define QUICKTHREADS_STKALIGN (4) /* Where to place various arguments. */ #define QUICKTHREADS_ONLY_INDEX (5) #define QUICKTHREADS_USER_INDEX (8) #define QUICKTHREADS_ARGT_INDEX (7) #define QUICKTHREADS_ARGU_INDEX (6) #define QUICKTHREADS_VSTARTUP_INDEX (6) #define QUICKTHREADS_VUSERF_INDEX (7) #define QUICKTHREADS_VCLEANUP_INDEX (8) #define QUICKTHREADS_VARGT_INDEX (5) /* Stack grows down. The top of the stack is the first thing to pop off (predecrement, postincrement). */ #define QUICKTHREADS_GROW_DOWN extern void qt_error (void); #define QUICKTHREADS_VAX_GMASK_NOREGS (0) /* Push on the error return address, null termination to call chains, number of arguments to `only', register save mask (save no registers). */ #define QUICKTHREADS_ARGS_MD(sto) \ (QUICKTHREADS_SPUT (sto, 0, 0), \ QUICKTHREADS_SPUT (sto, 1, QUICKTHREADS_VAX_GMASK_NOREGS), \ QUICKTHREADS_SPUT (sto, 2, 0), \ QUICKTHREADS_SPUT (sto, 3, 0), \ QUICKTHREADS_SPUT (sto, 4, qt_start)) #define QUICKTHREADS_VARGS_MD0(sto, nbytes) \ (QUICKTHREADS_SPUT (sto, (-(nbytes)/4)-1, (nbytes)/4), \ ((char *)(((sto)-4) - QUICKTHREADS_STKROUNDUP(nbytes)))) #define QUICKTHREADS_VARGS_ADJUST(sp) ((char *)sp + 4) #define QUICKTHREADS_VARGS_MD1(sto) \ (QUICKTHREADS_SPUT (sto, 0, 0), \ QUICKTHREADS_SPUT (sto, 1, QUICKTHREADS_VAX_GMASK_NOREGS), \ QUICKTHREADS_SPUT (sto, 2, 0), \ QUICKTHREADS_SPUT (sto, 3, 0), \ QUICKTHREADS_SPUT (sto, 4, qt_vstart)) #define QUICKTHREADS_VARGS_DEFAULT #endif /* QUICKTHREADS_VAX_H */ systemc-2.3.4/src/sysc/packages/qt/md/pthreads.Makefile0000644000175000017500000000307714342422106022717 0ustar carstencarsten# Generated automatically from Makefile.in by configure. # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = /bin/sh all: mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: mostlyclean-compile: clean-compile: distclean-compile: maintainer-clean-compile: tags: ID: TAGS: mostlyclean-tags: clean-tags: distclean-tags: maintainer-clean-tags: distdir: info-am: info: dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data-local install-data: install-data-am install-am: all-am install: install-am uninstall-am: uninstall-local uninstall: uninstall-am all-am: all-redirect: install-strip: installdirs: mostlyclean-generic: clean-generic: distclean-generic: maintainer-clean-generic: mostlyclean-am: mostlyclean: clean-am: clean: distclean-am: distclean: maintainer-clean-am: maintainer-clean: .PHONY: configuration: clean: install-data-local: uninstall-local: systemc-2.3.4/src/sysc/packages/qt/md/m88k.h0000644000175000017500000001073114342422106020401 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #ifndef QUICKTHREADS_M88K_H #define QUICKTHREADS_M88K_H typedef unsigned long qt_word_t; #define QUICKTHREADS_GROW_DOWN /* Stack layout on the mips: Callee-save registers are: $16-$23, $30; $f20-$f30. Also save $31, return pc. Non-varargs: +--- | r30 (fp) on startup === 0 | r25 | r24 | r23 | r22 | r21 | r20 | r19 | r18 | r17 on startup === `only' | r16 on startup === `userf' | r15 on startup === `pt' | r14 on startup === `pu' | r1 on startup === `qt_start' | 0 | 0 +--- | 0 | ... (8 regs worth === 32 bytes of homing area) | 0 <--- sp +--- Conventions for varargs: | : | arg8 +--- | r30 (fp) arg7 | r25 arg6 | r24 arg5 | r23 arg4 | r22 arg3 | r21 arg2 | r20 arg1 | r19 arg0 | r18 | r17 on startup === `startup' | r16 on startup === `vuserf' | r15 on startup === `pt' | r14 on startup === `cleanup' | r1 on startup === `qt_vstart' | 0 | 0 +--- | 0 | ... (8 regs worth === 32 bytes of homing area) | 0 <--- sp +--- */ /* Stack must be doubleword aligned. */ #define QUICKTHREADS_STKALIGN (16) /* Doubleword aligned. */ /* How much space is allocated to hold all the crud for initialization: saved registers plus padding to keep the stack aligned plus 8 words of padding to use as a `homing area' (for r2-r9) when calling helper functions on the stack of the (not yet started) thread. The varargs save area is small because it gets overlapped with the top of the parameter list. In case the parameter list is less than 8 args, QUICKTHREADS_ARGS_MD0 adds some dead space at the top of the stack. */ #define QUICKTHREADS_STKBASE (16*4 + 8*4) #define QUICKTHREADS_VSTKBASE (8*4 + 8*4) /* Index of various registers. */ #define QUICKTHREADS_1 (8+2) #define QUICKTHREADS_14 (8+3) #define QUICKTHREADS_15 (8+4) #define QUICKTHREADS_16 (8+5) #define QUICKTHREADS_17 (8+6) #define QUICKTHREADS_30 (8+15) /* When a never-before-run thread is restored, the return pc points to a fragment of code that starts the thread running. For non-vargs functions, it sets up arguments and calls the client's `only' function. For varargs functions, the startup code calls the startup, user, and cleanup functions. For non-varargs functions, we set the frame pointer to 0 to null-terminate the call chain. For varargs functions, the frame pointer register is used to hold one of the arguments, so that all arguments can be laid out in memory by the conventional `qt_vargs' varargs initialization routine. The varargs startup routine always reads 8 words of arguments from the stack. If there are less than 8 words of arguments, then the arg list could call off the top of the stack. To prevent fall-off, always allocate 8 words. */ extern void qt_start(void); #define QUICKTHREADS_ARGS_MD(sp) \ (QUICKTHREADS_SPUT (sp, QUICKTHREADS_1, qt_start), \ QUICKTHREADS_SPUT (sp, QUICKTHREADS_30, 0)) /* The m88k uses a struct for `va_list', so pass a pointer to the struct. */ typedef void (qt_function_t)(void); struct qt_t; extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes, void *vargs, void *pt, qt_function_t *startup, qt_function_t *vuserf, qt_function_t *cleanup); #define QUICKTHREADS_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ (qt_vargs (sp, nbytes, &(vargs), pt, (qt_function_t *)startup, \ (qt_function_t *)vuserf, (qt_function_t *)cleanup)) /* The *index* (positive offset) of where to put each value. */ #define QUICKTHREADS_ONLY_INDEX (QUICKTHREADS_17) #define QUICKTHREADS_USER_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_ARGT_INDEX (QUICKTHREADS_15) #define QUICKTHREADS_ARGU_INDEX (QUICKTHREADS_14) #define QUICKTHREADS_VCLEANUP_INDEX (QUICKTHREADS_14) #define QUICKTHREADS_VUSERF_INDEX (QUICKTHREADS_16) #define QUICKTHREADS_VSTARTUP_INDEX (QUICKTHREADS_17) #define QUICKTHREADS_VARGT_INDEX (QUICKTHREADS_15) #endif /* ndef QUICKTHREADS_M88K_H */ systemc-2.3.4/src/sysc/packages/qt/md/axp.h0000644000175000017500000001030714342422106020401 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #ifndef QUICKTHREADS_AXP_H #define QUICKTHREADS_AXP_H #define QUICKTHREADS_GROW_DOWN typedef unsigned long qt_word_t; /* Stack layout on the Alpha: Integer: Caller-save: r0..r8, r22..r25, r27..r29 argument/caller-save: r16..r21 callee-save: r9..r15 return pc *callee-save*: r26 stack pointer: r30 zero: r31 Floating-point: Caller-save: f0..f1, f10..f15 argument/caller-save: f16..f21, f22..f30 callee-save: f2..f9 zero: f31 Non-varargs: +--- | padding | f9 | f8 | f7 | f6 | f5 | f4 | f3 | f2 | r26 +--- | padding | r29 | r15 | r14 | r13 | r12 on startup === `only' | r11 on startup === `userf' | r10 on startup === `qt' | r9 on startup === `qu' | r26 on startup === qt_start <--- qt.sp +--- Conventions for varargs startup: | : | arg6 | iarg5 | : | iarg0 | farg5 | : | farg0 +--- | padding | r29 | r15 | r14 | r13 | r12 on startup === `startup' | r11 on startup === `vuserf' | r10 on startup === `cleanup' | r9 on startup === `qt' | r26 on startup === qt_vstart <--- qt.sp +--- Note: this is a pretty cheap/sleazy way to get things going, but ``there must be a better way.'' For instance, some varargs parameters could be loaded in to integer registers, or the return address could be stored on top of the stack. */ /* Stack must be 16-byte aligned. */ #define QUICKTHREADS_STKALIGN (16) /* How much space is allocated to hold all the crud for initialization: 7 registers times 8 bytes/register. */ #define QUICKTHREADS_STKBASE (10 * 8) #define QUICKTHREADS_VSTKBASE QUICKTHREADS_STKBASE /* Offsets of various registers. */ #define QUICKTHREADS_R26 0 #define QUICKTHREADS_R9 1 #define QUICKTHREADS_R10 2 #define QUICKTHREADS_R11 3 #define QUICKTHREADS_R12 4 /* When a never-before-run thread is restored, the return pc points to a fragment of code that starts the thread running. For non-vargs functions, it just calls the client's `only' function. For varargs functions, it calls the startup, user, and cleanup functions. The varargs startup routine always reads 12 8-byte arguments from the stack. If fewer argumets were pushed, the startup routine would read off the top of the stack. To prevent errors we always allocate enough space. When there are fewer args, the preallocated words are simply wasted. */ extern void qt_start(void); #define QUICKTHREADS_ARGS_MD(sp) (QUICKTHREADS_SPUT (sp, QUICKTHREADS_R26, qt_start)) /* The AXP uses a struct for `va_list', so pass a pointer to the struct. This may break some uses of `QUICKTHREADS_VARGS', but then we never claimed it was totally portable. */ typedef void (qt_function_t)(void); struct qt_t; struct va_list; extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes, struct va_list *vargs, void *pt, qt_function_t *startup, qt_function_t *vuserf, qt_function_t *cleanup); #define QUICKTHREADS_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \ (qt_vargs (sp, nbytes, (struct va_list *)(&(vargs)), pt, \ (qt_function_t *) startup, (qt_function_t *)vuserf, \ (qt_function_t *)cleanup)); /* The *index* (positive offset) of where to put each value. */ #define QUICKTHREADS_ONLY_INDEX (QUICKTHREADS_R12) #define QUICKTHREADS_USER_INDEX (QUICKTHREADS_R11) #define QUICKTHREADS_ARGT_INDEX (QUICKTHREADS_R10) #define QUICKTHREADS_ARGU_INDEX (QUICKTHREADS_R9) #define QUICKTHREADS_VCLEANUP_INDEX (QUICKTHREADS_R10) #define QUICKTHREADS_VUSERF_INDEX (QUICKTHREADS_R11) #define QUICKTHREADS_VSTARTUP_INDEX (QUICKTHREADS_R12) #define QUICKTHREADS_VARGT_INDEX (QUICKTHREADS_R9) #endif /* ndef QUICKTHREADS_AXP_H */ systemc-2.3.4/src/sysc/packages/qt/md/m88k.c0000644000175000017500000000661414342422106020401 0ustar carstencarsten/* * QuickThreads -- Threads-building toolkit. * Copyright (c) 1993 by David Keppel * * Permission to use, copy, modify and distribute this software and * its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice and this notice * appear in all copies. This software is provided as a * proof-of-concept and for demonstration purposes; there is no * representation about the suitability of this software for any * purpose. */ #include #include "qt.h" /* Varargs is harder on the m88k. Parameters are saved on the stack as something like (stack grows down to low memory; low at bottom of picture): | : | arg8 <-- va_list.__va_stk +--- | : +--- | arg7 | : | iarg0 <-- va_list.__va_reg +--- | : | va_list { __va_arg, __va_stk, __va_reg } | : +--- Here, `va_list.__va_arg' is the number of word-size arguments that have already been skipped. Doubles must be double-arligned. What this means for us is that the user's routine needs to be called with an arg list where some of the words in the `__va_stk' part of the parameter list have to be promoted to registers. BUG: doubleword register arguments must be double-aligned. If something is passed as an even # arg and used as an odd # arg or vice-versa, the code in the called routine (in the new thread) that decides how to adjust the index will get it wrong, because it will be expect it to be, say, doubleword aligned and it will really be singleword aligned. I'm not sure you can solve this without knowing the types of all the arguments. All in all, we never promised varargs would work reliably. */ #define QUICKTHREADS_VADJ(sp) (((char *)sp) - QUICKTHREADS_VSTKBASE) /* Always allocate at least enough space for 8 args; waste some space at the base of the stack to ensure the startup routine doesn't read off the end of the stack. */ #define QUICKTHREADS_VARGS_MD0(sp, vabytes) \ ((qt_t *)(((char *)(sp)) - 8*4 - QUICKTHREADS_STKROUNDUP(vabytes))) extern void qt_vstart(void); #define QUICKTHREADS_VARGS_MD1(sp) (QUICKTHREADS_SPUT (sp, QUICKTHREADS_1, qt_vstart)) struct qt_t * qt_vargs (struct qt_t *qsp, int nbytes, void *vargs, void *pt, qt_function_t *startup, qt_function_t *vuserf, qt_function_t *cleanup) { va_list ap; int i; int n; /* Number of words into original arg list. */ qt_word_t *sp; int *reg; /* Where to read passed-in-reg args. */ int *stk; /* Where to read passed-on-stk args. */ ap = *(va_list *)vargs; qsp = QUICKTHREADS_VARGS_MD0 (qsp, nbytes); sp = (qt_word_t *)qsp; reg = (ap.__va_arg < 8) ? &ap.__va_reg[ap.__va_arg] : 0; stk = &ap.__va_stk[8]; n = ap.__va_arg; for (i=0; i