sc_module.cc revision 13091
111183Serfan.azarkhish@unibo.it/*
211183Serfan.azarkhish@unibo.it * Copyright 2018 Google, Inc.
311183Serfan.azarkhish@unibo.it *
411183Serfan.azarkhish@unibo.it * Redistribution and use in source and binary forms, with or without
511183Serfan.azarkhish@unibo.it * modification, are permitted provided that the following conditions are
611183Serfan.azarkhish@unibo.it * met: redistributions of source code must retain the above copyright
711183Serfan.azarkhish@unibo.it * notice, this list of conditions and the following disclaimer;
811183Serfan.azarkhish@unibo.it * redistributions in binary form must reproduce the above copyright
911183Serfan.azarkhish@unibo.it * notice, this list of conditions and the following disclaimer in the
1011183Serfan.azarkhish@unibo.it * documentation and/or other materials provided with the distribution;
1111183Serfan.azarkhish@unibo.it * neither the name of the copyright holders nor the names of its
1211183Serfan.azarkhish@unibo.it * contributors may be used to endorse or promote products derived from
1311183Serfan.azarkhish@unibo.it * this software without specific prior written permission.
1411183Serfan.azarkhish@unibo.it *
1511183Serfan.azarkhish@unibo.it * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1611183Serfan.azarkhish@unibo.it * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1711183Serfan.azarkhish@unibo.it * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1811183Serfan.azarkhish@unibo.it * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1911183Serfan.azarkhish@unibo.it * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2011183Serfan.azarkhish@unibo.it * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2111183Serfan.azarkhish@unibo.it * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2211183Serfan.azarkhish@unibo.it * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2311183Serfan.azarkhish@unibo.it * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2411183Serfan.azarkhish@unibo.it * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2511183Serfan.azarkhish@unibo.it * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2611183Serfan.azarkhish@unibo.it *
2711183Serfan.azarkhish@unibo.it * Authors: Gabe Black
2811183Serfan.azarkhish@unibo.it */
2911183Serfan.azarkhish@unibo.it
3011183Serfan.azarkhish@unibo.it#include <memory>
3111183Serfan.azarkhish@unibo.it#include <vector>
3211183Serfan.azarkhish@unibo.it
3311183Serfan.azarkhish@unibo.it#include "base/logging.hh"
3411183Serfan.azarkhish@unibo.it#include "systemc/core/kernel.hh"
3511183Serfan.azarkhish@unibo.it#include "systemc/core/module.hh"
3611183Serfan.azarkhish@unibo.it#include "systemc/core/process_types.hh"
3711183Serfan.azarkhish@unibo.it#include "systemc/ext/core/sc_module.hh"
3811183Serfan.azarkhish@unibo.it#include "systemc/ext/core/sc_module_name.hh"
3911183Serfan.azarkhish@unibo.it
4011551Sabdul.mutaal@gmail.comnamespace sc_gem5
4111183Serfan.azarkhish@unibo.it{
4211183Serfan.azarkhish@unibo.it
4311183Serfan.azarkhish@unibo.itProcess *
4411183Serfan.azarkhish@unibo.itnewMethodProcess(const char *name, ProcessFuncWrapper *func)
4511183Serfan.azarkhish@unibo.it{
4611183Serfan.azarkhish@unibo.it    Process *p = new Method(name, func);
4711183Serfan.azarkhish@unibo.it    scheduler.reg(p);
4811183Serfan.azarkhish@unibo.it    return p;
4911183Serfan.azarkhish@unibo.it}
5011183Serfan.azarkhish@unibo.it
5111183Serfan.azarkhish@unibo.itProcess *
5211551Sabdul.mutaal@gmail.comnewThreadProcess(const char *name, ProcessFuncWrapper *func)
5311551Sabdul.mutaal@gmail.com{
5411551Sabdul.mutaal@gmail.com    Process *p = new Thread(name, func);
5511551Sabdul.mutaal@gmail.com    scheduler.reg(p);
5611183Serfan.azarkhish@unibo.it    return p;
5711183Serfan.azarkhish@unibo.it}
5811183Serfan.azarkhish@unibo.it
5911183Serfan.azarkhish@unibo.itProcess *
6011183Serfan.azarkhish@unibo.itnewCThreadProcess(const char *name, ProcessFuncWrapper *func)
6111837Swendy.elsasser@arm.com{
6211183Serfan.azarkhish@unibo.it    Process *p = new CThread(name, func);
6311183Serfan.azarkhish@unibo.it    scheduler.reg(p);
6411183Serfan.azarkhish@unibo.it    p->dontInitialize();
6511183Serfan.azarkhish@unibo.it    return p;
6611183Serfan.azarkhish@unibo.it}
6711183Serfan.azarkhish@unibo.it
6811551Sabdul.mutaal@gmail.comUniqueNameGen nameGen;
6911183Serfan.azarkhish@unibo.it
7011551Sabdul.mutaal@gmail.com} // namespace sc_gem5
7111551Sabdul.mutaal@gmail.com
7211551Sabdul.mutaal@gmail.comnamespace sc_core
7311551Sabdul.mutaal@gmail.com{
7411551Sabdul.mutaal@gmail.com
7511183Serfan.azarkhish@unibo.itsc_bind_proxy::sc_bind_proxy(sc_interface &_interface) :
7611551Sabdul.mutaal@gmail.com    _interface(&_interface), _port(nullptr)
7711183Serfan.azarkhish@unibo.it{}
7811551Sabdul.mutaal@gmail.com
7911551Sabdul.mutaal@gmail.comsc_bind_proxy::sc_bind_proxy(sc_port_base &_port) :
8011551Sabdul.mutaal@gmail.com    _interface(nullptr), _port(&_port)
8111183Serfan.azarkhish@unibo.it{}
8211183Serfan.azarkhish@unibo.it
8311183Serfan.azarkhish@unibo.itconst sc_bind_proxy SC_BIND_PROXY_NUL(*(sc_port_base *)nullptr);
8411551Sabdul.mutaal@gmail.com
8511551Sabdul.mutaal@gmail.comsc_module::~sc_module() { delete _gem5_module; }
8611551Sabdul.mutaal@gmail.com
8711551Sabdul.mutaal@gmail.comconst sc_bind_proxy SC_BIND_PROXY_NIL(*(sc_port_base *)nullptr);
8811551Sabdul.mutaal@gmail.com
8911551Sabdul.mutaal@gmail.comvoid
9011551Sabdul.mutaal@gmail.comsc_module::operator () (const sc_bind_proxy &p001,
9111551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p002,
9211551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p003,
9311551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p004,
9411551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p005,
9511551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p006,
9611551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p007,
9711551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p008,
9811551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p009,
9911551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p010,
10011551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p011,
10111551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p012,
10211551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p013,
10311551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p014,
10411551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p015,
10511551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p016,
10611551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p017,
10711551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p018,
10811551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p019,
10911551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p020,
11011551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p021,
11111551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p022,
11211551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p023,
11311551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p024,
11411551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p025,
11511551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p026,
11611551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p027,
11711551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p028,
11811551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p029,
11911551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p030,
12011551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p031,
12111551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p032,
12211551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p033,
12311551Sabdul.mutaal@gmail.com                        const sc_bind_proxy &p034,
12411183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p035,
12512340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p036,
12611183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p037,
12711183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p038,
12811183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p039,
12912340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p040,
13011183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p041,
13112340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p042,
13212340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p043,
13312340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p044,
13411183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p045,
13512340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p046,
13612340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p047,
13711183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p048,
13811183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p049,
13911183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p050,
14011183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p051,
14111183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p052,
14212340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p053,
14312340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p054,
14411183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p055,
14511183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p056,
14612340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p057,
14712340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p058,
14811183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p059,
14911183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p060,
15011183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p061,
15112340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p062,
15212340Szulian@eit.uni-kl.de                        const sc_bind_proxy &p063,
15311183Serfan.azarkhish@unibo.it                        const sc_bind_proxy &p064)
15411183Serfan.azarkhish@unibo.it{
15511183Serfan.azarkhish@unibo.it    std::vector<const ::sc_core::sc_bind_proxy *> proxies;
15612340Szulian@eit.uni-kl.de    auto insert = [&proxies](const ::sc_core::sc_bind_proxy &p) -> bool {
15712340Szulian@eit.uni-kl.de        if (!p.port() && !p.interface())
15811183Serfan.azarkhish@unibo.it            return false;
15911551Sabdul.mutaal@gmail.com        proxies.push_back(&p);
16012340Szulian@eit.uni-kl.de        return true;
16112340Szulian@eit.uni-kl.de    };
16211551Sabdul.mutaal@gmail.com    insert(p001) && insert(p002) && insert(p003) && insert(p004) &&
16312340Szulian@eit.uni-kl.de    insert(p005) && insert(p006) && insert(p007) && insert(p008) &&
16411551Sabdul.mutaal@gmail.com    insert(p009) && insert(p010) && insert(p011) && insert(p012) &&
16512340Szulian@eit.uni-kl.de    insert(p013) && insert(p014) && insert(p015) && insert(p016) &&
16612340Szulian@eit.uni-kl.de    insert(p017) && insert(p018) && insert(p019) && insert(p020) &&
16711183Serfan.azarkhish@unibo.it    insert(p021) && insert(p022) && insert(p023) && insert(p024) &&
16811183Serfan.azarkhish@unibo.it    insert(p025) && insert(p026) && insert(p027) && insert(p028) &&
16911183Serfan.azarkhish@unibo.it    insert(p029) && insert(p030) && insert(p031) && insert(p032) &&
17012340Szulian@eit.uni-kl.de    insert(p033) && insert(p034) && insert(p035) && insert(p036) &&
17112340Szulian@eit.uni-kl.de    insert(p037) && insert(p038) && insert(p039) && insert(p040) &&
17212340Szulian@eit.uni-kl.de    insert(p041) && insert(p042) && insert(p043) && insert(p044) &&
17311183Serfan.azarkhish@unibo.it    insert(p045) && insert(p046) && insert(p047) && insert(p048) &&
17411183Serfan.azarkhish@unibo.it    insert(p049) && insert(p050) && insert(p051) && insert(p052) &&
17511183Serfan.azarkhish@unibo.it    insert(p053) && insert(p054) && insert(p055) && insert(p056) &&
17612340Szulian@eit.uni-kl.de    insert(p057) && insert(p058) && insert(p059) && insert(p060) &&
17712340Szulian@eit.uni-kl.de    insert(p061) && insert(p062) && insert(p063) && insert(p064);
17812340Szulian@eit.uni-kl.de    _gem5_module->bindPorts(proxies);
17911183Serfan.azarkhish@unibo.it}
18011183Serfan.azarkhish@unibo.it
18111183Serfan.azarkhish@unibo.itconst std::vector<sc_object *> &
18212340Szulian@eit.uni-kl.desc_module::get_child_objects() const
18312340Szulian@eit.uni-kl.de{
18411183Serfan.azarkhish@unibo.it    return _gem5_module->obj()->get_child_objects();
18511551Sabdul.mutaal@gmail.com}
18612340Szulian@eit.uni-kl.de
18712340Szulian@eit.uni-kl.deconst std::vector<sc_event *> &
18811183Serfan.azarkhish@unibo.itsc_module::get_child_events() const
18911551Sabdul.mutaal@gmail.com{
19011551Sabdul.mutaal@gmail.com    return _gem5_module->obj()->get_child_events();
19111551Sabdul.mutaal@gmail.com}
19211551Sabdul.mutaal@gmail.com
19312340Szulian@eit.uni-kl.desc_module::sc_module() :
19412340Szulian@eit.uni-kl.de    sc_object(sc_gem5::newModuleChecked()->name()),
19512340Szulian@eit.uni-kl.de    _gem5_module(sc_gem5::currentModule())
19611551Sabdul.mutaal@gmail.com{}
19711551Sabdul.mutaal@gmail.com
19811551Sabdul.mutaal@gmail.comsc_module::sc_module(const sc_module_name &) : sc_module() {}
19911551Sabdul.mutaal@gmail.comsc_module::sc_module(const char *_name) : sc_module(sc_module_name(_name)) {}
20012340Szulian@eit.uni-kl.desc_module::sc_module(const std::string &_name) :
20112340Szulian@eit.uni-kl.de    sc_module(sc_module_name(_name.c_str()))
20212340Szulian@eit.uni-kl.de{}
20311551Sabdul.mutaal@gmail.com
20411551Sabdul.mutaal@gmail.comvoid
20511551Sabdul.mutaal@gmail.comsc_module::reset_signal_is(const sc_in<bool> &, bool)
20612340Szulian@eit.uni-kl.de{
20712340Szulian@eit.uni-kl.de    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
20812340Szulian@eit.uni-kl.de}
20911551Sabdul.mutaal@gmail.com
21011183Serfan.azarkhish@unibo.itvoid
21112340Szulian@eit.uni-kl.desc_module::reset_signal_is(const sc_inout<bool> &, bool)
21212340Szulian@eit.uni-kl.de{
21311183Serfan.azarkhish@unibo.it    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
21411183Serfan.azarkhish@unibo.it}
21512340Szulian@eit.uni-kl.de
21612340Szulian@eit.uni-kl.devoid
21711183Serfan.azarkhish@unibo.itsc_module::reset_signal_is(const sc_out<bool> &, bool)
21811551Sabdul.mutaal@gmail.com{
21912340Szulian@eit.uni-kl.de    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
22012340Szulian@eit.uni-kl.de}
22112340Szulian@eit.uni-kl.de
22211183Serfan.azarkhish@unibo.itvoid
22312340Szulian@eit.uni-kl.desc_module::reset_signal_is(const sc_signal_in_if<bool> &, bool)
22412340Szulian@eit.uni-kl.de{
22512340Szulian@eit.uni-kl.de    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
22612340Szulian@eit.uni-kl.de}
22712340Szulian@eit.uni-kl.de
22812340Szulian@eit.uni-kl.de
22911183Serfan.azarkhish@unibo.itvoid
23012340Szulian@eit.uni-kl.desc_module::async_reset_signal_is(const sc_in<bool> &, bool)
23112340Szulian@eit.uni-kl.de{
23211183Serfan.azarkhish@unibo.it    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
23311183Serfan.azarkhish@unibo.it}
23412340Szulian@eit.uni-kl.de
23512340Szulian@eit.uni-kl.devoid
23611183Serfan.azarkhish@unibo.itsc_module::async_reset_signal_is(const sc_inout<bool> &, bool)
23711551Sabdul.mutaal@gmail.com{
23812340Szulian@eit.uni-kl.de    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
23912340Szulian@eit.uni-kl.de}
24011183Serfan.azarkhish@unibo.it
24112340Szulian@eit.uni-kl.devoid
24212340Szulian@eit.uni-kl.desc_module::async_reset_signal_is(const sc_out<bool> &, bool)
24312340Szulian@eit.uni-kl.de{
24411183Serfan.azarkhish@unibo.it    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
24512340Szulian@eit.uni-kl.de}
24611551Sabdul.mutaal@gmail.com
24712340Szulian@eit.uni-kl.devoid
24812340Szulian@eit.uni-kl.desc_module::async_reset_signal_is(const sc_signal_in_if<bool> &, bool)
24912340Szulian@eit.uni-kl.de{
25011551Sabdul.mutaal@gmail.com    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
25111551Sabdul.mutaal@gmail.com}
25211551Sabdul.mutaal@gmail.com
25312340Szulian@eit.uni-kl.de
25412340Szulian@eit.uni-kl.devoid
25512340Szulian@eit.uni-kl.desc_module::dont_initialize()
25611551Sabdul.mutaal@gmail.com{
25711551Sabdul.mutaal@gmail.com    ::sc_gem5::Process::newest()->dontInitialize();
25811551Sabdul.mutaal@gmail.com}
25912340Szulian@eit.uni-kl.de
26012340Szulian@eit.uni-kl.devoid
26112340Szulian@eit.uni-kl.desc_module::set_stack_size(size_t size)
26212340Szulian@eit.uni-kl.de{
26312340Szulian@eit.uni-kl.de    ::sc_gem5::Process::newest()->setStackSize(size);
26412340Szulian@eit.uni-kl.de}
26512340Szulian@eit.uni-kl.de
26612340Szulian@eit.uni-kl.de
26712340Szulian@eit.uni-kl.devoid sc_module::next_trigger() { ::sc_core::next_trigger(); }
26812340Szulian@eit.uni-kl.de
26912340Szulian@eit.uni-kl.devoid
27012340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_event &e)
27112340Szulian@eit.uni-kl.de{
27212340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(e);
27312340Szulian@eit.uni-kl.de}
27412340Szulian@eit.uni-kl.de
27512340Szulian@eit.uni-kl.devoid
27612340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_event_or_list &eol)
27712340Szulian@eit.uni-kl.de{
27812340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(eol);
27912340Szulian@eit.uni-kl.de}
28012340Szulian@eit.uni-kl.de
28112340Szulian@eit.uni-kl.devoid
28212340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_event_and_list &eal)
28312340Szulian@eit.uni-kl.de{
28412340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(eal);
28512340Szulian@eit.uni-kl.de}
28612340Szulian@eit.uni-kl.de
28712340Szulian@eit.uni-kl.devoid
28811551Sabdul.mutaal@gmail.comsc_module::next_trigger(const sc_time &t)
28911551Sabdul.mutaal@gmail.com{
29012340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(t);
29112340Szulian@eit.uni-kl.de}
29211551Sabdul.mutaal@gmail.com
29312340Szulian@eit.uni-kl.devoid
29412340Szulian@eit.uni-kl.desc_module::next_trigger(double d, sc_time_unit u)
29511183Serfan.azarkhish@unibo.it{
29612340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(d, u);
29712340Szulian@eit.uni-kl.de}
29812340Szulian@eit.uni-kl.de
29912340Szulian@eit.uni-kl.devoid
30012340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_time &t, const sc_event &e)
30112340Szulian@eit.uni-kl.de{
30212340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(t, e);
30312340Szulian@eit.uni-kl.de}
30412340Szulian@eit.uni-kl.de
30512340Szulian@eit.uni-kl.devoid
30612340Szulian@eit.uni-kl.desc_module::next_trigger(double d, sc_time_unit u, const sc_event &e)
30712340Szulian@eit.uni-kl.de{
30812340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(d, u, e);
30912340Szulian@eit.uni-kl.de}
31011183Serfan.azarkhish@unibo.it
31112340Szulian@eit.uni-kl.devoid
31212340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_time &t, const sc_event_or_list &eol)
31312340Szulian@eit.uni-kl.de{
31412340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(t, eol);
31512340Szulian@eit.uni-kl.de}
31612340Szulian@eit.uni-kl.de
31712340Szulian@eit.uni-kl.devoid
31812340Szulian@eit.uni-kl.desc_module::next_trigger(double d, sc_time_unit u, const sc_event_or_list &eol)
31912340Szulian@eit.uni-kl.de{
32012340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(d, u, eol);
32112340Szulian@eit.uni-kl.de}
32212340Szulian@eit.uni-kl.de
32312340Szulian@eit.uni-kl.devoid
32412340Szulian@eit.uni-kl.desc_module::next_trigger(const sc_time &t, const sc_event_and_list &eal)
32512340Szulian@eit.uni-kl.de{
32612340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(t, eal);
32712340Szulian@eit.uni-kl.de}
32812340Szulian@eit.uni-kl.de
32912340Szulian@eit.uni-kl.devoid
33012340Szulian@eit.uni-kl.desc_module::next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal)
33112340Szulian@eit.uni-kl.de{
33212340Szulian@eit.uni-kl.de    ::sc_core::next_trigger(d, u, eal);
33312340Szulian@eit.uni-kl.de}
33412340Szulian@eit.uni-kl.de
33512340Szulian@eit.uni-kl.de
33612340Szulian@eit.uni-kl.debool
33712340Szulian@eit.uni-kl.desc_module::timed_out()
33812340Szulian@eit.uni-kl.de{
33912340Szulian@eit.uni-kl.de    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
34012340Szulian@eit.uni-kl.de    return false;
34112340Szulian@eit.uni-kl.de}
34211183Serfan.azarkhish@unibo.it
34311551Sabdul.mutaal@gmail.com
34412340Szulian@eit.uni-kl.devoid
34512340Szulian@eit.uni-kl.desc_module::wait()
34612340Szulian@eit.uni-kl.de{
34711183Serfan.azarkhish@unibo.it    ::sc_core::wait();
34811551Sabdul.mutaal@gmail.com}
34912340Szulian@eit.uni-kl.de
35012340Szulian@eit.uni-kl.devoid
35112340Szulian@eit.uni-kl.desc_module::wait(int i)
35212340Szulian@eit.uni-kl.de{
35312340Szulian@eit.uni-kl.de    ::sc_core::wait(i);
35411183Serfan.azarkhish@unibo.it}
35511551Sabdul.mutaal@gmail.com
35611551Sabdul.mutaal@gmail.comvoid
35712340Szulian@eit.uni-kl.desc_module::wait(const sc_event &e)
35812340Szulian@eit.uni-kl.de{
35912340Szulian@eit.uni-kl.de    ::sc_core::wait(e);
36012340Szulian@eit.uni-kl.de}
36112340Szulian@eit.uni-kl.de
36212340Szulian@eit.uni-kl.devoid
36312340Szulian@eit.uni-kl.desc_module::wait(const sc_event_or_list &eol)
36411551Sabdul.mutaal@gmail.com{
36512340Szulian@eit.uni-kl.de    ::sc_core::wait(eol);
36612340Szulian@eit.uni-kl.de}
36712340Szulian@eit.uni-kl.de
36812340Szulian@eit.uni-kl.devoid
36912340Szulian@eit.uni-kl.desc_module::wait(const sc_event_and_list &eal)
37012340Szulian@eit.uni-kl.de{
37112340Szulian@eit.uni-kl.de    ::sc_core::wait(eal);
37212340Szulian@eit.uni-kl.de}
37312340Szulian@eit.uni-kl.de
37412340Szulian@eit.uni-kl.devoid
37512340Szulian@eit.uni-kl.desc_module::wait(const sc_time &t)
37611183Serfan.azarkhish@unibo.it{
37712340Szulian@eit.uni-kl.de    ::sc_core::wait(t);
37812340Szulian@eit.uni-kl.de}
37912340Szulian@eit.uni-kl.de
38012340Szulian@eit.uni-kl.devoid
38111183Serfan.azarkhish@unibo.itsc_module::wait(double d, sc_time_unit u)
38211551Sabdul.mutaal@gmail.com{
38311551Sabdul.mutaal@gmail.com    ::sc_core::wait(d, u);
38411551Sabdul.mutaal@gmail.com}
38512340Szulian@eit.uni-kl.de
38612340Szulian@eit.uni-kl.devoid
38711551Sabdul.mutaal@gmail.comsc_module::wait(const sc_time &t, const sc_event &e)
38812340Szulian@eit.uni-kl.de{
38912340Szulian@eit.uni-kl.de    ::sc_core::wait(t, e);
39011551Sabdul.mutaal@gmail.com}
39112340Szulian@eit.uni-kl.de
39212340Szulian@eit.uni-kl.devoid
39312340Szulian@eit.uni-kl.desc_module::wait(double d, sc_time_unit u, const sc_event &e)
39412340Szulian@eit.uni-kl.de{
39512340Szulian@eit.uni-kl.de    ::sc_core::wait(d, u, e);
39611551Sabdul.mutaal@gmail.com}
39712340Szulian@eit.uni-kl.de
39812340Szulian@eit.uni-kl.devoid
39912340Szulian@eit.uni-kl.desc_module::wait(const sc_time &t, const sc_event_or_list &eol)
40011551Sabdul.mutaal@gmail.com{
40111551Sabdul.mutaal@gmail.com    ::sc_core::wait(t, eol);
40212340Szulian@eit.uni-kl.de}
40312340Szulian@eit.uni-kl.de
40412340Szulian@eit.uni-kl.devoid
40512340Szulian@eit.uni-kl.desc_module::wait(double d, sc_time_unit u, const sc_event_or_list &eol)
40612340Szulian@eit.uni-kl.de{
40712340Szulian@eit.uni-kl.de    ::sc_core::wait(d, u, eol);
40811551Sabdul.mutaal@gmail.com}
40912340Szulian@eit.uni-kl.de
41012340Szulian@eit.uni-kl.devoid
41112340Szulian@eit.uni-kl.desc_module::wait(const sc_time &t, const sc_event_and_list &eal)
41212340Szulian@eit.uni-kl.de{
41312340Szulian@eit.uni-kl.de    ::sc_core::wait(t, eal);
41411551Sabdul.mutaal@gmail.com}
41511551Sabdul.mutaal@gmail.com
41612340Szulian@eit.uni-kl.devoid
41712340Szulian@eit.uni-kl.desc_module::wait(double d, sc_time_unit u, const sc_event_and_list &eal)
41811551Sabdul.mutaal@gmail.com{
41911551Sabdul.mutaal@gmail.com    ::sc_core::wait(d, u, eal);
42011551Sabdul.mutaal@gmail.com}
42111183Serfan.azarkhish@unibo.it
42211551Sabdul.mutaal@gmail.com
42311551Sabdul.mutaal@gmail.comvoid
42411551Sabdul.mutaal@gmail.comsc_module::halt()
42511551Sabdul.mutaal@gmail.com{
42612340Szulian@eit.uni-kl.de    ::sc_core::halt();
42711551Sabdul.mutaal@gmail.com}
42811551Sabdul.mutaal@gmail.com
42911551Sabdul.mutaal@gmail.comvoid
43012340Szulian@eit.uni-kl.desc_module::at_posedge(const sc_signal_in_if<bool> &s)
43112340Szulian@eit.uni-kl.de{
43212340Szulian@eit.uni-kl.de    ::sc_core::at_posedge(s);
43311551Sabdul.mutaal@gmail.com}
43411551Sabdul.mutaal@gmail.com
43511551Sabdul.mutaal@gmail.comvoid
43611551Sabdul.mutaal@gmail.comsc_module::at_posedge(const sc_signal_in_if<sc_dt::sc_logic> &s)
43711551Sabdul.mutaal@gmail.com{
43811551Sabdul.mutaal@gmail.com    ::sc_core::at_posedge(s);
43911551Sabdul.mutaal@gmail.com}
44011551Sabdul.mutaal@gmail.com
44111551Sabdul.mutaal@gmail.comvoid
44211551Sabdul.mutaal@gmail.comsc_module::at_negedge(const sc_signal_in_if<bool> &s)
44311551Sabdul.mutaal@gmail.com{
44411551Sabdul.mutaal@gmail.com    ::sc_core::at_negedge(s);
44511551Sabdul.mutaal@gmail.com}
44611551Sabdul.mutaal@gmail.com
44711551Sabdul.mutaal@gmail.comvoid
44811551Sabdul.mutaal@gmail.comsc_module::at_negedge(const sc_signal_in_if<sc_dt::sc_logic> &s)
44911551Sabdul.mutaal@gmail.com{
45012340Szulian@eit.uni-kl.de    ::sc_core::at_negedge(s);
45112340Szulian@eit.uni-kl.de}
45211551Sabdul.mutaal@gmail.com
45311551Sabdul.mutaal@gmail.com
45411551Sabdul.mutaal@gmail.comvoid
45511551Sabdul.mutaal@gmail.comnext_trigger()
45611551Sabdul.mutaal@gmail.com{
45711551Sabdul.mutaal@gmail.com    sc_gem5::Process *p = sc_gem5::scheduler.current();
45811551Sabdul.mutaal@gmail.com    p->setDynamic(nullptr);
45911551Sabdul.mutaal@gmail.com}
46011551Sabdul.mutaal@gmail.com
46111551Sabdul.mutaal@gmail.comvoid
46211551Sabdul.mutaal@gmail.comnext_trigger(const sc_event &e)
46311551Sabdul.mutaal@gmail.com{
46412340Szulian@eit.uni-kl.de    sc_gem5::Process *p = sc_gem5::scheduler.current();
46511551Sabdul.mutaal@gmail.com    p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e));
46611551Sabdul.mutaal@gmail.com}
46711551Sabdul.mutaal@gmail.com
46811551Sabdul.mutaal@gmail.comvoid
46911551Sabdul.mutaal@gmail.comnext_trigger(const sc_event_or_list &eol)
47011551Sabdul.mutaal@gmail.com{
47111551Sabdul.mutaal@gmail.com    sc_gem5::Process *p = sc_gem5::scheduler.current();
47211551Sabdul.mutaal@gmail.com    p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol));
47311551Sabdul.mutaal@gmail.com}
47411551Sabdul.mutaal@gmail.com
47511551Sabdul.mutaal@gmail.comvoid
47611551Sabdul.mutaal@gmail.comnext_trigger(const sc_event_and_list &eal)
47711551Sabdul.mutaal@gmail.com{
47811551Sabdul.mutaal@gmail.com    sc_gem5::Process *p = sc_gem5::scheduler.current();
47911551Sabdul.mutaal@gmail.com    p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal));
48011551Sabdul.mutaal@gmail.com}
48111551Sabdul.mutaal@gmail.com
48211551Sabdul.mutaal@gmail.comvoid
48311551Sabdul.mutaal@gmail.comnext_trigger(const sc_time &t)
48411551Sabdul.mutaal@gmail.com{
48511551Sabdul.mutaal@gmail.com    sc_gem5::Process *p = sc_gem5::scheduler.current();
48611551Sabdul.mutaal@gmail.com    p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t));
48711551Sabdul.mutaal@gmail.com}
488
489void
490next_trigger(double d, sc_time_unit u)
491{
492    next_trigger(sc_time(d, u));
493}
494
495void
496next_trigger(const sc_time &t, const sc_event &e)
497{
498    sc_gem5::Process *p = sc_gem5::scheduler.current();
499    p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e));
500}
501
502void
503next_trigger(double d, sc_time_unit u, const sc_event &e)
504{
505    next_trigger(sc_time(d, u), e);
506}
507
508void
509next_trigger(const sc_time &t, const sc_event_or_list &eol)
510{
511    sc_gem5::Process *p = sc_gem5::scheduler.current();
512    p->setDynamic(
513            new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol));
514}
515
516void
517next_trigger(double d, sc_time_unit u, const sc_event_or_list &eol)
518{
519    next_trigger(sc_time(d, u), eol);
520}
521
522void
523next_trigger(const sc_time &t, const sc_event_and_list &eal)
524{
525    sc_gem5::Process *p = sc_gem5::scheduler.current();
526    p->setDynamic(
527            new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal));
528}
529
530void
531next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal)
532{
533    next_trigger(sc_time(d, u), eal);
534}
535
536bool
537timed_out()
538{
539    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
540    return false;
541}
542
543
544void
545wait()
546{
547    sc_gem5::Process *p = sc_gem5::scheduler.current();
548    p->setDynamic(nullptr);
549    sc_gem5::scheduler.yield();
550}
551
552void
553wait(int n)
554{
555    for (int i = 0; i < n; i++)
556        wait();
557}
558
559void
560wait(const sc_event &e)
561{
562    sc_gem5::Process *p = sc_gem5::scheduler.current();
563    p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e));
564    sc_gem5::scheduler.yield();
565}
566
567void
568wait(const sc_event_or_list &eol)
569{
570    sc_gem5::Process *p = sc_gem5::scheduler.current();
571    p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol));
572    sc_gem5::scheduler.yield();
573}
574
575void
576wait(const sc_event_and_list &eal)
577{
578    sc_gem5::Process *p = sc_gem5::scheduler.current();
579    p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal));
580    sc_gem5::scheduler.yield();
581}
582
583void
584wait(const sc_time &t)
585{
586    sc_gem5::Process *p = sc_gem5::scheduler.current();
587    p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t));
588    sc_gem5::scheduler.yield();
589}
590
591void
592wait(double d, sc_time_unit u)
593{
594    wait(sc_time(d, u));
595}
596
597void
598wait(const sc_time &t, const sc_event &e)
599{
600    sc_gem5::Process *p = sc_gem5::scheduler.current();
601    p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e));
602    sc_gem5::scheduler.yield();
603}
604
605void
606wait(double d, sc_time_unit u, const sc_event &e)
607{
608    wait(sc_time(d, u), e);
609}
610
611void
612wait(const sc_time &t, const sc_event_or_list &eol)
613{
614    sc_gem5::Process *p = sc_gem5::scheduler.current();
615    p->setDynamic(
616            new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol));
617    sc_gem5::scheduler.yield();
618}
619
620void
621wait(double d, sc_time_unit u, const sc_event_or_list &eol)
622{
623    wait(sc_time(d, u), eol);
624}
625
626void
627wait(const sc_time &t, const sc_event_and_list &eal)
628{
629    sc_gem5::Process *p = sc_gem5::scheduler.current();
630    p->setDynamic(
631            new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal));
632    sc_gem5::scheduler.yield();
633}
634
635void
636wait(double d, sc_time_unit u, const sc_event_and_list &eal)
637{
638    wait(sc_time(d, u), eal);
639}
640
641void
642halt()
643{
644    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
645}
646
647void
648at_posedge(const sc_signal_in_if<bool> &)
649{
650    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
651}
652
653void
654at_posedge(const sc_signal_in_if<sc_dt::sc_logic> &)
655{
656    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
657}
658
659void
660at_negedge(const sc_signal_in_if<bool> &)
661{
662    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
663}
664
665void
666at_negedge(const sc_signal_in_if<sc_dt::sc_logic> &)
667{
668    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
669}
670
671const char *
672sc_gen_unique_name(const char *seed)
673{
674    ::sc_gem5::Module *mod = ::sc_gem5::currentModule();
675    return mod ? mod->uniqueName(seed) :
676        ::sc_gem5::nameGen.gen(seed);
677}
678
679bool
680sc_hierarchical_name_exists(const char *name)
681{
682    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
683    return false;
684}
685
686bool
687sc_start_of_simulation_invoked()
688{
689    return ::sc_gem5::kernel->startOfSimulationComplete();
690}
691
692bool
693sc_end_of_simulation_invoked()
694{
695    return ::sc_gem5::kernel->endOfSimulationComplete();
696}
697
698sc_module *
699sc_module_sc_new(sc_module *mod)
700{
701    static std::vector<std::unique_ptr<sc_module> > modules;
702    modules.emplace_back(mod);
703    return mod;
704}
705
706} // namespace sc_core
707