gem5  v21.1.0.2
sc_module.hh
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 #ifndef __SYSTEMC_CORE_EXT_SC_MODULE_HH__
29 #define __SYSTEMC_CORE_EXT_SC_MODULE_HH__
30 
31 #include <string>
32 #include <vector>
33 
34 #include "mem/port.hh"
35 #include "sc_object.hh"
36 #include "sc_process_handle.hh"
37 #include "sc_sensitive.hh"
38 #include "sc_time.hh"
39 
40 namespace sc_dt
41 {
42 
43 class sc_logic;
44 
45 } // namespace sc_dt
46 
47 namespace sc_gem5
48 {
49 
50 class Kernel;
51 class Module;
52 class Process;
53 struct ProcessFuncWrapper;
54 
55 Process *newMethodProcess(const char *name, ProcessFuncWrapper *func);
56 Process *newThreadProcess(const char *name, ProcessFuncWrapper *func);
57 Process *newCThreadProcess(const char *name, ProcessFuncWrapper *func);
58 
59 } // namespace sc_gem5
60 
61 // Gem5 prototype
62 class Port;
63 
64 namespace sc_core
65 {
66 
67 template <class T>
68 class sc_in;
69 template <class T>
70 class sc_out;
71 template <class T>
72 class sc_inout;
73 template <class T>
74 class sc_signal_in_if;
75 
76 class sc_event;
77 class sc_event_and_list;
78 class sc_event_or_list;
79 class sc_module_name;
80 
82 {
83  private:
86 
87  public:
88  sc_bind_proxy();
91 
92  sc_interface *interface() const { return _interface; }
93  sc_port_base *port() const { return _port; }
94 };
95 
96 extern const sc_bind_proxy SC_BIND_PROXY_NIL;
97 
98 class sc_module : public sc_object
99 {
100  public:
101  // Gem5 specific extensions
102  virtual gem5::Port &gem5_getPort(const std::string &if_name, int idx=-1);
103 
104  public:
105  friend class ::sc_gem5::Kernel;
106  friend class ::sc_gem5::Module;
107 
108  virtual ~sc_module();
109 
110  virtual const char *kind() const { return "sc_module"; }
111 
112  void operator () (const sc_bind_proxy &p001,
113  const sc_bind_proxy &p002 = SC_BIND_PROXY_NIL,
114  const sc_bind_proxy &p003 = SC_BIND_PROXY_NIL,
115  const sc_bind_proxy &p004 = SC_BIND_PROXY_NIL,
116  const sc_bind_proxy &p005 = SC_BIND_PROXY_NIL,
117  const sc_bind_proxy &p006 = SC_BIND_PROXY_NIL,
118  const sc_bind_proxy &p007 = SC_BIND_PROXY_NIL,
119  const sc_bind_proxy &p008 = SC_BIND_PROXY_NIL,
120  const sc_bind_proxy &p009 = SC_BIND_PROXY_NIL,
121  const sc_bind_proxy &p010 = SC_BIND_PROXY_NIL,
122  const sc_bind_proxy &p011 = SC_BIND_PROXY_NIL,
123  const sc_bind_proxy &p012 = SC_BIND_PROXY_NIL,
124  const sc_bind_proxy &p013 = SC_BIND_PROXY_NIL,
125  const sc_bind_proxy &p014 = SC_BIND_PROXY_NIL,
126  const sc_bind_proxy &p015 = SC_BIND_PROXY_NIL,
127  const sc_bind_proxy &p016 = SC_BIND_PROXY_NIL,
128  const sc_bind_proxy &p017 = SC_BIND_PROXY_NIL,
129  const sc_bind_proxy &p018 = SC_BIND_PROXY_NIL,
130  const sc_bind_proxy &p019 = SC_BIND_PROXY_NIL,
131  const sc_bind_proxy &p020 = SC_BIND_PROXY_NIL,
132  const sc_bind_proxy &p021 = SC_BIND_PROXY_NIL,
133  const sc_bind_proxy &p022 = SC_BIND_PROXY_NIL,
134  const sc_bind_proxy &p023 = SC_BIND_PROXY_NIL,
135  const sc_bind_proxy &p024 = SC_BIND_PROXY_NIL,
136  const sc_bind_proxy &p025 = SC_BIND_PROXY_NIL,
137  const sc_bind_proxy &p026 = SC_BIND_PROXY_NIL,
138  const sc_bind_proxy &p027 = SC_BIND_PROXY_NIL,
139  const sc_bind_proxy &p028 = SC_BIND_PROXY_NIL,
140  const sc_bind_proxy &p029 = SC_BIND_PROXY_NIL,
141  const sc_bind_proxy &p030 = SC_BIND_PROXY_NIL,
142  const sc_bind_proxy &p031 = SC_BIND_PROXY_NIL,
143  const sc_bind_proxy &p032 = SC_BIND_PROXY_NIL,
144  const sc_bind_proxy &p033 = SC_BIND_PROXY_NIL,
145  const sc_bind_proxy &p034 = SC_BIND_PROXY_NIL,
146  const sc_bind_proxy &p035 = SC_BIND_PROXY_NIL,
147  const sc_bind_proxy &p036 = SC_BIND_PROXY_NIL,
148  const sc_bind_proxy &p037 = SC_BIND_PROXY_NIL,
149  const sc_bind_proxy &p038 = SC_BIND_PROXY_NIL,
150  const sc_bind_proxy &p039 = SC_BIND_PROXY_NIL,
151  const sc_bind_proxy &p040 = SC_BIND_PROXY_NIL,
152  const sc_bind_proxy &p041 = SC_BIND_PROXY_NIL,
153  const sc_bind_proxy &p042 = SC_BIND_PROXY_NIL,
154  const sc_bind_proxy &p043 = SC_BIND_PROXY_NIL,
155  const sc_bind_proxy &p044 = SC_BIND_PROXY_NIL,
156  const sc_bind_proxy &p045 = SC_BIND_PROXY_NIL,
157  const sc_bind_proxy &p046 = SC_BIND_PROXY_NIL,
158  const sc_bind_proxy &p047 = SC_BIND_PROXY_NIL,
159  const sc_bind_proxy &p048 = SC_BIND_PROXY_NIL,
160  const sc_bind_proxy &p049 = SC_BIND_PROXY_NIL,
161  const sc_bind_proxy &p050 = SC_BIND_PROXY_NIL,
162  const sc_bind_proxy &p051 = SC_BIND_PROXY_NIL,
163  const sc_bind_proxy &p052 = SC_BIND_PROXY_NIL,
164  const sc_bind_proxy &p053 = SC_BIND_PROXY_NIL,
165  const sc_bind_proxy &p054 = SC_BIND_PROXY_NIL,
166  const sc_bind_proxy &p055 = SC_BIND_PROXY_NIL,
167  const sc_bind_proxy &p056 = SC_BIND_PROXY_NIL,
168  const sc_bind_proxy &p057 = SC_BIND_PROXY_NIL,
169  const sc_bind_proxy &p058 = SC_BIND_PROXY_NIL,
170  const sc_bind_proxy &p059 = SC_BIND_PROXY_NIL,
171  const sc_bind_proxy &p060 = SC_BIND_PROXY_NIL,
172  const sc_bind_proxy &p061 = SC_BIND_PROXY_NIL,
173  const sc_bind_proxy &p062 = SC_BIND_PROXY_NIL,
174  const sc_bind_proxy &p063 = SC_BIND_PROXY_NIL,
175  const sc_bind_proxy &p064 = SC_BIND_PROXY_NIL);
176 
177  // Deprecated
182 
183  virtual const std::vector<sc_object *> &get_child_objects() const;
184  virtual const std::vector<sc_event *> &get_child_events() const;
185 
186  protected:
187  sc_module(const sc_module_name &);
188  sc_module();
189 
190  // Deprecated
191  sc_module(const char *);
192  sc_module(const std::string &);
193 
194  /* Deprecated, but used in the regression tests. */
195  void end_module();
196 
197  void reset_signal_is(const sc_in<bool> &, bool);
198  void reset_signal_is(const sc_inout<bool> &, bool);
199  void reset_signal_is(const sc_out<bool> &, bool);
200  void reset_signal_is(const sc_signal_in_if<bool> &, bool);
201 
202  void async_reset_signal_is(const sc_in<bool> &, bool);
203  void async_reset_signal_is(const sc_inout<bool> &, bool);
204  void async_reset_signal_is(const sc_out<bool> &, bool);
205  void async_reset_signal_is(const sc_signal_in_if<bool> &, bool);
206 
208 
209  void dont_initialize();
210  void set_stack_size(size_t);
211 
212  void next_trigger();
213  void next_trigger(const sc_event &);
214  void next_trigger(const sc_event_or_list &);
215  void next_trigger(const sc_event_and_list &);
216  void next_trigger(const sc_time &);
217  void next_trigger(double, sc_time_unit);
218  void next_trigger(const sc_time &, const sc_event &);
219  void next_trigger(double, sc_time_unit, const sc_event &);
220  void next_trigger(const sc_time &, const sc_event_or_list &);
221  void next_trigger(double, sc_time_unit, const sc_event_or_list &);
222  void next_trigger(const sc_time &, const sc_event_and_list &);
223  void next_trigger(double, sc_time_unit, const sc_event_and_list &);
224 
225  // Nonstandard
226  bool timed_out();
227 
228  void wait();
229  void wait(int);
230  void wait(const sc_event &);
231  void wait(const sc_event_or_list &);
232  void wait(const sc_event_and_list &);
233  void wait(const sc_time &);
234  void wait(double, sc_time_unit);
235  void wait(const sc_time &, const sc_event &);
236  void wait(double, sc_time_unit, const sc_event &);
237  void wait(const sc_time &, const sc_event_or_list &);
238  void wait(double, sc_time_unit, const sc_event_or_list &);
239  void wait(const sc_time &, const sc_event_and_list &);
240  void wait(double, sc_time_unit, const sc_event_and_list &);
241 
242  // Nonstandard
243  void halt();
244  void at_posedge(const sc_signal_in_if<bool> &);
246  void at_negedge(const sc_signal_in_if<bool> &);
248 
249  virtual void before_end_of_elaboration() {}
250  virtual void end_of_elaboration() {}
251  virtual void start_of_simulation() {}
252  virtual void end_of_simulation() {}
253 
254  private:
256 
257  // Disabled
258  sc_module(const sc_module &) : sc_object() {};
259  sc_module &operator = (const sc_module &) { return *this; }
260 };
261 
262 void next_trigger();
263 void next_trigger(const sc_event &);
264 void next_trigger(const sc_event_or_list &);
265 void next_trigger(const sc_event_and_list &);
266 void next_trigger(const sc_time &);
267 void next_trigger(double, sc_time_unit);
268 void next_trigger(const sc_time &, const sc_event &);
269 void next_trigger(double, sc_time_unit, const sc_event &);
270 void next_trigger(const sc_time &, const sc_event_or_list &);
271 void next_trigger(double, sc_time_unit, const sc_event_or_list &);
272 void next_trigger(const sc_time &, const sc_event_and_list &);
273 void next_trigger(double, sc_time_unit, const sc_event_and_list &);
274 
275 void wait();
276 void wait(int);
277 void wait(const sc_event &);
278 void wait(const sc_event_or_list &);
279 void wait(const sc_event_and_list &);
280 void wait(const sc_time &);
281 void wait(double, sc_time_unit);
282 void wait(const sc_time &, const sc_event &);
283 void wait(double, sc_time_unit, const sc_event &);
284 void wait(const sc_time &, const sc_event_or_list &);
285 void wait(double, sc_time_unit, const sc_event_or_list &);
286 void wait(const sc_time &, const sc_event_and_list &);
287 void wait(double, sc_time_unit, const sc_event_and_list &);
288 
289 // Nonstandard
290 bool timed_out();
291 
292 #define SC_MODULE(name) struct name : ::sc_core::sc_module
293 
294 #define SC_CTOR(name) \
295  typedef name SC_CURRENT_USER_MODULE; \
296  name(::sc_core::sc_module_name)
297 
298 #define SC_HAS_PROCESS(name) typedef name SC_CURRENT_USER_MODULE
299 
300 #define SC_METHOD(name) \
301  { \
302  ::sc_gem5::Process *p = \
303  ::sc_gem5::newMethodProcess( \
304  #name, new ::sc_gem5::ProcessMemberFuncWrapper< \
305  SC_CURRENT_USER_MODULE>(this, \
306  &SC_CURRENT_USER_MODULE::name)); \
307  if (p) \
308  this->sensitive << p; \
309  }
310 #define SC_THREAD(name) \
311  { \
312  ::sc_gem5::Process *p = \
313  ::sc_gem5::newThreadProcess( \
314  #name, new ::sc_gem5::ProcessMemberFuncWrapper< \
315  SC_CURRENT_USER_MODULE>(this, \
316  &SC_CURRENT_USER_MODULE::name)); \
317  if (p) \
318  this->sensitive << p; \
319  }
320 #define SC_CTHREAD(name, clk) \
321  { \
322  ::sc_gem5::Process *p = \
323  ::sc_gem5::newCThreadProcess( \
324  #name, new ::sc_gem5::ProcessMemberFuncWrapper< \
325  SC_CURRENT_USER_MODULE>(this, \
326  &SC_CURRENT_USER_MODULE::name)); \
327  if (p) \
328  this->sensitive(p, clk); \
329  }
330 
331 // Nonstandard
332 // Documentation for this is very scarce, but it looks like it's supposed to
333 // stop the currently executing cthread, or if a cthread isn't running report
334 // an error.
335 void halt();
336 void at_posedge(const sc_signal_in_if<bool> &);
337 void at_posedge(const sc_signal_in_if<sc_dt::sc_logic> &);
338 void at_negedge(const sc_signal_in_if<bool> &);
339 void at_negedge(const sc_signal_in_if<sc_dt::sc_logic> &);
340 
341 const char *sc_gen_unique_name(const char *);
342 
343 // Nonstandard
344 bool sc_hierarchical_name_exists(const char *name);
345 
348 
351 
352 // Nonstandard
353 // Allocates a module of type x and records a pointer to it so that it gets
354 // destructed automatically at the end of the simulation.
356 #define SC_NEW(x) ::sc_core::sc_module_sc_new(new x);
357 
358 // Nonstandard
359 #define SC_WAIT() \
360  ::sc_core::sc_set_location(__FILE__, __LINE__); \
361  ::sc_core::wait(); \
362  ::sc_core::sc_set_location(NULL, 0)
363 
364 // Nonstandard
365 #define SC_WAITN(n) \
366  ::sc_core::sc_set_location(__FILE__, __LINE__); \
367  ::sc_core::wait(n); \
368  ::sc_core::sc_set_location(NULL, 0)
369 
370 // Nonstandard
371 #define SC_WAIT_UNTIL(expr) \
372  do { SC_WAIT(); } while (!(expr))
373 
374 } // namespace sc_core
375 
376 #endif //__SYSTEMC_EXT_CORE_SC_MODULE_HH__
sc_core::sc_port_base
Definition: sc_port.hh:74
sc_core::sc_in< bool >
Definition: sc_in.hh:165
sc_core::sc_module::operator()
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
sc_core::sc_signal_in_if< bool >
Definition: sc_signal_in_if.hh:74
sc_core::sc_module
Definition: sc_module.hh:98
sc_core::sc_module::set_stack_size
void set_stack_size(size_t)
Definition: sc_module.cc:345
sc_dt
Definition: sc_bit.cc:67
sc_core::sc_bind_proxy::_interface
sc_interface * _interface
Definition: sc_module.hh:84
sc_core
Definition: messages.cc:31
sc_core::sc_module::async_reset_signal_is
void async_reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:311
sc_core::sc_time_unit
sc_time_unit
Definition: sc_time.hh:40
sc_core::sc_module::reset_signal_is
void reset_signal_is(const sc_in< bool > &, bool)
Definition: sc_module.cc:286
sc_core::sc_event_and_list
Definition: sc_event.hh:61
sc_core::sc_interface
Definition: sc_interface.hh:37
sc_core::sc_bind_proxy::interface
sc_interface * interface() const
Definition: sc_module.hh:92
sc_core::sc_event_or_list
Definition: sc_event.hh:93
sc_core::sc_module::sc_module
sc_module()
Definition: sc_module.cc:256
sc_core::sc_bind_proxy::_port
sc_port_base * _port
Definition: sc_module.hh:85
sc_core::sc_bind_proxy::port
sc_port_base * port() const
Definition: sc_module.hh:93
sc_core::sc_module_sc_new
sc_module * sc_module_sc_new(sc_module *mod)
Definition: sc_module.cc:858
sc_core::sc_hierarchical_name_exists
bool sc_hierarchical_name_exists(const char *name)
Definition: sc_module.cc:839
std::vector
STL vector class.
Definition: stl.hh:37
sc_gem5::newThreadProcess
Process * newThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:69
sc_core::sc_module::~sc_module
virtual ~sc_module()
Definition: sc_module.cc:122
sc_core::timed_out
bool timed_out()
Definition: sc_module.cc:626
sc_core::sc_module::next_trigger
void next_trigger()
Definition: sc_module.cc:351
sc_core::sc_bind_proxy
Definition: sc_module.hh:81
sc_core::sc_module::kind
virtual const char * kind() const
Definition: sc_module.hh:110
sc_core::sc_module::get_child_objects
virtual const std::vector< sc_object * > & get_child_objects() const
Definition: sc_module.cc:245
sc_core::sc_module::end_of_simulation
virtual void end_of_simulation()
Definition: sc_module.hh:252
sc_core::sc_sensitive
Definition: sc_sensitive.hh:63
sc_core::sc_module::dont_initialize
void dont_initialize()
Definition: sc_module.cc:336
sc_core::sc_event
Definition: sc_event.hh:169
sc_core::sc_time
Definition: sc_time.hh:49
sc_core::sc_module::operator<<
sc_module & operator<<(sc_interface &)
Definition: sc_module.cc:217
port.hh
sc_core::sc_module_name
Definition: sc_module_name.hh:41
sc_core::sc_channel
sc_module sc_channel
Definition: sc_module.hh:347
sc_gem5::newMethodProcess
Process * newMethodProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:54
sc_core::sc_module::sc_module
sc_module(const sc_module &)
Definition: sc_module.hh:258
sc_core::sc_gen_unique_name
const char * sc_gen_unique_name(const char *seed)
Definition: sc_module.cc:820
sc_core::sc_object
Definition: sc_object.hh:50
name
const std::string & name()
Definition: trace.cc:49
sc_core::sc_module::operator=
sc_module & operator=(const sc_module &)
Definition: sc_module.hh:259
sc_core::sc_module::end_of_elaboration
virtual void end_of_elaboration()
Definition: sc_module.hh:250
sc_core::sc_behavior
sc_module sc_behavior
Definition: sc_module.hh:346
sc_sensitive.hh
sc_core::sc_module::at_negedge
void at_negedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:525
sc_core::sc_start_of_simulation_invoked
bool sc_start_of_simulation_invoked()
Definition: sc_module.cc:846
sc_process_handle.hh
sc_core::sc_module::timed_out
bool timed_out()
Definition: sc_module.cc:421
sc_core::sc_bind_proxy::sc_bind_proxy
sc_bind_proxy()
Definition: sc_module.cc:104
sc_core::wait
void wait()
Definition: sc_module.cc:653
sc_core::SC_BIND_PROXY_NIL
const sc_bind_proxy SC_BIND_PROXY_NIL
Definition: sc_module.cc:114
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
sc_core::at_posedge
void at_posedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.cc:784
sc_core::sc_module::gem5_getPort
virtual gem5::Port & gem5_getPort(const std::string &if_name, int idx=-1)
Definition: sc_module.cc:117
sc_core::sc_module::before_end_of_elaboration
virtual void before_end_of_elaboration()
Definition: sc_module.hh:249
sc_core::sc_signal_in_if< sc_dt::sc_logic >
Definition: sc_signal_in_if.hh:108
sc_gem5::newCThreadProcess
Process * newCThreadProcess(const char *name, ProcessFuncWrapper *func)
Definition: sc_module.cc:84
sc_core::sc_out< bool >
sc_object.hh
sc_core::sc_inout< bool >
Definition: sc_inout.hh:193
sc_core::sc_module::wait
void wait()
Definition: sc_module.cc:428
sc_gem5
Definition: sc_clock.cc:41
sc_core::sc_module::halt
void halt()
Definition: sc_module.cc:507
sc_core::at_negedge
void at_negedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.cc:802
sc_core::sc_module::_gem5_module
sc_gem5::Module * _gem5_module
Definition: sc_module.hh:255
sc_core::sc_module::start_of_simulation
virtual void start_of_simulation()
Definition: sc_module.hh:251
sc_core::sc_module::sensitive
sc_sensitive sensitive
Definition: sc_module.hh:207
sc_core::halt
void halt()
Definition: sc_module.cc:777
sc_time.hh
sc_core::next_trigger
void next_trigger()
Definition: sc_module.cc:538
sc_core::sc_module::end_module
void end_module()
Definition: sc_module.cc:280
sc_core::sc_end_of_simulation_invoked
bool sc_end_of_simulation_invoked()
Definition: sc_module.cc:852
sc_gem5::Module
Definition: module.hh:71
sc_core::sc_module::get_child_events
virtual const std::vector< sc_event * > & get_child_events() const
Definition: sc_module.cc:251
sc_core::sc_module::at_posedge
void at_posedge(const sc_signal_in_if< bool > &)
Definition: sc_module.cc:513
sc_core::sc_module::operator,
sc_module & operator,(sc_interface &)
Definition: sc_module.cc:231

Generated on Tue Sep 21 2021 12:25:52 for gem5 by doxygen 1.8.17