gem5  v22.1.0.0
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 
28 #include <memory>
29 #include <string>
30 #include <vector>
31 
32 #include "base/logging.hh"
33 #include "systemc/core/event.hh"
34 #include "systemc/core/kernel.hh"
35 #include "systemc/core/module.hh"
36 #include "systemc/core/object.hh"
37 #include "systemc/core/port.hh"
49 
50 namespace sc_gem5
51 {
52 
53 Process *
55 {
56  Method *p = new Method(name, func);
57  if (::sc_core::sc_is_running()) {
58  std::string name = p->name();
59  delete p;
61  name.c_str());
62  return nullptr;
63  }
64  scheduler.reg(p);
65  return p;
66 }
67 
68 Process *
70 {
71  Thread *p = new Thread(name, func);
72  if (::sc_core::sc_is_running()) {
73  std::string name = p->name();
74  delete p;
76  name.c_str());
77  return nullptr;
78  }
79  scheduler.reg(p);
80  return p;
81 }
82 
83 Process *
85 {
86  CThread *p = new CThread(name, func);
87  if (::sc_core::sc_is_running()) {
88  std::string name = p->name();
89  delete p;
91  name.c_str());
92  return nullptr;
93  }
94  scheduler.reg(p);
95  p->dontInitialize(true);
96  return p;
97 }
98 
99 } // namespace sc_gem5
100 
101 namespace sc_core
102 {
103 
104 sc_bind_proxy::sc_bind_proxy() : _interface(nullptr), _port(nullptr) {}
105 
107  _interface(&_interface), _port(nullptr)
108 {}
109 
111  _interface(nullptr), _port(&_port)
112 {}
113 
115 
116 gem5::Port &
117 sc_module::gem5_getPort(const std::string &if_name, int idx)
118 {
119  fatal("%s does not have any port named %s\n", name(), if_name);
120 }
121 
123 
124 void
126  const sc_bind_proxy &p002,
127  const sc_bind_proxy &p003,
128  const sc_bind_proxy &p004,
129  const sc_bind_proxy &p005,
130  const sc_bind_proxy &p006,
131  const sc_bind_proxy &p007,
132  const sc_bind_proxy &p008,
133  const sc_bind_proxy &p009,
134  const sc_bind_proxy &p010,
135  const sc_bind_proxy &p011,
136  const sc_bind_proxy &p012,
137  const sc_bind_proxy &p013,
138  const sc_bind_proxy &p014,
139  const sc_bind_proxy &p015,
140  const sc_bind_proxy &p016,
141  const sc_bind_proxy &p017,
142  const sc_bind_proxy &p018,
143  const sc_bind_proxy &p019,
144  const sc_bind_proxy &p020,
145  const sc_bind_proxy &p021,
146  const sc_bind_proxy &p022,
147  const sc_bind_proxy &p023,
148  const sc_bind_proxy &p024,
149  const sc_bind_proxy &p025,
150  const sc_bind_proxy &p026,
151  const sc_bind_proxy &p027,
152  const sc_bind_proxy &p028,
153  const sc_bind_proxy &p029,
154  const sc_bind_proxy &p030,
155  const sc_bind_proxy &p031,
156  const sc_bind_proxy &p032,
157  const sc_bind_proxy &p033,
158  const sc_bind_proxy &p034,
159  const sc_bind_proxy &p035,
160  const sc_bind_proxy &p036,
161  const sc_bind_proxy &p037,
162  const sc_bind_proxy &p038,
163  const sc_bind_proxy &p039,
164  const sc_bind_proxy &p040,
165  const sc_bind_proxy &p041,
166  const sc_bind_proxy &p042,
167  const sc_bind_proxy &p043,
168  const sc_bind_proxy &p044,
169  const sc_bind_proxy &p045,
170  const sc_bind_proxy &p046,
171  const sc_bind_proxy &p047,
172  const sc_bind_proxy &p048,
173  const sc_bind_proxy &p049,
174  const sc_bind_proxy &p050,
175  const sc_bind_proxy &p051,
176  const sc_bind_proxy &p052,
177  const sc_bind_proxy &p053,
178  const sc_bind_proxy &p054,
179  const sc_bind_proxy &p055,
180  const sc_bind_proxy &p056,
181  const sc_bind_proxy &p057,
182  const sc_bind_proxy &p058,
183  const sc_bind_proxy &p059,
184  const sc_bind_proxy &p060,
185  const sc_bind_proxy &p061,
186  const sc_bind_proxy &p062,
187  const sc_bind_proxy &p063,
188  const sc_bind_proxy &p064)
189 {
191  auto insert = [&proxies](const ::sc_core::sc_bind_proxy &p) -> bool {
192  if (!p.port() && !p.interface())
193  return false;
194  proxies.push_back(&p);
195  return true;
196  };
197  insert(p001) && insert(p002) && insert(p003) && insert(p004) &&
198  insert(p005) && insert(p006) && insert(p007) && insert(p008) &&
199  insert(p009) && insert(p010) && insert(p011) && insert(p012) &&
200  insert(p013) && insert(p014) && insert(p015) && insert(p016) &&
201  insert(p017) && insert(p018) && insert(p019) && insert(p020) &&
202  insert(p021) && insert(p022) && insert(p023) && insert(p024) &&
203  insert(p025) && insert(p026) && insert(p027) && insert(p028) &&
204  insert(p029) && insert(p030) && insert(p031) && insert(p032) &&
205  insert(p033) && insert(p034) && insert(p035) && insert(p036) &&
206  insert(p037) && insert(p038) && insert(p039) && insert(p040) &&
207  insert(p041) && insert(p042) && insert(p043) && insert(p044) &&
208  insert(p045) && insert(p046) && insert(p047) && insert(p048) &&
209  insert(p049) && insert(p050) && insert(p051) && insert(p052) &&
210  insert(p053) && insert(p054) && insert(p055) && insert(p056) &&
211  insert(p057) && insert(p058) && insert(p059) && insert(p060) &&
212  insert(p061) && insert(p062) && insert(p063) && insert(p064);
213  _gem5_module->bindPorts(proxies);
214 }
215 
218 {
219  (*this)(iface);
220  return *this;
221 }
222 
225 {
226  (*this)(pb);
227  return *this;
228 }
229 
230 sc_module &
232 {
233  (*this)(iface);
234  return *this;
235 }
236 
237 sc_module &
239 {
240  (*this)(pb);
241  return *this;
242 }
243 
246 {
247  return _gem5_module->obj()->get_child_objects();
248 }
249 
252 {
253  return _gem5_module->obj()->get_child_events();
254 }
255 
258  _gem5_module(sc_gem5::currentModule())
259 {
260  if (sc_is_running())
261  SC_REPORT_ERROR(SC_ID_INSERT_MODULE_, "simulation running");
262  if (::sc_gem5::scheduler.elaborationDone())
263  SC_REPORT_ERROR(SC_ID_INSERT_MODULE_, "elaboration done");
264 }
265 
267 sc_module::sc_module(const char *_name) : sc_module(sc_module_name(_name))
268 {
271 }
272 sc_module::sc_module(const std::string &_name) :
273  sc_module(sc_module_name(_name.c_str()))
274 {
277 }
278 
279 void
281 {
283 }
284 
285 void
287 {
289 }
290 
291 void
293 {
295 }
296 
297 void
299 {
301 }
302 
303 void
305 {
306  ::sc_gem5::newReset(&signal, ::sc_gem5::Process::newest(), true, val);
307 }
308 
309 
310 void
312 {
314 }
315 
316 void
318 {
320 }
321 
322 void
324 {
326 }
327 
328 void
330 {
331  ::sc_gem5::newReset(&signal, ::sc_gem5::Process::newest(), false, val);
332 }
333 
334 
335 void
337 {
339  if (p->procKind() == SC_CTHREAD_PROC_)
341  p->dontInitialize(true);
342 }
343 
344 void
346 {
348 }
349 
350 
352 
353 void
355 {
357 }
358 
359 void
361 {
363 }
364 
365 void
367 {
369 }
370 
371 void
373 {
375 }
376 
377 void
379 {
381 }
382 
383 void
385 {
387 }
388 
389 void
391 {
393 }
394 
395 void
397 {
399 }
400 
401 void
403 {
404  ::sc_core::next_trigger(d, u, eol);
405 }
406 
407 void
409 {
411 }
412 
413 void
415 {
416  ::sc_core::next_trigger(d, u, eal);
417 }
418 
419 
420 bool
422 {
424 }
425 
426 
427 void
429 {
430  ::sc_core::wait();
431 }
432 
433 void
435 {
437 }
438 
439 void
441 {
443 }
444 
445 void
447 {
448  ::sc_core::wait(eol);
449 }
450 
451 void
453 {
454  ::sc_core::wait(eal);
455 }
456 
457 void
459 {
461 }
462 
463 void
465 {
466  ::sc_core::wait(d, u);
467 }
468 
469 void
471 {
472  ::sc_core::wait(t, e);
473 }
474 
475 void
477 {
478  ::sc_core::wait(d, u, e);
479 }
480 
481 void
483 {
484  ::sc_core::wait(t, eol);
485 }
486 
487 void
489 {
490  ::sc_core::wait(d, u, eol);
491 }
492 
493 void
495 {
496  ::sc_core::wait(t, eal);
497 }
498 
499 void
501 {
502  ::sc_core::wait(d, u, eal);
503 }
504 
505 
506 void
508 {
509  ::sc_core::halt();
510 }
511 
512 void
514 {
516 }
517 
518 void
520 {
522 }
523 
524 void
526 {
528 }
529 
530 void
532 {
534 }
535 
536 
537 void
539 {
541  p->cancelTimeout();
542  p->clearDynamic();
543 }
544 
545 void
547 {
549  p->cancelTimeout();
551 }
552 
553 void
555 {
557  p->cancelTimeout();
559 }
560 
561 void
563 {
565  p->cancelTimeout();
567 }
568 
569 void
571 {
573  p->setTimeout(t);
574  p->clearDynamic();
575 }
576 
577 void
579 {
580  next_trigger(sc_time(d, u));
581 }
582 
583 void
584 next_trigger(const sc_time &t, const sc_event &e)
585 {
587  p->setTimeout(t);
589 }
590 
591 void
593 {
594  next_trigger(sc_time(d, u), e);
595 }
596 
597 void
599 {
601  p->setTimeout(t);
603 }
604 
605 void
607 {
608  next_trigger(sc_time(d, u), eol);
609 }
610 
611 void
613 {
615  p->setTimeout(t);
617 }
618 
619 void
621 {
622  next_trigger(sc_time(d, u), eal);
623 }
624 
625 bool
627 {
629  if (!p)
630  return false;
631  else
632  return p->timedOut();
633 }
634 
635 
636 namespace
637 {
638 
639 bool
640 waitErrorCheck(sc_gem5::Process *p)
641 {
642  if (p->procKind() == SC_METHOD_PROC_) {
644  "\n in SC_METHODs use next_trigger() instead");
645  return true;
646  }
647  return false;
648 }
649 
650 } // anonymous namespace
651 
652 void
654 {
656  if (waitErrorCheck(p))
657  return;
658  p->cancelTimeout();
659  p->clearDynamic();
661 }
662 
663 void
664 wait(int n)
665 {
666  if (n <= 0) {
667  std::string msg = gem5::csprintf("n = %d", n);
669  }
671  p->waitCount(n - 1);
672  wait();
673 }
674 
675 void
676 wait(const sc_event &e)
677 {
679  if (waitErrorCheck(p))
680  return;
681  p->cancelTimeout();
684 }
685 
686 void
688 {
690  if (waitErrorCheck(p))
691  return;
692  p->cancelTimeout();
695 }
696 
697 void
699 {
701  if (waitErrorCheck(p))
702  return;
703  p->cancelTimeout();
706 }
707 
708 void
709 wait(const sc_time &t)
710 {
712  if (waitErrorCheck(p))
713  return;
714  p->setTimeout(t);
715  p->clearDynamic();
717 }
718 
719 void
721 {
722  wait(sc_time(d, u));
723 }
724 
725 void
726 wait(const sc_time &t, const sc_event &e)
727 {
729  if (waitErrorCheck(p))
730  return;
731  p->setTimeout(t);
734 }
735 
736 void
737 wait(double d, sc_time_unit u, const sc_event &e)
738 {
739  wait(sc_time(d, u), e);
740 }
741 
742 void
743 wait(const sc_time &t, const sc_event_or_list &eol)
744 {
746  if (waitErrorCheck(p))
747  return;
748  p->setTimeout(t);
751 }
752 
753 void
754 wait(double d, sc_time_unit u, const sc_event_or_list &eol)
755 {
756  wait(sc_time(d, u), eol);
757 }
758 
759 void
760 wait(const sc_time &t, const sc_event_and_list &eal)
761 {
763  if (waitErrorCheck(p))
764  return;
765  p->setTimeout(t);
768 }
769 
770 void
771 wait(double d, sc_time_unit u, const sc_event_and_list &eal)
772 {
773  wait(sc_time(d, u), eal);
774 }
775 
776 void
778 {
779  ::sc_core::wait();
780  throw ::sc_gem5::ScHalt();
781 }
782 
783 void
785 {
786  while (s.read())
787  wait();
788  while (!s.read())
789  wait();
790 }
791 
792 void
794 {
795  while (s.read() == sc_dt::Log_1)
796  wait();
797  while (s.read() == sc_dt::Log_0)
798  wait();
799 }
800 
801 void
803 {
804  while (!s.read())
805  wait();
806  while (s.read())
807  wait();
808 }
809 
810 void
812 {
813  while (s.read() == sc_dt::Log_0)
814  wait();
815  while (s.read() == sc_dt::Log_1)
816  wait();
817 }
818 
819 const char *
820 sc_gen_unique_name(const char *seed)
821 {
822  if (!seed || seed[0] == '\0') {
824  seed = "unnamed";
825  }
826 
828  if (mod)
829  return mod->uniqueName(seed);
830 
832  if (p)
833  return p->uniqueName(seed);
834 
836 }
837 
838 bool
840 {
841  return sc_gem5::findEvent(name) != sc_gem5::allEvents.end() ||
843 }
844 
845 bool
847 {
849 }
850 
851 bool
853 {
855 }
856 
857 sc_module *
859 {
861  modules.emplace_back(mod);
862  return mod;
863 }
864 
865 } // namespace sc_core
Ports are used to interface objects to each other.
Definition: port.hh:62
virtual ~sc_module()
Definition: sc_module.cc:122
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:125
virtual const std::vector< sc_object * > & get_child_objects() const
Definition: sc_module.cc:245
void async_reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:311
virtual const std::vector< sc_event * > & get_child_events() const
Definition: sc_module.cc:251
void set_stack_size(size_t)
Definition: sc_module.cc:345
void reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:286
void at_posedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:513
sc_module & operator<<(sc_interface &)
Definition: sc_module.cc:217
sc_gem5::Module * _gem5_module
Definition: sc_module.hh:258
virtual gem5::Port & gem5_getPort(const std::string &if_name, int idx=-1)
Definition: sc_module.cc:117
sc_module & operator,(sc_interface &)
Definition: sc_module.cc:231
void dont_initialize()
Definition: sc_module.cc:336
void at_negedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:525
const char * name() const
Definition: sc_object.cc:44
static bool endOfSimulationComplete()
Definition: kernel.cc:52
static bool startOfSimulationComplete()
Definition: kernel.cc:51
void endModule()
Definition: module.hh:95
void deprecatedConstructor()
Definition: module.hh:96
void bindPorts(std::vector< const ::sc_core::sc_bind_proxy * > &proxies)
Definition: module.cc:107
Object * obj()
Definition: module.hh:113
const std::vector< sc_core::sc_event * > & get_child_events() const
Definition: object.cc:189
const std::vector< sc_core::sc_object * > & get_child_objects() const
Definition: object.cc:183
static Process * newest()
Definition: process.hh:123
void setStackSize(size_t size)
Definition: process.hh:104
void reg(Process *p)
Definition: scheduler.cc:146
Process * current()
Definition: scheduler.hh:185
const char * gen(std::string seed)
Definition: module.hh:60
STL vector class.
Definition: stl.hh:37
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:190
Bitfield< 31 > n
Definition: misc_types.hh:462
Bitfield< 7 > i
Definition: misc_types.hh:67
Bitfield< 9 > e
Definition: misc_types.hh:65
Bitfield< 22 > u
Definition: misc_types.hh:359
Bitfield< 9 > d
Definition: misc_types.hh:64
Bitfield< 1 > s
Definition: pagetable.hh:64
Bitfield< 51 > t
Definition: pagetable.hh:56
Bitfield< 54 > p
Definition: pagetable.hh:70
Bitfield< 63 > val
Definition: misc.hh:776
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:161
bool sc_start_of_simulation_invoked()
Definition: sc_module.cc:846
const sc_bind_proxy SC_BIND_PROXY_NIL
Definition: sc_module.cc:114
sc_module * sc_module_sc_new(sc_module *mod)
Definition: sc_module.cc:858
void at_negedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.cc:802
bool sc_end_of_simulation_invoked()
Definition: sc_module.cc:852
void wait(double d, sc_time_unit u, const sc_event_and_list &eal)
Definition: sc_module.cc:771
const char SC_ID_WAIT_NOT_ALLOWED_[]
Definition: messages.cc:62
void at_negedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.cc:811
void next_trigger()
Definition: sc_module.cc:538
bool sc_is_running()
Definition: sc_main.cc:141
void next_trigger(double d, sc_time_unit u, const sc_event_and_list &eal)
Definition: sc_module.cc:620
void at_posedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.cc:793
const char SC_ID_GEN_UNIQUE_NAME_[]
Definition: messages.cc:82
bool timed_out()
Definition: sc_module.cc:626
void halt()
Definition: sc_module.cc:777
const char SC_ID_INSERT_MODULE_[]
Definition: messages.cc:77
const char SC_ID_WAIT_N_INVALID_[]
Definition: messages.cc:73
void at_posedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.cc:784
bool sc_hierarchical_name_exists(const char *name)
Definition: sc_module.cc:839
sc_time_unit
Definition: sc_time.hh:40
const char SC_ID_BAD_SC_MODULE_CONSTRUCTOR_[]
Definition: messages.cc:151
const char SC_ID_DONT_INITIALIZE_[]
Definition: messages.cc:71
const char * sc_gen_unique_name(const char *seed)
Definition: sc_module.cc:820
const char SC_ID_MODULE_THREAD_AFTER_START_[]
Definition: messages.cc:103
const char SC_ID_MODULE_METHOD_AFTER_START_[]
Definition: messages.cc:101
const char SC_ID_MODULE_CTHREAD_AFTER_START_[]
Definition: messages.cc:105
void wait()
Definition: sc_module.cc:653
@ Log_1
Definition: sc_logic.hh:87
@ Log_0
Definition: sc_logic.hh:86
UniqueNameGen globalNameGen
Definition: module.cc:49
static Module * pickParentModule()
Definition: module.hh:141
Objects allObjects
Definition: object.cc:287
void newReset(const sc_core::sc_port_base *pb, Process *p, bool s, bool v)
Definition: process.cc:425
void newDynamicSensitivityEvent(Process *p, const sc_core::sc_event *e)
Definition: sensitivity.cc:188
sc_core::sc_object * findObject(const char *name, const Objects &objects)
Definition: object.cc:296
void newDynamicSensitivityEventAndList(Process *p, const sc_core::sc_event_and_list *eal)
Definition: sensitivity.cc:205
Process * newCThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:84
Scheduler scheduler
Definition: scheduler.cc:494
Events allEvents
Definition: event.cc:218
Kernel * kernel
Definition: kernel.cc:184
Process * newMethodProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:54
void newDynamicSensitivityEventOrList(Process *p, const sc_core::sc_event_or_list *eol)
Definition: sensitivity.cc:196
Module * currentModule()
Definition: module.cc:193
Module * newModuleChecked()
Definition: module.cc:201
Process * newThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:69
EventsIt findEvent(const std::string &name)
Definition: event.cc:221
#define SC_REPORT_WARNING(msg_type, msg)
#define SC_REPORT_ERROR(msg_type, msg)
const std::string & name()
Definition: trace.cc:49

Generated on Wed Dec 21 2022 10:22:40 for gem5 by doxygen 1.9.1