sc_module.cc revision 13155
19241Sandreas.hansson@arm.com/* 29717Sandreas.hansson@arm.com * Copyright 2018 Google, Inc. 39241Sandreas.hansson@arm.com * 49241Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 59241Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 69241Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 79241Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 89241Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 99241Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 109241Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 119241Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 129241Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 139241Sandreas.hansson@arm.com * this software without specific prior written permission. 149241Sandreas.hansson@arm.com * 159241Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 169241Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 179241Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 189241Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 199241Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 209241Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 219241Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 229241Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 239241Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 249241Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 259241Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 269241Sandreas.hansson@arm.com * 279241Sandreas.hansson@arm.com * Authors: Gabe Black 289241Sandreas.hansson@arm.com */ 299241Sandreas.hansson@arm.com 309241Sandreas.hansson@arm.com#include <memory> 319241Sandreas.hansson@arm.com#include <string> 329241Sandreas.hansson@arm.com#include <vector> 339241Sandreas.hansson@arm.com 349241Sandreas.hansson@arm.com#include "base/logging.hh" 359241Sandreas.hansson@arm.com#include "systemc/core/kernel.hh" 369241Sandreas.hansson@arm.com#include "systemc/core/module.hh" 379241Sandreas.hansson@arm.com#include "systemc/core/process_types.hh" 389241Sandreas.hansson@arm.com#include "systemc/ext/channel/sc_signal_in_if.hh" 399241Sandreas.hansson@arm.com#include "systemc/ext/core/sc_module.hh" 409241Sandreas.hansson@arm.com#include "systemc/ext/core/sc_module_name.hh" 419241Sandreas.hansson@arm.com#include "systemc/ext/dt/bit/sc_logic.hh" 429241Sandreas.hansson@arm.com#include "systemc/ext/utils/sc_report_handler.hh" 439241Sandreas.hansson@arm.com 4410138Sneha.agarwal@arm.comnamespace sc_gem5 459241Sandreas.hansson@arm.com{ 469241Sandreas.hansson@arm.com 479241Sandreas.hansson@arm.comProcess * 489241Sandreas.hansson@arm.comnewMethodProcess(const char *name, ProcessFuncWrapper *func) 499241Sandreas.hansson@arm.com{ 509241Sandreas.hansson@arm.com Method *p = new Method(name, func); 519241Sandreas.hansson@arm.com if (::sc_core::sc_is_running()) { 529241Sandreas.hansson@arm.com std::string name = p->name(); 539241Sandreas.hansson@arm.com delete p; 549241Sandreas.hansson@arm.com SC_REPORT_ERROR("(E541) call to SC_METHOD in sc_module while " 559241Sandreas.hansson@arm.com "simulation running", name.c_str()); 569241Sandreas.hansson@arm.com return nullptr; 579241Sandreas.hansson@arm.com } 589718Sandreas.hansson@arm.com scheduler.reg(p); 599720Sandreas.hansson@arm.com return p; 609717Sandreas.hansson@arm.com} 619719Sandreas.hansson@arm.com 6210360Sandreas.hansson@arm.comProcess * 639241Sandreas.hansson@arm.comnewThreadProcess(const char *name, ProcessFuncWrapper *func) 649719Sandreas.hansson@arm.com{ 659719Sandreas.hansson@arm.com Thread *p = new Thread(name, func); 669719Sandreas.hansson@arm.com if (::sc_core::sc_is_running()) { 679719Sandreas.hansson@arm.com std::string name = p->name(); 689241Sandreas.hansson@arm.com delete p; 699241Sandreas.hansson@arm.com SC_REPORT_ERROR("(E542) call to SC_THREAD in sc_module while " 709241Sandreas.hansson@arm.com "simulation running", name.c_str()); 719241Sandreas.hansson@arm.com return nullptr; 729241Sandreas.hansson@arm.com } 739241Sandreas.hansson@arm.com scheduler.reg(p); 749241Sandreas.hansson@arm.com return p; 759241Sandreas.hansson@arm.com} 769241Sandreas.hansson@arm.com 779294Sandreas.hansson@arm.comProcess * 789294Sandreas.hansson@arm.comnewCThreadProcess(const char *name, ProcessFuncWrapper *func) 799241Sandreas.hansson@arm.com{ 809241Sandreas.hansson@arm.com CThread *p = new CThread(name, func); 819241Sandreas.hansson@arm.com if (::sc_core::sc_is_running()) { 829241Sandreas.hansson@arm.com std::string name = p->name(); 839241Sandreas.hansson@arm.com delete p; 849241Sandreas.hansson@arm.com SC_REPORT_ERROR("(E543) call to SC_CTHREAD in sc_module while " 859241Sandreas.hansson@arm.com "simulation running", name.c_str()); 869241Sandreas.hansson@arm.com return nullptr; 879241Sandreas.hansson@arm.com } 889241Sandreas.hansson@arm.com scheduler.reg(p); 899241Sandreas.hansson@arm.com p->dontInitialize(); 909241Sandreas.hansson@arm.com return p; 919241Sandreas.hansson@arm.com} 929241Sandreas.hansson@arm.com 939241Sandreas.hansson@arm.comUniqueNameGen nameGen; 949524SAndreas.Sandberg@ARM.com 959241Sandreas.hansson@arm.com} // namespace sc_gem5 969241Sandreas.hansson@arm.com 979718Sandreas.hansson@arm.comnamespace sc_core 989718Sandreas.hansson@arm.com{ 999241Sandreas.hansson@arm.com 1009717Sandreas.hansson@arm.comsc_bind_proxy::sc_bind_proxy(sc_interface &_interface) : 1019241Sandreas.hansson@arm.com _interface(&_interface), _port(nullptr) 1029241Sandreas.hansson@arm.com{} 1039241Sandreas.hansson@arm.com 1049241Sandreas.hansson@arm.comsc_bind_proxy::sc_bind_proxy(sc_port_base &_port) : 1059241Sandreas.hansson@arm.com _interface(nullptr), _port(&_port) 1069241Sandreas.hansson@arm.com{} 1079241Sandreas.hansson@arm.com 1089241Sandreas.hansson@arm.comconst sc_bind_proxy SC_BIND_PROXY_NUL(*(sc_port_base *)nullptr); 1099241Sandreas.hansson@arm.com 1109241Sandreas.hansson@arm.comsc_module::~sc_module() { delete _gem5_module; } 1119524SAndreas.Sandberg@ARM.com 1129719Sandreas.hansson@arm.comconst sc_bind_proxy SC_BIND_PROXY_NIL(*(sc_port_base *)nullptr); 1139720Sandreas.hansson@arm.com 1149719Sandreas.hansson@arm.comvoid 1159241Sandreas.hansson@arm.comsc_module::operator () (const sc_bind_proxy &p001, 1169241Sandreas.hansson@arm.com const sc_bind_proxy &p002, 1179241Sandreas.hansson@arm.com const sc_bind_proxy &p003, 1189241Sandreas.hansson@arm.com const sc_bind_proxy &p004, 1199241Sandreas.hansson@arm.com const sc_bind_proxy &p005, 1209241Sandreas.hansson@arm.com const sc_bind_proxy &p006, 1219241Sandreas.hansson@arm.com const sc_bind_proxy &p007, 1229342SAndreas.Sandberg@arm.com const sc_bind_proxy &p008, 1239241Sandreas.hansson@arm.com const sc_bind_proxy &p009, 12410051Srioshering@gmail.com const sc_bind_proxy &p010, 12510051Srioshering@gmail.com const sc_bind_proxy &p011, 12610051Srioshering@gmail.com const sc_bind_proxy &p012, 12710051Srioshering@gmail.com const sc_bind_proxy &p013, 12810051Srioshering@gmail.com const sc_bind_proxy &p014, 1299719Sandreas.hansson@arm.com const sc_bind_proxy &p015, 1309719Sandreas.hansson@arm.com const sc_bind_proxy &p016, 1319719Sandreas.hansson@arm.com const sc_bind_proxy &p017, 1329719Sandreas.hansson@arm.com const sc_bind_proxy &p018, 1339719Sandreas.hansson@arm.com const sc_bind_proxy &p019, 1349719Sandreas.hansson@arm.com const sc_bind_proxy &p020, 1359719Sandreas.hansson@arm.com const sc_bind_proxy &p021, 1369719Sandreas.hansson@arm.com const sc_bind_proxy &p022, 1379719Sandreas.hansson@arm.com const sc_bind_proxy &p023, 1389719Sandreas.hansson@arm.com const sc_bind_proxy &p024, 1399241Sandreas.hansson@arm.com const sc_bind_proxy &p025, 1409241Sandreas.hansson@arm.com const sc_bind_proxy &p026, 1419241Sandreas.hansson@arm.com const sc_bind_proxy &p027, 1429241Sandreas.hansson@arm.com const sc_bind_proxy &p028, 1439241Sandreas.hansson@arm.com const sc_bind_proxy &p029, 1449241Sandreas.hansson@arm.com const sc_bind_proxy &p030, 1459241Sandreas.hansson@arm.com const sc_bind_proxy &p031, 1469241Sandreas.hansson@arm.com const sc_bind_proxy &p032, 1479719Sandreas.hansson@arm.com const sc_bind_proxy &p033, 1489241Sandreas.hansson@arm.com const sc_bind_proxy &p034, 1499719Sandreas.hansson@arm.com const sc_bind_proxy &p035, 1509241Sandreas.hansson@arm.com const sc_bind_proxy &p036, 1519717Sandreas.hansson@arm.com const sc_bind_proxy &p037, 1529241Sandreas.hansson@arm.com const sc_bind_proxy &p038, 1539241Sandreas.hansson@arm.com const sc_bind_proxy &p039, 1549241Sandreas.hansson@arm.com const sc_bind_proxy &p040, 1559719Sandreas.hansson@arm.com const sc_bind_proxy &p041, 1569719Sandreas.hansson@arm.com const sc_bind_proxy &p042, 1579719Sandreas.hansson@arm.com const sc_bind_proxy &p043, 1589241Sandreas.hansson@arm.com const sc_bind_proxy &p044, 1599241Sandreas.hansson@arm.com const sc_bind_proxy &p045, 1609241Sandreas.hansson@arm.com const sc_bind_proxy &p046, 1619241Sandreas.hansson@arm.com const sc_bind_proxy &p047, 1629241Sandreas.hansson@arm.com const sc_bind_proxy &p048, 1639241Sandreas.hansson@arm.com const sc_bind_proxy &p049, 1649717Sandreas.hansson@arm.com const sc_bind_proxy &p050, 1659717Sandreas.hansson@arm.com const sc_bind_proxy &p051, 1669717Sandreas.hansson@arm.com const sc_bind_proxy &p052, 1679717Sandreas.hansson@arm.com const sc_bind_proxy &p053, 1689241Sandreas.hansson@arm.com const sc_bind_proxy &p054, 1699241Sandreas.hansson@arm.com const sc_bind_proxy &p055, 1709241Sandreas.hansson@arm.com const sc_bind_proxy &p056, 1719719Sandreas.hansson@arm.com const sc_bind_proxy &p057, 1729719Sandreas.hansson@arm.com const sc_bind_proxy &p058, 1739719Sandreas.hansson@arm.com const sc_bind_proxy &p059, 1749719Sandreas.hansson@arm.com const sc_bind_proxy &p060, 1759719Sandreas.hansson@arm.com const sc_bind_proxy &p061, 1769720Sandreas.hansson@arm.com const sc_bind_proxy &p062, 1779719Sandreas.hansson@arm.com const sc_bind_proxy &p063, 1789241Sandreas.hansson@arm.com const sc_bind_proxy &p064) 1799241Sandreas.hansson@arm.com{ 1809241Sandreas.hansson@arm.com std::vector<const ::sc_core::sc_bind_proxy *> proxies; 1819717Sandreas.hansson@arm.com auto insert = [&proxies](const ::sc_core::sc_bind_proxy &p) -> bool { 1829241Sandreas.hansson@arm.com if (!p.port() && !p.interface()) 1839717Sandreas.hansson@arm.com return false; 1849717Sandreas.hansson@arm.com proxies.push_back(&p); 1859717Sandreas.hansson@arm.com return true; 1869717Sandreas.hansson@arm.com }; 1879717Sandreas.hansson@arm.com insert(p001) && insert(p002) && insert(p003) && insert(p004) && 1889719Sandreas.hansson@arm.com insert(p005) && insert(p006) && insert(p007) && insert(p008) && 1899719Sandreas.hansson@arm.com insert(p009) && insert(p010) && insert(p011) && insert(p012) && 1909718Sandreas.hansson@arm.com insert(p013) && insert(p014) && insert(p015) && insert(p016) && 19110266Sandreas.hansson@arm.com insert(p017) && insert(p018) && insert(p019) && insert(p020) && 19210266Sandreas.hansson@arm.com insert(p021) && insert(p022) && insert(p023) && insert(p024) && 19310266Sandreas.hansson@arm.com insert(p025) && insert(p026) && insert(p027) && insert(p028) && 19410266Sandreas.hansson@arm.com insert(p029) && insert(p030) && insert(p031) && insert(p032) && 19510266Sandreas.hansson@arm.com insert(p033) && insert(p034) && insert(p035) && insert(p036) && 19610266Sandreas.hansson@arm.com insert(p037) && insert(p038) && insert(p039) && insert(p040) && 19710266Sandreas.hansson@arm.com insert(p041) && insert(p042) && insert(p043) && insert(p044) && 19810266Sandreas.hansson@arm.com insert(p045) && insert(p046) && insert(p047) && insert(p048) && 19910266Sandreas.hansson@arm.com insert(p049) && insert(p050) && insert(p051) && insert(p052) && 20010266Sandreas.hansson@arm.com insert(p053) && insert(p054) && insert(p055) && insert(p056) && 20110266Sandreas.hansson@arm.com insert(p057) && insert(p058) && insert(p059) && insert(p060) && 20210266Sandreas.hansson@arm.com insert(p061) && insert(p062) && insert(p063) && insert(p064); 2039719Sandreas.hansson@arm.com _gem5_module->bindPorts(proxies); 2049719Sandreas.hansson@arm.com} 2059719Sandreas.hansson@arm.com 2069719Sandreas.hansson@arm.comconst std::vector<sc_object *> & 2079719Sandreas.hansson@arm.comsc_module::get_child_objects() const 2089719Sandreas.hansson@arm.com{ 2099719Sandreas.hansson@arm.com return _gem5_module->obj()->get_child_objects(); 2109719Sandreas.hansson@arm.com} 2119719Sandreas.hansson@arm.com 2129720Sandreas.hansson@arm.comconst std::vector<sc_event *> & 2139719Sandreas.hansson@arm.comsc_module::get_child_events() const 2149719Sandreas.hansson@arm.com{ 2159719Sandreas.hansson@arm.com return _gem5_module->obj()->get_child_events(); 2169717Sandreas.hansson@arm.com} 2179241Sandreas.hansson@arm.com 2189241Sandreas.hansson@arm.comsc_module::sc_module() : 2199241Sandreas.hansson@arm.com sc_object(sc_gem5::newModuleChecked()->name()), 2209718Sandreas.hansson@arm.com _gem5_module(sc_gem5::currentModule()) 2219241Sandreas.hansson@arm.com{} 2229241Sandreas.hansson@arm.com 2239241Sandreas.hansson@arm.comsc_module::sc_module(const sc_module_name &) : sc_module() {} 2249241Sandreas.hansson@arm.comsc_module::sc_module(const char *_name) : sc_module(sc_module_name(_name)) {} 2259241Sandreas.hansson@arm.comsc_module::sc_module(const std::string &_name) : 2269241Sandreas.hansson@arm.com sc_module(sc_module_name(_name.c_str())) 2279241Sandreas.hansson@arm.com{} 2289718Sandreas.hansson@arm.com 2299241Sandreas.hansson@arm.comvoid 2309241Sandreas.hansson@arm.comsc_module::reset_signal_is(const sc_in<bool> &, bool) 2319718Sandreas.hansson@arm.com{ 2329241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2339241Sandreas.hansson@arm.com} 23410128Sstan.czerniawski@arm.com 23510128Sstan.czerniawski@arm.comvoid 2369241Sandreas.hansson@arm.comsc_module::reset_signal_is(const sc_inout<bool> &, bool) 2379241Sandreas.hansson@arm.com{ 2389241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2399241Sandreas.hansson@arm.com} 2409241Sandreas.hansson@arm.com 2419241Sandreas.hansson@arm.comvoid 2429241Sandreas.hansson@arm.comsc_module::reset_signal_is(const sc_out<bool> &, bool) 2439241Sandreas.hansson@arm.com{ 2449241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2459241Sandreas.hansson@arm.com} 2469241Sandreas.hansson@arm.com 2479241Sandreas.hansson@arm.comvoid 2489241Sandreas.hansson@arm.comsc_module::reset_signal_is(const sc_signal_in_if<bool> &, bool) 2499241Sandreas.hansson@arm.com{ 2509241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2519241Sandreas.hansson@arm.com} 2529241Sandreas.hansson@arm.com 2539241Sandreas.hansson@arm.com 2549241Sandreas.hansson@arm.comvoid 2559241Sandreas.hansson@arm.comsc_module::async_reset_signal_is(const sc_in<bool> &, bool) 2569241Sandreas.hansson@arm.com{ 2579241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2589241Sandreas.hansson@arm.com} 2599241Sandreas.hansson@arm.com 2609241Sandreas.hansson@arm.comvoid 2619241Sandreas.hansson@arm.comsc_module::async_reset_signal_is(const sc_inout<bool> &, bool) 2629241Sandreas.hansson@arm.com{ 2639241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2649718Sandreas.hansson@arm.com} 2659241Sandreas.hansson@arm.com 2669241Sandreas.hansson@arm.comvoid 2679241Sandreas.hansson@arm.comsc_module::async_reset_signal_is(const sc_out<bool> &, bool) 2689718Sandreas.hansson@arm.com{ 2699241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 27010138Sneha.agarwal@arm.com} 27110392Swendy.elsasser@arm.com 2729241Sandreas.hansson@arm.comvoid 2739241Sandreas.hansson@arm.comsc_module::async_reset_signal_is(const sc_signal_in_if<bool> &, bool) 2749241Sandreas.hansson@arm.com{ 2759241Sandreas.hansson@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 2769241Sandreas.hansson@arm.com} 2779241Sandreas.hansson@arm.com 2789241Sandreas.hansson@arm.com 2799241Sandreas.hansson@arm.comvoid 2809241Sandreas.hansson@arm.comsc_module::dont_initialize() 2819241Sandreas.hansson@arm.com{ 2829241Sandreas.hansson@arm.com ::sc_gem5::Process::newest()->dontInitialize(); 2839241Sandreas.hansson@arm.com} 2849241Sandreas.hansson@arm.com 2859241Sandreas.hansson@arm.comvoid 2869241Sandreas.hansson@arm.comsc_module::set_stack_size(size_t size) 2879241Sandreas.hansson@arm.com{ 2889718Sandreas.hansson@arm.com ::sc_gem5::Process::newest()->setStackSize(size); 2899814Sandreas.hansson@arm.com} 2909718Sandreas.hansson@arm.com 29110138Sneha.agarwal@arm.com 2929814Sandreas.hansson@arm.comvoid sc_module::next_trigger() { ::sc_core::next_trigger(); } 2939718Sandreas.hansson@arm.com 2949241Sandreas.hansson@arm.comvoid 2959718Sandreas.hansson@arm.comsc_module::next_trigger(const sc_event &e) 2969241Sandreas.hansson@arm.com{ 2979722Ssascha.bischoff@arm.com ::sc_core::next_trigger(e); 2989722Ssascha.bischoff@arm.com} 2999722Ssascha.bischoff@arm.com 3009241Sandreas.hansson@arm.comvoid 3019718Sandreas.hansson@arm.comsc_module::next_trigger(const sc_event_or_list &eol) 3029241Sandreas.hansson@arm.com{ 3039241Sandreas.hansson@arm.com ::sc_core::next_trigger(eol); 3049241Sandreas.hansson@arm.com} 3059241Sandreas.hansson@arm.com 3069241Sandreas.hansson@arm.comvoid 3079241Sandreas.hansson@arm.comsc_module::next_trigger(const sc_event_and_list &eal) 3089718Sandreas.hansson@arm.com{ 3099241Sandreas.hansson@arm.com ::sc_core::next_trigger(eal); 3109241Sandreas.hansson@arm.com} 3119241Sandreas.hansson@arm.com 3129241Sandreas.hansson@arm.comvoid 3139241Sandreas.hansson@arm.comsc_module::next_trigger(const sc_time &t) 31410392Swendy.elsasser@arm.com{ 31510138Sneha.agarwal@arm.com ::sc_core::next_trigger(t); 31610138Sneha.agarwal@arm.com} 31710138Sneha.agarwal@arm.com 31810138Sneha.agarwal@arm.comvoid 31910138Sneha.agarwal@arm.comsc_module::next_trigger(double d, sc_time_unit u) 32010138Sneha.agarwal@arm.com{ 32110138Sneha.agarwal@arm.com ::sc_core::next_trigger(d, u); 32210392Swendy.elsasser@arm.com} 32310138Sneha.agarwal@arm.com 32410138Sneha.agarwal@arm.comvoid 32510392Swendy.elsasser@arm.comsc_module::next_trigger(const sc_time &t, const sc_event &e) 32610392Swendy.elsasser@arm.com{ 32710138Sneha.agarwal@arm.com ::sc_core::next_trigger(t, e); 32810138Sneha.agarwal@arm.com} 32910138Sneha.agarwal@arm.com 33010138Sneha.agarwal@arm.comvoid 33110138Sneha.agarwal@arm.comsc_module::next_trigger(double d, sc_time_unit u, const sc_event &e) 33210138Sneha.agarwal@arm.com{ 33310138Sneha.agarwal@arm.com ::sc_core::next_trigger(d, u, e); 33410138Sneha.agarwal@arm.com} 33510138Sneha.agarwal@arm.com 33610138Sneha.agarwal@arm.comvoid 33710138Sneha.agarwal@arm.comsc_module::next_trigger(const sc_time &t, const sc_event_or_list &eol) 33810138Sneha.agarwal@arm.com{ 33910138Sneha.agarwal@arm.com ::sc_core::next_trigger(t, eol); 34010138Sneha.agarwal@arm.com} 34110138Sneha.agarwal@arm.com 34210138Sneha.agarwal@arm.comvoid 34310138Sneha.agarwal@arm.comsc_module::next_trigger(double d, sc_time_unit u, const sc_event_or_list &eol) 34410138Sneha.agarwal@arm.com{ 34510138Sneha.agarwal@arm.com ::sc_core::next_trigger(d, u, eol); 34610138Sneha.agarwal@arm.com} 34710138Sneha.agarwal@arm.com 34810138Sneha.agarwal@arm.comvoid 34910138Sneha.agarwal@arm.comsc_module::next_trigger(const sc_time &t, const sc_event_and_list &eal) 35010138Sneha.agarwal@arm.com{ 35110138Sneha.agarwal@arm.com ::sc_core::next_trigger(t, eal); 35210138Sneha.agarwal@arm.com} 35310138Sneha.agarwal@arm.com 35410392Swendy.elsasser@arm.comvoid 35510392Swendy.elsasser@arm.comsc_module::next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal) 35610392Swendy.elsasser@arm.com{ 35710392Swendy.elsasser@arm.com ::sc_core::next_trigger(d, u, eal); 35810392Swendy.elsasser@arm.com} 35910392Swendy.elsasser@arm.com 36010392Swendy.elsasser@arm.com 36110392Swendy.elsasser@arm.combool 36210392Swendy.elsasser@arm.comsc_module::timed_out() 36310392Swendy.elsasser@arm.com{ 36410392Swendy.elsasser@arm.com warn("%s not implemented.\n", __PRETTY_FUNCTION__); 36510392Swendy.elsasser@arm.com return false; 36610392Swendy.elsasser@arm.com} 36710392Swendy.elsasser@arm.com 36810392Swendy.elsasser@arm.com 36910392Swendy.elsasser@arm.comvoid 37010392Swendy.elsasser@arm.comsc_module::wait() 37110392Swendy.elsasser@arm.com{ 37210392Swendy.elsasser@arm.com ::sc_core::wait(); 37310392Swendy.elsasser@arm.com} 37410392Swendy.elsasser@arm.com 37510392Swendy.elsasser@arm.comvoid 37610392Swendy.elsasser@arm.comsc_module::wait(int i) 37710392Swendy.elsasser@arm.com{ 37810392Swendy.elsasser@arm.com ::sc_core::wait(i); 37910392Swendy.elsasser@arm.com} 38010392Swendy.elsasser@arm.com 38110392Swendy.elsasser@arm.comvoid 38210392Swendy.elsasser@arm.comsc_module::wait(const sc_event &e) 38310392Swendy.elsasser@arm.com{ 38410392Swendy.elsasser@arm.com ::sc_core::wait(e); 38510392Swendy.elsasser@arm.com} 38610392Swendy.elsasser@arm.com 38710392Swendy.elsasser@arm.comvoid 3889241Sandreas.hansson@arm.comsc_module::wait(const sc_event_or_list &eol) 3899241Sandreas.hansson@arm.com{ 3909241Sandreas.hansson@arm.com ::sc_core::wait(eol); 3919241Sandreas.hansson@arm.com} 3929241Sandreas.hansson@arm.com 3939241Sandreas.hansson@arm.comvoid 3949241Sandreas.hansson@arm.comsc_module::wait(const sc_event_and_list &eal) 3959241Sandreas.hansson@arm.com{ 3969241Sandreas.hansson@arm.com ::sc_core::wait(eal); 3979241Sandreas.hansson@arm.com} 3989241Sandreas.hansson@arm.com 3999241Sandreas.hansson@arm.comvoid 4009241Sandreas.hansson@arm.comsc_module::wait(const sc_time &t) 4019241Sandreas.hansson@arm.com{ 4029241Sandreas.hansson@arm.com ::sc_core::wait(t); 4039241Sandreas.hansson@arm.com} 4049241Sandreas.hansson@arm.com 4059241Sandreas.hansson@arm.comvoid 40610128Sstan.czerniawski@arm.comsc_module::wait(double d, sc_time_unit u) 40710128Sstan.czerniawski@arm.com{ 4089241Sandreas.hansson@arm.com ::sc_core::wait(d, u); 4099241Sandreas.hansson@arm.com} 4109241Sandreas.hansson@arm.com 4119241Sandreas.hansson@arm.comvoid 4129241Sandreas.hansson@arm.comsc_module::wait(const sc_time &t, const sc_event &e) 41310128Sstan.czerniawski@arm.com{ 41410128Sstan.czerniawski@arm.com ::sc_core::wait(t, e); 41510128Sstan.czerniawski@arm.com} 41610128Sstan.czerniawski@arm.com 4179241Sandreas.hansson@arm.comvoid 4189721Ssascha.bischoff@arm.comsc_module::wait(double d, sc_time_unit u, const sc_event &e) 4199721Ssascha.bischoff@arm.com{ 4209721Ssascha.bischoff@arm.com ::sc_core::wait(d, u, e); 4219241Sandreas.hansson@arm.com} 4229241Sandreas.hansson@arm.com 4239241Sandreas.hansson@arm.comvoid 4249241Sandreas.hansson@arm.comsc_module::wait(const sc_time &t, const sc_event_or_list &eol) 4259241Sandreas.hansson@arm.com{ 4269241Sandreas.hansson@arm.com ::sc_core::wait(t, eol); 4279241Sandreas.hansson@arm.com} 4289241Sandreas.hansson@arm.com 4299241Sandreas.hansson@arm.comvoid 4309721Ssascha.bischoff@arm.comsc_module::wait(double d, sc_time_unit u, const sc_event_or_list &eol) 4319241Sandreas.hansson@arm.com{ 4329721Ssascha.bischoff@arm.com ::sc_core::wait(d, u, eol); 4339241Sandreas.hansson@arm.com} 4349241Sandreas.hansson@arm.com 4359241Sandreas.hansson@arm.comvoid 4369241Sandreas.hansson@arm.comsc_module::wait(const sc_time &t, const sc_event_and_list &eal) 4379241Sandreas.hansson@arm.com{ 4389241Sandreas.hansson@arm.com ::sc_core::wait(t, eal); 4399241Sandreas.hansson@arm.com} 4409241Sandreas.hansson@arm.com 4419241Sandreas.hansson@arm.comvoid 4429241Sandreas.hansson@arm.comsc_module::wait(double d, sc_time_unit u, const sc_event_and_list &eal) 4439241Sandreas.hansson@arm.com{ 4449241Sandreas.hansson@arm.com ::sc_core::wait(d, u, eal); 4459241Sandreas.hansson@arm.com} 4469241Sandreas.hansson@arm.com 4479717Sandreas.hansson@arm.com 4489241Sandreas.hansson@arm.comvoid 4499241Sandreas.hansson@arm.comsc_module::halt() 4509241Sandreas.hansson@arm.com{ 4519241Sandreas.hansson@arm.com ::sc_core::halt(); 4529241Sandreas.hansson@arm.com} 45310348Sandreas.hansson@arm.com 4549241Sandreas.hansson@arm.comvoid 4559584Sandreas@sandberg.pp.sesc_module::at_posedge(const sc_signal_in_if<bool> &s) 4569584Sandreas@sandberg.pp.se{ 4579584Sandreas@sandberg.pp.se ::sc_core::at_posedge(s); 4589241Sandreas.hansson@arm.com} 4599241Sandreas.hansson@arm.com 4609584Sandreas@sandberg.pp.sevoid 4619584Sandreas@sandberg.pp.sesc_module::at_posedge(const sc_signal_in_if<sc_dt::sc_logic> &s) 4629584Sandreas@sandberg.pp.se{ 4639241Sandreas.hansson@arm.com ::sc_core::at_posedge(s); 4649241Sandreas.hansson@arm.com} 4659241Sandreas.hansson@arm.com 4669717Sandreas.hansson@arm.comvoid 4679241Sandreas.hansson@arm.comsc_module::at_negedge(const sc_signal_in_if<bool> &s) 4689241Sandreas.hansson@arm.com{ 4699241Sandreas.hansson@arm.com ::sc_core::at_negedge(s); 4709241Sandreas.hansson@arm.com} 4719719Sandreas.hansson@arm.com 4729719Sandreas.hansson@arm.comvoid 4739719Sandreas.hansson@arm.comsc_module::at_negedge(const sc_signal_in_if<sc_dt::sc_logic> &s) 4749719Sandreas.hansson@arm.com{ 4759241Sandreas.hansson@arm.com ::sc_core::at_negedge(s); 4769241Sandreas.hansson@arm.com} 4779241Sandreas.hansson@arm.com 4789719Sandreas.hansson@arm.com 4799719Sandreas.hansson@arm.comvoid 4809719Sandreas.hansson@arm.comnext_trigger() 4819719Sandreas.hansson@arm.com{ 4829719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 4839719Sandreas.hansson@arm.com p->setDynamic(nullptr); 4849719Sandreas.hansson@arm.com} 4859719Sandreas.hansson@arm.com 4869719Sandreas.hansson@arm.comvoid 4879719Sandreas.hansson@arm.comnext_trigger(const sc_event &e) 4889719Sandreas.hansson@arm.com{ 4899719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 4909720Sandreas.hansson@arm.com p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e)); 4919720Sandreas.hansson@arm.com} 4929719Sandreas.hansson@arm.com 4939719Sandreas.hansson@arm.comvoid 4949719Sandreas.hansson@arm.comnext_trigger(const sc_event_or_list &eol) 4959719Sandreas.hansson@arm.com{ 4969719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 4979719Sandreas.hansson@arm.com p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol)); 4989720Sandreas.hansson@arm.com} 4999720Sandreas.hansson@arm.com 5009719Sandreas.hansson@arm.comvoid 5019719Sandreas.hansson@arm.comnext_trigger(const sc_event_and_list &eal) 5029719Sandreas.hansson@arm.com{ 5039719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 5049719Sandreas.hansson@arm.com p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal)); 5059719Sandreas.hansson@arm.com} 5069719Sandreas.hansson@arm.com 5079719Sandreas.hansson@arm.comvoid 5089719Sandreas.hansson@arm.comnext_trigger(const sc_time &t) 5099719Sandreas.hansson@arm.com{ 5109719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 5119719Sandreas.hansson@arm.com p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t)); 5129719Sandreas.hansson@arm.com} 5139719Sandreas.hansson@arm.com 5149719Sandreas.hansson@arm.comvoid 5159719Sandreas.hansson@arm.comnext_trigger(double d, sc_time_unit u) 5169719Sandreas.hansson@arm.com{ 5179719Sandreas.hansson@arm.com next_trigger(sc_time(d, u)); 5189719Sandreas.hansson@arm.com} 5199719Sandreas.hansson@arm.com 5209719Sandreas.hansson@arm.comvoid 5219719Sandreas.hansson@arm.comnext_trigger(const sc_time &t, const sc_event &e) 5229719Sandreas.hansson@arm.com{ 5239719Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 5249719Sandreas.hansson@arm.com p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e)); 5259719Sandreas.hansson@arm.com} 5269719Sandreas.hansson@arm.com 5279719Sandreas.hansson@arm.comvoid 5289719Sandreas.hansson@arm.comnext_trigger(double d, sc_time_unit u, const sc_event &e) 5299719Sandreas.hansson@arm.com{ 5309719Sandreas.hansson@arm.com next_trigger(sc_time(d, u), e); 5319719Sandreas.hansson@arm.com} 5329241Sandreas.hansson@arm.com 5339241Sandreas.hansson@arm.comvoid 5349241Sandreas.hansson@arm.comnext_trigger(const sc_time &t, const sc_event_or_list &eol) 5359241Sandreas.hansson@arm.com{ 5369241Sandreas.hansson@arm.com sc_gem5::Process *p = sc_gem5::scheduler.current(); 5379241Sandreas.hansson@arm.com p->setDynamic( 5389241Sandreas.hansson@arm.com new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol)); 5399241Sandreas.hansson@arm.com} 540 541void 542next_trigger(double d, sc_time_unit u, const sc_event_or_list &eol) 543{ 544 next_trigger(sc_time(d, u), eol); 545} 546 547void 548next_trigger(const sc_time &t, const sc_event_and_list &eal) 549{ 550 sc_gem5::Process *p = sc_gem5::scheduler.current(); 551 p->setDynamic( 552 new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal)); 553} 554 555void 556next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal) 557{ 558 next_trigger(sc_time(d, u), eal); 559} 560 561bool 562timed_out() 563{ 564 warn("%s not implemented.\n", __PRETTY_FUNCTION__); 565 return false; 566} 567 568 569void 570wait() 571{ 572 sc_gem5::Process *p = sc_gem5::scheduler.current(); 573 p->setDynamic(nullptr); 574 sc_gem5::scheduler.yield(); 575} 576 577void 578wait(int n) 579{ 580 if (n <= 0) { 581 std::string msg = csprintf("n = %d", n); 582 SC_REPORT_ERROR("(E525) wait(n) is only valid for n > 0", msg.c_str()); 583 } 584 for (int i = 0; i < n; i++) 585 wait(); 586} 587 588void 589wait(const sc_event &e) 590{ 591 sc_gem5::Process *p = sc_gem5::scheduler.current(); 592 p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e)); 593 sc_gem5::scheduler.yield(); 594} 595 596void 597wait(const sc_event_or_list &eol) 598{ 599 sc_gem5::Process *p = sc_gem5::scheduler.current(); 600 p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol)); 601 sc_gem5::scheduler.yield(); 602} 603 604void 605wait(const sc_event_and_list &eal) 606{ 607 sc_gem5::Process *p = sc_gem5::scheduler.current(); 608 p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal)); 609 sc_gem5::scheduler.yield(); 610} 611 612void 613wait(const sc_time &t) 614{ 615 sc_gem5::Process *p = sc_gem5::scheduler.current(); 616 p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t)); 617 sc_gem5::scheduler.yield(); 618} 619 620void 621wait(double d, sc_time_unit u) 622{ 623 wait(sc_time(d, u)); 624} 625 626void 627wait(const sc_time &t, const sc_event &e) 628{ 629 sc_gem5::Process *p = sc_gem5::scheduler.current(); 630 p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e)); 631 sc_gem5::scheduler.yield(); 632} 633 634void 635wait(double d, sc_time_unit u, const sc_event &e) 636{ 637 wait(sc_time(d, u), e); 638} 639 640void 641wait(const sc_time &t, const sc_event_or_list &eol) 642{ 643 sc_gem5::Process *p = sc_gem5::scheduler.current(); 644 p->setDynamic( 645 new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol)); 646 sc_gem5::scheduler.yield(); 647} 648 649void 650wait(double d, sc_time_unit u, const sc_event_or_list &eol) 651{ 652 wait(sc_time(d, u), eol); 653} 654 655void 656wait(const sc_time &t, const sc_event_and_list &eal) 657{ 658 sc_gem5::Process *p = sc_gem5::scheduler.current(); 659 p->setDynamic( 660 new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal)); 661 sc_gem5::scheduler.yield(); 662} 663 664void 665wait(double d, sc_time_unit u, const sc_event_and_list &eal) 666{ 667 wait(sc_time(d, u), eal); 668} 669 670void 671halt() 672{ 673 warn("%s not implemented.\n", __PRETTY_FUNCTION__); 674} 675 676void 677at_posedge(const sc_signal_in_if<bool> &s) 678{ 679 while (s.read()) 680 wait(); 681 while (!s.read()) 682 wait(); 683} 684 685void 686at_posedge(const sc_signal_in_if<sc_dt::sc_logic> &s) 687{ 688 while (s.read() == sc_dt::Log_1) 689 wait(); 690 while (s.read() == sc_dt::Log_0) 691 wait(); 692} 693 694void 695at_negedge(const sc_signal_in_if<bool> &s) 696{ 697 while (!s.read()) 698 wait(); 699 while (s.read()) 700 wait(); 701} 702 703void 704at_negedge(const sc_signal_in_if<sc_dt::sc_logic> &s) 705{ 706 while (s.read() == sc_dt::Log_0) 707 wait(); 708 while (s.read() == sc_dt::Log_1) 709 wait(); 710} 711 712const char * 713sc_gen_unique_name(const char *seed) 714{ 715 ::sc_gem5::Module *mod = ::sc_gem5::currentModule(); 716 return mod ? mod->uniqueName(seed) : 717 ::sc_gem5::nameGen.gen(seed); 718} 719 720bool 721sc_hierarchical_name_exists(const char *name) 722{ 723 warn("%s not implemented.\n", __PRETTY_FUNCTION__); 724 return false; 725} 726 727bool 728sc_start_of_simulation_invoked() 729{ 730 return ::sc_gem5::kernel->startOfSimulationComplete(); 731} 732 733bool 734sc_end_of_simulation_invoked() 735{ 736 return ::sc_gem5::kernel->endOfSimulationComplete(); 737} 738 739sc_module * 740sc_module_sc_new(sc_module *mod) 741{ 742 static std::vector<std::unique_ptr<sc_module> > modules; 743 modules.emplace_back(mod); 744 return mod; 745} 746 747} // namespace sc_core 748