gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
sc_module.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  * Authors: Gabe Black
28  */
29 
30 #include <memory>
31 #include <string>
32 #include <vector>
33 
34 #include "base/logging.hh"
35 #include "systemc/core/event.hh"
36 #include "systemc/core/kernel.hh"
37 #include "systemc/core/module.hh"
38 #include "systemc/core/object.hh"
39 #include "systemc/core/port.hh"
51 
52 namespace sc_gem5
53 {
54 
55 Process *
57 {
58  Method *p = new Method(name, func);
59  if (::sc_core::sc_is_running()) {
60  std::string name = p->name();
61  delete p;
63  name.c_str());
64  return nullptr;
65  }
66  scheduler.reg(p);
67  return p;
68 }
69 
70 Process *
72 {
73  Thread *p = new Thread(name, func);
74  if (::sc_core::sc_is_running()) {
75  std::string name = p->name();
76  delete p;
78  name.c_str());
79  return nullptr;
80  }
81  scheduler.reg(p);
82  return p;
83 }
84 
85 Process *
87 {
88  CThread *p = new CThread(name, func);
89  if (::sc_core::sc_is_running()) {
90  std::string name = p->name();
91  delete p;
93  name.c_str());
94  return nullptr;
95  }
96  scheduler.reg(p);
97  p->dontInitialize(true);
98  return p;
99 }
100 
101 } // namespace sc_gem5
102 
103 namespace sc_core
104 {
105 
106 sc_bind_proxy::sc_bind_proxy() : _interface(nullptr), _port(nullptr) {}
107 
109  _interface(&_interface), _port(nullptr)
110 {}
111 
113  _interface(nullptr), _port(&_port)
114 {}
115 
117 
118 ::Port &
119 sc_module::gem5_getPort(const std::string &if_name, int idx)
120 {
121  fatal("%s does not have any port named %s\n", name(), if_name);
122 }
123 
124 sc_module::~sc_module() { delete _gem5_module; }
125 
126 void
128  const sc_bind_proxy &p002,
129  const sc_bind_proxy &p003,
130  const sc_bind_proxy &p004,
131  const sc_bind_proxy &p005,
132  const sc_bind_proxy &p006,
133  const sc_bind_proxy &p007,
134  const sc_bind_proxy &p008,
135  const sc_bind_proxy &p009,
136  const sc_bind_proxy &p010,
137  const sc_bind_proxy &p011,
138  const sc_bind_proxy &p012,
139  const sc_bind_proxy &p013,
140  const sc_bind_proxy &p014,
141  const sc_bind_proxy &p015,
142  const sc_bind_proxy &p016,
143  const sc_bind_proxy &p017,
144  const sc_bind_proxy &p018,
145  const sc_bind_proxy &p019,
146  const sc_bind_proxy &p020,
147  const sc_bind_proxy &p021,
148  const sc_bind_proxy &p022,
149  const sc_bind_proxy &p023,
150  const sc_bind_proxy &p024,
151  const sc_bind_proxy &p025,
152  const sc_bind_proxy &p026,
153  const sc_bind_proxy &p027,
154  const sc_bind_proxy &p028,
155  const sc_bind_proxy &p029,
156  const sc_bind_proxy &p030,
157  const sc_bind_proxy &p031,
158  const sc_bind_proxy &p032,
159  const sc_bind_proxy &p033,
160  const sc_bind_proxy &p034,
161  const sc_bind_proxy &p035,
162  const sc_bind_proxy &p036,
163  const sc_bind_proxy &p037,
164  const sc_bind_proxy &p038,
165  const sc_bind_proxy &p039,
166  const sc_bind_proxy &p040,
167  const sc_bind_proxy &p041,
168  const sc_bind_proxy &p042,
169  const sc_bind_proxy &p043,
170  const sc_bind_proxy &p044,
171  const sc_bind_proxy &p045,
172  const sc_bind_proxy &p046,
173  const sc_bind_proxy &p047,
174  const sc_bind_proxy &p048,
175  const sc_bind_proxy &p049,
176  const sc_bind_proxy &p050,
177  const sc_bind_proxy &p051,
178  const sc_bind_proxy &p052,
179  const sc_bind_proxy &p053,
180  const sc_bind_proxy &p054,
181  const sc_bind_proxy &p055,
182  const sc_bind_proxy &p056,
183  const sc_bind_proxy &p057,
184  const sc_bind_proxy &p058,
185  const sc_bind_proxy &p059,
186  const sc_bind_proxy &p060,
187  const sc_bind_proxy &p061,
188  const sc_bind_proxy &p062,
189  const sc_bind_proxy &p063,
190  const sc_bind_proxy &p064)
191 {
193  auto insert = [&proxies](const ::sc_core::sc_bind_proxy &p) -> bool {
194  if (!p.port() && !p.interface())
195  return false;
196  proxies.push_back(&p);
197  return true;
198  };
199  insert(p001) && insert(p002) && insert(p003) && insert(p004) &&
200  insert(p005) && insert(p006) && insert(p007) && insert(p008) &&
201  insert(p009) && insert(p010) && insert(p011) && insert(p012) &&
202  insert(p013) && insert(p014) && insert(p015) && insert(p016) &&
203  insert(p017) && insert(p018) && insert(p019) && insert(p020) &&
204  insert(p021) && insert(p022) && insert(p023) && insert(p024) &&
205  insert(p025) && insert(p026) && insert(p027) && insert(p028) &&
206  insert(p029) && insert(p030) && insert(p031) && insert(p032) &&
207  insert(p033) && insert(p034) && insert(p035) && insert(p036) &&
208  insert(p037) && insert(p038) && insert(p039) && insert(p040) &&
209  insert(p041) && insert(p042) && insert(p043) && insert(p044) &&
210  insert(p045) && insert(p046) && insert(p047) && insert(p048) &&
211  insert(p049) && insert(p050) && insert(p051) && insert(p052) &&
212  insert(p053) && insert(p054) && insert(p055) && insert(p056) &&
213  insert(p057) && insert(p058) && insert(p059) && insert(p060) &&
214  insert(p061) && insert(p062) && insert(p063) && insert(p064);
215  _gem5_module->bindPorts(proxies);
216 }
217 
218 sc_module &
220 {
221  (*this)(iface);
222  return *this;
223 }
224 
225 sc_module &
227 {
228  (*this)(pb);
229  return *this;
230 }
231 
232 sc_module &
234 {
235  (*this)(iface);
236  return *this;
237 }
238 
239 sc_module &
241 {
242  (*this)(pb);
243  return *this;
244 }
245 
248 {
249  return _gem5_module->obj()->get_child_objects();
250 }
251 
254 {
255  return _gem5_module->obj()->get_child_events();
256 }
257 
260  _gem5_module(sc_gem5::currentModule())
261 {
262  if (sc_is_running())
263  SC_REPORT_ERROR(SC_ID_INSERT_MODULE_, "simulation running");
264  if (::sc_gem5::scheduler.elaborationDone())
265  SC_REPORT_ERROR(SC_ID_INSERT_MODULE_, "elaboration done");
266 }
267 
269 sc_module::sc_module(const char *_name) : sc_module(sc_module_name(_name))
270 {
273 }
274 sc_module::sc_module(const std::string &_name) :
275  sc_module(sc_module_name(_name.c_str()))
276 {
279 }
280 
281 void
283 {
285 }
286 
287 void
289 {
290  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), true, val);
291 }
292 
293 void
295 {
296  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), true, val);
297 }
298 
299 void
301 {
302  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), true, val);
303 }
304 
305 void
307 {
308  ::sc_gem5::newReset(&signal, ::sc_gem5::Process::newest(), true, val);
309 }
310 
311 
312 void
314 {
315  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), false, val);
316 }
317 
318 void
320 {
321  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), false, val);
322 }
323 
324 void
326 {
327  ::sc_gem5::newReset(&port, ::sc_gem5::Process::newest(), false, val);
328 }
329 
330 void
332 {
333  ::sc_gem5::newReset(&signal, ::sc_gem5::Process::newest(), false, val);
334 }
335 
336 
337 void
339 {
341  if (p->procKind() == SC_CTHREAD_PROC_)
343  p->dontInitialize(true);
344 }
345 
346 void
348 {
350 }
351 
352 
354 
355 void
357 {
359 }
360 
361 void
363 {
365 }
366 
367 void
369 {
371 }
372 
373 void
375 {
377 }
378 
379 void
381 {
383 }
384 
385 void
387 {
389 }
390 
391 void
393 {
394  ::sc_core::next_trigger(d, u, e);
395 }
396 
397 void
399 {
400  ::sc_core::next_trigger(t, eol);
401 }
402 
403 void
405 {
406  ::sc_core::next_trigger(d, u, eol);
407 }
408 
409 void
411 {
412  ::sc_core::next_trigger(t, eal);
413 }
414 
415 void
417 {
418  ::sc_core::next_trigger(d, u, eal);
419 }
420 
421 
422 bool
424 {
426 }
427 
428 
429 void
431 {
432  ::sc_core::wait();
433 }
434 
435 void
437 {
438  ::sc_core::wait(i);
439 }
440 
441 void
443 {
444  ::sc_core::wait(e);
445 }
446 
447 void
449 {
450  ::sc_core::wait(eol);
451 }
452 
453 void
455 {
456  ::sc_core::wait(eal);
457 }
458 
459 void
461 {
462  ::sc_core::wait(t);
463 }
464 
465 void
467 {
468  ::sc_core::wait(d, u);
469 }
470 
471 void
473 {
474  ::sc_core::wait(t, e);
475 }
476 
477 void
479 {
480  ::sc_core::wait(d, u, e);
481 }
482 
483 void
485 {
486  ::sc_core::wait(t, eol);
487 }
488 
489 void
491 {
492  ::sc_core::wait(d, u, eol);
493 }
494 
495 void
497 {
498  ::sc_core::wait(t, eal);
499 }
500 
501 void
503 {
504  ::sc_core::wait(d, u, eal);
505 }
506 
507 
508 void
510 {
511  ::sc_core::halt();
512 }
513 
514 void
516 {
518 }
519 
520 void
522 {
524 }
525 
526 void
528 {
530 }
531 
532 void
534 {
536 }
537 
538 
539 void
541 {
543  p->cancelTimeout();
544  p->clearDynamic();
545 }
546 
547 void
549 {
551  p->cancelTimeout();
553 }
554 
555 void
557 {
559  p->cancelTimeout();
561 }
562 
563 void
565 {
567  p->cancelTimeout();
569 }
570 
571 void
573 {
575  p->setTimeout(t);
576  p->clearDynamic();
577 }
578 
579 void
581 {
582  next_trigger(sc_time(d, u));
583 }
584 
585 void
586 next_trigger(const sc_time &t, const sc_event &e)
587 {
589  p->setTimeout(t);
591 }
592 
593 void
595 {
596  next_trigger(sc_time(d, u), e);
597 }
598 
599 void
601 {
603  p->setTimeout(t);
605 }
606 
607 void
609 {
610  next_trigger(sc_time(d, u), eol);
611 }
612 
613 void
615 {
617  p->setTimeout(t);
619 }
620 
621 void
623 {
624  next_trigger(sc_time(d, u), eal);
625 }
626 
627 bool
629 {
631  if (!p)
632  return false;
633  else
634  return p->timedOut();
635 }
636 
637 
638 namespace
639 {
640 
641 bool
642 waitErrorCheck(sc_gem5::Process *p)
643 {
644  if (p->procKind() == SC_METHOD_PROC_) {
646  "\n in SC_METHODs use next_trigger() instead");
647  return true;
648  }
649  return false;
650 }
651 
652 } // anonymous namespace
653 
654 void
656 {
658  if (waitErrorCheck(p))
659  return;
660  p->cancelTimeout();
661  p->clearDynamic();
663 }
664 
665 void
666 wait(int n)
667 {
668  if (n <= 0) {
669  std::string msg = csprintf("n = %d", n);
671  }
673  p->waitCount(n - 1);
674  wait();
675 }
676 
677 void
678 wait(const sc_event &e)
679 {
681  if (waitErrorCheck(p))
682  return;
683  p->cancelTimeout();
686 }
687 
688 void
690 {
692  if (waitErrorCheck(p))
693  return;
694  p->cancelTimeout();
697 }
698 
699 void
701 {
703  if (waitErrorCheck(p))
704  return;
705  p->cancelTimeout();
708 }
709 
710 void
711 wait(const sc_time &t)
712 {
714  if (waitErrorCheck(p))
715  return;
716  p->setTimeout(t);
717  p->clearDynamic();
719 }
720 
721 void
723 {
724  wait(sc_time(d, u));
725 }
726 
727 void
728 wait(const sc_time &t, const sc_event &e)
729 {
731  if (waitErrorCheck(p))
732  return;
733  p->setTimeout(t);
736 }
737 
738 void
739 wait(double d, sc_time_unit u, const sc_event &e)
740 {
741  wait(sc_time(d, u), e);
742 }
743 
744 void
745 wait(const sc_time &t, const sc_event_or_list &eol)
746 {
748  if (waitErrorCheck(p))
749  return;
750  p->setTimeout(t);
753 }
754 
755 void
756 wait(double d, sc_time_unit u, const sc_event_or_list &eol)
757 {
758  wait(sc_time(d, u), eol);
759 }
760 
761 void
762 wait(const sc_time &t, const sc_event_and_list &eal)
763 {
765  if (waitErrorCheck(p))
766  return;
767  p->setTimeout(t);
770 }
771 
772 void
773 wait(double d, sc_time_unit u, const sc_event_and_list &eal)
774 {
775  wait(sc_time(d, u), eal);
776 }
777 
778 void
780 {
781  ::sc_core::wait();
782  throw ::sc_gem5::ScHalt();
783 }
784 
785 void
787 {
788  while (s.read())
789  wait();
790  while (!s.read())
791  wait();
792 }
793 
794 void
796 {
797  while (s.read() == sc_dt::Log_1)
798  wait();
799  while (s.read() == sc_dt::Log_0)
800  wait();
801 }
802 
803 void
805 {
806  while (!s.read())
807  wait();
808  while (s.read())
809  wait();
810 }
811 
812 void
814 {
815  while (s.read() == sc_dt::Log_0)
816  wait();
817  while (s.read() == sc_dt::Log_1)
818  wait();
819 }
820 
821 const char *
822 sc_gen_unique_name(const char *seed)
823 {
824  if (!seed || seed[0] == '\0') {
826  seed = "unnamed";
827  }
828 
830  if (mod)
831  return mod->uniqueName(seed);
832 
834  if (p)
835  return p->uniqueName(seed);
836 
838 }
839 
840 bool
842 {
843  return sc_gem5::findEvent(name) != sc_gem5::allEvents.end() ||
845 }
846 
847 bool
849 {
850  return ::sc_gem5::kernel->startOfSimulationComplete();
851 }
852 
853 bool
855 {
856  return ::sc_gem5::kernel->endOfSimulationComplete();
857 }
858 
859 sc_module *
861 {
863  modules.emplace_back(mod);
864  return mod;
865 }
866 
867 } // namespace sc_core
void newDynamicSensitivityEventOrList(Process *p, const sc_core::sc_event_or_list *eol)
Definition: sensitivity.cc:198
const char SC_ID_MODULE_METHOD_AFTER_START_[]
Definition: messages.cc:103
Ports are used to interface objects to each other.
Definition: port.hh:60
const char SC_ID_MODULE_THREAD_AFTER_START_[]
Definition: messages.cc:105
sc_gem5::Module * _gem5_module
Definition: sc_module.hh:256
virtual ~sc_module()
Definition: sc_module.cc:124
bool sc_is_running()
Definition: sc_main.cc:144
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:175
const std::string & name()
Definition: trace.cc:54
void at_posedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.cc:795
Bitfield< 7 > i
Module * newModuleChecked()
Definition: module.cc:200
void setTimeout(::sc_core::sc_time t)
Definition: process.cc:313
void at_posedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:515
sc_time_unit
Definition: sc_time.hh:42
void waitCount(int count)
Definition: process.hh:140
sc_module * sc_module_sc_new(sc_module *mod)
Definition: sc_module.cc:860
bool timedOut()
Definition: process.hh:132
const char SC_ID_WAIT_NOT_ALLOWED_[]
Definition: messages.cc:64
virtual const std::vector< sc_event * > & get_child_events() const
Definition: sc_module.cc:253
virtual ::sc_core::sc_curr_proc_kind procKind() const =0
const char * sc_gen_unique_name(const char *seed)
Definition: sc_module.cc:822
bool sc_start_of_simulation_invoked()
Definition: sc_module.cc:848
sc_core::sc_object * findObject(const char *name, const Objects &objects)
Definition: object.cc:298
void cancelTimeout()
Definition: process.cc:306
const char SC_ID_WAIT_N_INVALID_[]
Definition: messages.cc:75
const char * name() const
Definition: sc_object.cc:46
static Process * newest()
Definition: process.hh:125
bool sc_hierarchical_name_exists(const char *name)
Definition: sc_module.cc:841
void dont_initialize()
Definition: sc_module.cc:338
bool dontInitialize()
Definition: process.hh:135
void halt()
Definition: sc_module.cc:779
void newReset(const sc_core::sc_port_base *pb, Process *p, bool s, bool v)
Definition: process.cc:427
#define SC_REPORT_WARNING(msg_type, msg)
EventsIt findEvent(const std::string &name)
Definition: event.cc:224
STL vector class.
Definition: stl.hh:40
Bitfield< 63 > val
Definition: misc.hh:771
Bitfield< 31 > n
void reg(Process *p)
Definition: scheduler.cc:149
void newDynamicSensitivityEventAndList(Process *p, const sc_core::sc_event_and_list *eal)
Definition: sensitivity.cc:207
void async_reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:313
UniqueNameGen globalNameGen
Definition: module.cc:51
Module * currentModule()
Definition: module.cc:192
Objects allObjects
Definition: object.cc:289
const char SC_ID_INSERT_MODULE_[]
Definition: messages.cc:79
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:162
sc_module & operator,(sc_interface &)
Definition: sc_module.cc:233
virtual const sc_dt::sc_logic & read() const =0
Bitfield< 4 > s
Bitfield< 22 > u
void deprecatedConstructor()
Definition: module.hh:98
Events allEvents
Definition: event.cc:221
Process * current()
Definition: scheduler.hh:172
Process * newCThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:86
Bitfield< 9 > d
virtual const std::vector< sc_object * > & get_child_objects() const
Definition: sc_module.cc:247
void endModule()
Definition: module.hh:97
const char SC_ID_GEN_UNIQUE_NAME_[]
Definition: messages.cc:84
const sc_bind_proxy SC_BIND_PROXY_NIL
Definition: sc_module.cc:116
virtual const bool & read() const =0
void setStackSize(size_t size)
Definition: process.hh:106
int mod(int val, int mod)
Scheduler scheduler
Definition: scheduler.cc:491
const char * gen(std::string seed)
Definition: module.hh:62
sc_port_base * _port
Definition: sc_module.hh:86
Bitfield< 9 > e
void newDynamicSensitivityEvent(Process *p, const sc_core::sc_event *e)
Definition: sensitivity.cc:190
void operator()(const sc_bind_proxy &p001, const sc_bind_proxy &p002=SC_BIND_PROXY_NIL, const sc_bind_proxy &p003=SC_BIND_PROXY_NIL, const sc_bind_proxy &p004=SC_BIND_PROXY_NIL, const sc_bind_proxy &p005=SC_BIND_PROXY_NIL, const sc_bind_proxy &p006=SC_BIND_PROXY_NIL, const sc_bind_proxy &p007=SC_BIND_PROXY_NIL, const sc_bind_proxy &p008=SC_BIND_PROXY_NIL, const sc_bind_proxy &p009=SC_BIND_PROXY_NIL, const sc_bind_proxy &p010=SC_BIND_PROXY_NIL, const sc_bind_proxy &p011=SC_BIND_PROXY_NIL, const sc_bind_proxy &p012=SC_BIND_PROXY_NIL, const sc_bind_proxy &p013=SC_BIND_PROXY_NIL, const sc_bind_proxy &p014=SC_BIND_PROXY_NIL, const sc_bind_proxy &p015=SC_BIND_PROXY_NIL, const sc_bind_proxy &p016=SC_BIND_PROXY_NIL, const sc_bind_proxy &p017=SC_BIND_PROXY_NIL, const sc_bind_proxy &p018=SC_BIND_PROXY_NIL, const sc_bind_proxy &p019=SC_BIND_PROXY_NIL, const sc_bind_proxy &p020=SC_BIND_PROXY_NIL, const sc_bind_proxy &p021=SC_BIND_PROXY_NIL, const sc_bind_proxy &p022=SC_BIND_PROXY_NIL, const sc_bind_proxy &p023=SC_BIND_PROXY_NIL, const sc_bind_proxy &p024=SC_BIND_PROXY_NIL, const sc_bind_proxy &p025=SC_BIND_PROXY_NIL, const sc_bind_proxy &p026=SC_BIND_PROXY_NIL, const sc_bind_proxy &p027=SC_BIND_PROXY_NIL, const sc_bind_proxy &p028=SC_BIND_PROXY_NIL, const sc_bind_proxy &p029=SC_BIND_PROXY_NIL, const sc_bind_proxy &p030=SC_BIND_PROXY_NIL, const sc_bind_proxy &p031=SC_BIND_PROXY_NIL, const sc_bind_proxy &p032=SC_BIND_PROXY_NIL, const sc_bind_proxy &p033=SC_BIND_PROXY_NIL, const sc_bind_proxy &p034=SC_BIND_PROXY_NIL, const sc_bind_proxy &p035=SC_BIND_PROXY_NIL, const sc_bind_proxy &p036=SC_BIND_PROXY_NIL, const sc_bind_proxy &p037=SC_BIND_PROXY_NIL, const sc_bind_proxy &p038=SC_BIND_PROXY_NIL, const sc_bind_proxy &p039=SC_BIND_PROXY_NIL, const sc_bind_proxy &p040=SC_BIND_PROXY_NIL, const sc_bind_proxy &p041=SC_BIND_PROXY_NIL, const sc_bind_proxy &p042=SC_BIND_PROXY_NIL, const sc_bind_proxy &p043=SC_BIND_PROXY_NIL, const sc_bind_proxy &p044=SC_BIND_PROXY_NIL, const sc_bind_proxy &p045=SC_BIND_PROXY_NIL, const sc_bind_proxy &p046=SC_BIND_PROXY_NIL, const sc_bind_proxy &p047=SC_BIND_PROXY_NIL, const sc_bind_proxy &p048=SC_BIND_PROXY_NIL, const sc_bind_proxy &p049=SC_BIND_PROXY_NIL, const sc_bind_proxy &p050=SC_BIND_PROXY_NIL, const sc_bind_proxy &p051=SC_BIND_PROXY_NIL, const sc_bind_proxy &p052=SC_BIND_PROXY_NIL, const sc_bind_proxy &p053=SC_BIND_PROXY_NIL, const sc_bind_proxy &p054=SC_BIND_PROXY_NIL, const sc_bind_proxy &p055=SC_BIND_PROXY_NIL, const sc_bind_proxy &p056=SC_BIND_PROXY_NIL, const sc_bind_proxy &p057=SC_BIND_PROXY_NIL, const sc_bind_proxy &p058=SC_BIND_PROXY_NIL, const sc_bind_proxy &p059=SC_BIND_PROXY_NIL, const sc_bind_proxy &p060=SC_BIND_PROXY_NIL, const sc_bind_proxy &p061=SC_BIND_PROXY_NIL, const sc_bind_proxy &p062=SC_BIND_PROXY_NIL, const sc_bind_proxy &p063=SC_BIND_PROXY_NIL, const sc_bind_proxy &p064=SC_BIND_PROXY_NIL)
Definition: sc_module.cc:127
void clearDynamic()
Definition: process.hh:112
const char * uniqueName(const char *seed)
Definition: process.hh:142
Process * newMethodProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:56
void set_stack_size(size_t)
Definition: sc_module.cc:347
virtual ::Port & gem5_getPort(const std::string &if_name, int idx=-1)
Definition: sc_module.cc:119
const char SC_ID_MODULE_CTHREAD_AFTER_START_[]
Definition: messages.cc:107
#define SC_REPORT_ERROR(msg_type, msg)
sc_interface * _interface
Definition: sc_module.hh:85
Process * newThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:71
void wait(double d, sc_time_unit u, const sc_event_and_list &eal)
Definition: sc_module.cc:773
const char SC_ID_BAD_SC_MODULE_CONSTRUCTOR_[]
Definition: messages.cc:153
static Module * pickParentModule()
Definition: module.hh:143
sc_module & operator<<(sc_interface &)
Definition: sc_module.cc:219
Bitfield< 5 > t
bool sc_end_of_simulation_invoked()
Definition: sc_module.cc:854
const char SC_ID_DONT_INITIALIZE_[]
Definition: messages.cc:73
Bitfield< 0 > p
void reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:288
void at_negedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:527
void at_negedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.cc:813
void next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal)
Definition: sc_module.cc:622
bool timed_out()
Definition: sc_module.cc:628

Generated on Fri Feb 28 2020 16:27:03 for gem5 by doxygen 1.8.13